From 55e3400a54aed10edb8de1d73cec52069a760a58 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 14 Jan 2013 12:29:35 +0100 Subject: [PATCH] Block outgoing SIP messages like INVITE or chat messages if linphonecore.isNetworkUnreachable --- res/values-FR/strings.xml | 1 + res/values/strings.xml | 1 + src/org/linphone/ChatFragment.java | 14 ++++++++++-- src/org/linphone/LinphoneManager.java | 33 ++++++++++++++++----------- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/res/values-FR/strings.xml b/res/values-FR/strings.xml index c46277740..592f64ae7 100644 --- a/res/values-FR/strings.xml +++ b/res/values-FR/strings.xml @@ -364,6 +364,7 @@ Utilisateur non trouvé Paramètres média incompatibles Votre correspondant à un débit faible, la vidéo ne peut démarrer + Le réseau n\'est pas joignable Aujourd\'hui Hier diff --git a/res/values/strings.xml b/res/values/strings.xml index ed2aea972..7a16ad8eb 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -411,6 +411,7 @@ User not found Incompatible media parameters Your correspondent has low bandwidth, video can\'t be started + Network is unreachable Today Yesterday diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index cccc0b383..a54fde846 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -458,7 +458,10 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } private void sendTextMessage() { - if (chatRoom != null && message != null && message.getText().length() > 0) { + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + boolean isNetworkReachable = lc == null ? false : lc.isNetworkReachable(); + + if (chatRoom != null && message != null && message.getText().length() > 0 && isNetworkReachable) { String messageToSend = message.getText().toString(); message.setText(""); @@ -472,11 +475,16 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC displayMessage(newId, messageToSend, String.valueOf(System.currentTimeMillis()), false, State.InProgress, messagesLayout); scrollToEnd(); + } else if (!isNetworkReachable && LinphoneActivity.isInstanciated()) { + LinphoneActivity.instance().displayCustomToast(getString(R.string.error_network_unreachable), Toast.LENGTH_LONG); } } private void sendImageMessage(String url, Bitmap bitmap) { - if (chatRoom != null && url != null && url.length() > 0) { + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + boolean isNetworkReachable = lc == null ? false : lc.isNetworkReachable(); + + if (chatRoom != null && url != null && url.length() > 0 && isNetworkReachable) { LinphoneChatMessage chatMessage = chatRoom.createLinphoneChatMessage(""); chatMessage.setExternalBodyUrl(url); chatRoom.sendMessage(chatMessage, this); @@ -489,6 +497,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC displayImageMessage(newId, bitmap, String.valueOf(System.currentTimeMillis()), false, State.InProgress, messagesLayout); scrollToEnd(); + } else if (!isNetworkReachable && LinphoneActivity.isInstanciated()) { + LinphoneActivity.instance().displayCustomToast(getString(R.string.error_network_unreachable), Toast.LENGTH_LONG); } } diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 15a03b398..86858044b 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -107,6 +107,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; +import android.widget.Toast; /** * @@ -277,20 +278,26 @@ public final class LinphoneManager implements LinphoneCoreListener { boolean isLowBandwidthConnection = !LinphoneUtils.isHightBandwidthConnection(LinphoneService.instance().getApplicationContext()); - try { - if (Version.isVideoCapable()) { - boolean prefVideoEnable = isVideoEnabled(); - int key = R.string.pref_video_initiate_call_with_video_key; - boolean prefInitiateWithVideo = getPrefBoolean(key, false); - CallManager.getInstance().inviteAddress(lAddress, prefVideoEnable && prefInitiateWithVideo, isLowBandwidthConnection); - } else { - CallManager.getInstance().inviteAddress(lAddress, false, isLowBandwidthConnection); + if (mLc.isNetworkReachable()) { + try { + if (Version.isVideoCapable()) { + boolean prefVideoEnable = isVideoEnabled(); + int key = R.string.pref_video_initiate_call_with_video_key; + boolean prefInitiateWithVideo = getPrefBoolean(key, false); + CallManager.getInstance().inviteAddress(lAddress, prefVideoEnable && prefInitiateWithVideo, isLowBandwidthConnection); + } else { + CallManager.getInstance().inviteAddress(lAddress, false, isLowBandwidthConnection); + } + + + } catch (LinphoneCoreException e) { + mListenerDispatcher.tryingNewOutgoingCallButCannotGetCallParameters(); + return; } - - - } catch (LinphoneCoreException e) { - mListenerDispatcher.tryingNewOutgoingCallButCannotGetCallParameters(); - return; + } else if (LinphoneActivity.isInstanciated()) { + LinphoneActivity.instance().displayCustomToast(getString(R.string.error_network_unreachable), Toast.LENGTH_LONG); + } else { + Log.e("Error: " + getString(R.string.error_network_unreachable)); } }