conversation: detect if activity is in bubble
Change-Id: Ic5fbf6db92f86c7951e3039fd337e291d9d131cd
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 4361b47..f88f305 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.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 @@
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 @@
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 a2c226e..d3427f8 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.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 @@
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 @@
@Override
public void onResume() {
super.onResume();
- presenter.resume();
+ presenter.resume(mIsBubble);
}
@Override
@@ -813,6 +816,7 @@
@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 0a501ca..4989a33 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 @@
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 @@
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 aac47e9..f2e9970 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 void resume() {
+ public void resume(boolean isBubble) {
Log.w(TAG, "resume " + mConversation + " " + mAccountId + " " + mContactUri);
mVisibilityDisposable.clear();
mVisibilityDisposable.add(mConversationSubject
@@ -155,7 +155,7 @@
.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 4c92093..e603c78 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 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());
+ }
}
}
}