From 25144d93b7fc46946f4b56265c7d9c18c2f79701 Mon Sep 17 00:00:00 2001 From: Margaux Clerc Date: Mon, 27 Apr 2015 15:44:03 +0200 Subject: [PATCH] Fix chat notifications on lollipop --- src/org/linphone/ChatFragment.java | 5 +++++ src/org/linphone/LinphoneActivity.java | 14 ++++++++++++++ src/org/linphone/LinphoneManager.java | 10 ++++++---- .../linphone/compatibility/ApiTwentyOnePlus.java | 1 + 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index 10ef4ac92..91157a2cf 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -438,6 +438,10 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC LinphoneService.instance().removeMessageNotification(); + if (LinphoneActivity.isInstanciated()) { + LinphoneActivity.instance().updateChatFragment(null); + } + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); @@ -462,6 +466,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC if (getResources().getBoolean(R.bool.show_statusbar_only_on_dialer)) { LinphoneActivity.instance().hideStatusBar(); } + LinphoneActivity.instance().updateChatFragment(this); } String draft = getArguments().getString("messageDraft"); diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index 2b0e8bf18..71605d991 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -102,6 +102,7 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene private FragmentsAvailable currentFragment, nextFragment; private List fragmentsHistory; private Fragment dialerFragment, messageListFragment, friendStatusListenerFragment; + private ChatFragment chatFragment; private SavedState dialerSavedState; private boolean isAnimationDisabled = false, preferLinphoneContacts = false; private OrientationEventListener mOrientationHelper; @@ -599,6 +600,15 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene changeCurrentFragment(FragmentsAvailable.ABOUT, null); } + public boolean displayChatMessageNotification(String address){ + if(chatFragment != null) { + if(chatFragment.getSipUri().equals(address)){ + return true; + } + } + return false; + } + public void displayChat(String sipUri) { if (getResources().getBoolean(R.bool.disable_chat)) { return; @@ -744,6 +754,10 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); } + public void updateChatFragment(ChatFragment fragment) { + chatFragment = fragment; + } + public void updateChatListFragment(ChatListFragment fragment) { messageListFragment = fragment; } diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 3ebd4d8c8..52b038723 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -717,10 +717,12 @@ public class LinphoneManager implements LinphoneCoreListener { try { Contact contact = ContactsManager.getInstance().findContactWithAddress(mServiceContext.getContentResolver(),from); if (!mServiceContext.getResources().getBoolean(R.bool.disable_chat__message_notification)) { - if(contact != null) { - LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), contact.getName(), textMessage); - } else { - LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), from.getUserName(), textMessage); + if(LinphoneActivity.isInstanciated() && !LinphoneActivity.instance().displayChatMessageNotification(from.asStringUriOnly())) { + if (contact != null) { + LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), contact.getName(), textMessage); + } else { + LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), from.getUserName(), textMessage); + } } } } catch (Exception e) { diff --git a/src/org/linphone/compatibility/ApiTwentyOnePlus.java b/src/org/linphone/compatibility/ApiTwentyOnePlus.java index d02e5c3e5..e12b228b7 100644 --- a/src/org/linphone/compatibility/ApiTwentyOnePlus.java +++ b/src/org/linphone/compatibility/ApiTwentyOnePlus.java @@ -50,6 +50,7 @@ public class ApiTwentyOnePlus { .setSmallIcon(R.drawable.chat_icon_over) .setAutoCancel(true) .setContentIntent(intent) + .setDefaults(Notification.DEFAULT_ALL) .setLargeIcon(contactIcon) .setCategory(Notification.CATEGORY_MESSAGE) .setVisibility(Notification.VISIBILITY_PRIVATE)