diff --git a/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java b/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java index 4361b471f7059c8750870c348a598e9113aa0afe..f88f305edf1a0429d77598c34b8643f9da23192d 100644 --- a/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java +++ b/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java @@ -45,6 +45,7 @@ import cx.ring.application.JamiApplication; import cx.ring.databinding.ActivityConversationBinding; import cx.ring.fragments.ConversationFragment; import cx.ring.interfaces.Colorable; +import cx.ring.services.NotificationServiceImpl; import cx.ring.utils.ConversationPath; import cx.ring.utils.MediaButtonsHelper; @@ -56,12 +57,16 @@ public class ConversationActivity extends AppCompatActivity implements Colorable private Intent mPendingIntent = null; private ActivityConversationBinding binding; + private boolean mIsBubble; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); JamiApplication.getInstance().startDaemon(); + mIsBubble = getIntent().getBooleanExtra(NotificationServiceImpl.EXTRA_BUBBLE, false); + binding = ActivityConversationBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); @@ -95,8 +100,11 @@ public class ConversationActivity extends AppCompatActivity implements Colorable conversationPath = ConversationPath.fromBundle(savedInstanceState); } if (mConversationFragment == null) { + Bundle bundle = conversationPath.toBundle(); + bundle.putBoolean(NotificationServiceImpl.EXTRA_BUBBLE, mIsBubble); + mConversationFragment = new ConversationFragment(); - mConversationFragment.setArguments(conversationPath.toBundle()); + mConversationFragment.setArguments(bundle); getSupportFragmentManager().beginTransaction() .replace(R.id.main_frame, mConversationFragment, null) .commit(); diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java index a2c226e0893a0278facafae6c1936bf43abbfc3c..d3427f8294cd4fbe87e05e52ad98f70740b12c71 100644 --- a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java +++ b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java @@ -102,6 +102,7 @@ import cx.ring.mvp.BaseSupportFragment; import cx.ring.services.LocationSharingService; import cx.ring.plugins.PluginUtils; import cx.ring.services.NotificationService; +import cx.ring.services.NotificationServiceImpl; import cx.ring.settings.pluginssettings.PluginDetails; import cx.ring.utils.ActionHelper; import cx.ring.utils.AndroidFileUtils; @@ -156,6 +157,8 @@ public class ConversationFragment extends BaseSupportFragment<ConversationPresen private final CompositeDisposable mCompositeDisposable = new CompositeDisposable(); private int mSelectedPosition; + private boolean mIsBubble; + private AvatarDrawable mConversationAvatar; private final Map<String, AvatarDrawable> mParticipantAvatars = new HashMap<>(); private final Map<String, AvatarDrawable> mSmallParticipantAvatars = new HashMap<>(); @@ -771,7 +774,7 @@ public class ConversationFragment extends BaseSupportFragment<ConversationPresen @Override public void onResume() { super.onResume(); - presenter.resume(); + presenter.resume(mIsBubble); } @Override @@ -813,6 +816,7 @@ public class ConversationFragment extends BaseSupportFragment<ConversationPresen @Override protected void initPresenter(ConversationPresenter presenter) { ConversationPath path = ConversationPath.fromBundle(getArguments()); + mIsBubble = getArguments().getBoolean(NotificationServiceImpl.EXTRA_BUBBLE); if (path == null) return; Uri contactUri = new Uri(path.getContactId()); diff --git a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java index 0a501cac962e68f33621f9e5bada7c6560875503..4989a335fb5681ab58a6f3cba8f2dbfdf3b67689 100644 --- a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java +++ b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java @@ -89,6 +89,8 @@ import cx.ring.utils.Tuple; public class NotificationServiceImpl implements NotificationService { + public static final String EXTRA_BUBBLE = "bubble"; + private static final String TAG = NotificationServiceImpl.class.getSimpleName(); private static final String NOTIF_MSG = "MESSAGE"; @@ -517,10 +519,12 @@ public class NotificationServiceImpl implements NotificationService { if (contactPicture != null) { messageNotificationBuilder.setLargeIcon(contactPicture); Intent intentBubble = new Intent(Intent.ACTION_VIEW, path, mContext, ConversationActivity.class); + intentBubble.putExtra(EXTRA_BUBBLE, true); messageNotificationBuilder.setBubbleMetadata(new NotificationCompat.BubbleMetadata.Builder() .setDesiredHeight(600) .setIcon(IconCompat.createWithAdaptiveBitmap(contactPicture)) - .setIntent(PendingIntent.getActivity(mContext, 0, intentBubble, 0)) + .setIntent(PendingIntent.getActivity(mContext, 0, intentBubble, + PendingIntent.FLAG_UPDATE_CURRENT)) .build()); } diff --git a/ring-android/libringclient/src/main/java/cx/ring/conversation/ConversationPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/conversation/ConversationPresenter.java index aac47e91f81565e563e7b1d60d8eafcb0434ce2c..f2e99705a846873c10d3374a437261d436f048d6 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/conversation/ConversationPresenter.java +++ b/ring-android/libringclient/src/main/java/cx/ring/conversation/ConversationPresenter.java @@ -147,7 +147,7 @@ public class ConversationPresenter extends RootPresenter<ConversationView> { } } - public void resume() { + public void resume(boolean isBubble) { Log.w(TAG, "resume " + mConversation + " " + mAccountId + " " + mContactUri); mVisibilityDisposable.clear(); mVisibilityDisposable.add(mConversationSubject @@ -155,7 +155,7 @@ public class ConversationPresenter extends RootPresenter<ConversationView> { .subscribe(conversation -> { conversation.setVisible(true); updateOngoingCallView(conversation); - mConversationFacade.readMessages(mAccountService.getAccount(mAccountId), conversation); + mConversationFacade.readMessages(mAccountService.getAccount(mAccountId), conversation, !isBubble); }, e -> Log.e(TAG, "Error loading conversation", e))); } diff --git a/ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java b/ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java index 4c920930bd9e32bfc4d9da395c2cb92445574f4b..e603c789842be6428fcb934a3451b5a1826ec7be 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java +++ b/ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java @@ -196,16 +196,18 @@ public class ConversationFacade { public void readMessages(String accountId, Uri contact) { Account account = mAccountService.getAccount(accountId); if (account != null) - readMessages(account, account.getByUri(contact)); + readMessages(account, account.getByUri(contact), true); } - public void readMessages(Account account, Conversation conversation) { + public void readMessages(Account account, Conversation conversation, boolean cancelNotification) { if (conversation != null) { String lastMessage = readMessages(conversation); if (lastMessage != null) { account.refreshed(conversation); - mNotificationService.cancelTextNotification(conversation.getContact().getPrimaryUri()); mAccountService.setMessageDisplayed(account.getAccountID(), conversation.getContact().getPrimaryNumber(), lastMessage); + if (cancelNotification) { + mNotificationService.cancelTextNotification(conversation.getContact().getPrimaryUri()); + } } } }