From 72d1e553731abc13a28efd83a9cd434b7a1e9735 Mon Sep 17 00:00:00 2001 From: Nicholas Date: Wed, 26 Jul 2023 13:21:00 -0400 Subject: [PATCH] Re-enable bubble menu shortcut on CFv2. --- .../securesms/conversation/v2/ConversationFragment.kt | 3 +-- .../securesms/conversation/v2/ConversationViewModel.kt | 9 +++++++++ .../java/org/thoughtcrime/securesms/util/BubbleUtil.java | 9 +++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index 81daaf44fe..8aa5ae6f5f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -69,7 +69,6 @@ import com.google.android.material.snackbar.Snackbar import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Completable -import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.kotlin.subscribeBy @@ -2857,7 +2856,7 @@ class ConversationFragment : return ConversationOptionsMenu.Snapshot( recipient = recipient, isPushAvailable = viewModel.isPushAvailable, - canShowAsBubble = Observable.empty(), + canShowAsBubble = viewModel.canShowAsBubble(requireContext()), isActiveGroup = recipient?.isActiveGroup == true, isActiveV2Group = recipient?.let { it.isActiveGroup && it.isPushV2Group } == true, isInActiveGroup = recipient?.isActiveGroup == false, diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt index 9d4a763a91..8442ce0a7b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt @@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.conversation.v2 import android.content.Context import android.net.Uri +import android.os.Build import androidx.core.content.pm.ShortcutInfoCompat import androidx.lifecycle.ViewModel import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers @@ -61,6 +62,8 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.search.MessageResult import org.thoughtcrime.securesms.sms.MessageSender +import org.thoughtcrime.securesms.util.BubbleUtil +import org.thoughtcrime.securesms.util.ConversationUtil import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.hasGiftBadge import org.thoughtcrime.securesms.util.rx.RxStore @@ -403,6 +406,12 @@ class ConversationViewModel( return repository.getTemporaryViewOnceUri(mmsMessageRecord).observeOn(AndroidSchedulers.mainThread()) } + fun canShowAsBubble(context: Context): Observable { + return recipient + .map { Build.VERSION.SDK_INT >= ConversationUtil.CONVERSATION_SUPPORT_VERSION && BubbleUtil.canBubble(context, it, threadId) } + .observeOn(AndroidSchedulers.mainThread()) + } + fun copyToClipboard(context: Context, messageParts: Set): Maybe { return repository.copyToClipboard(context, messageParts) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/BubbleUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/BubbleUtil.java index b696ac4c5e..ed08c75930 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/BubbleUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/BubbleUtil.java @@ -47,6 +47,12 @@ public final class BubbleUtil { @RequiresApi(CONVERSATION_SUPPORT_VERSION) @WorkerThread public static boolean canBubble(@NonNull Context context, @NonNull RecipientId recipientId, @Nullable Long threadId) { + Recipient recipient = Recipient.resolved(recipientId); + return canBubble(context, recipient, threadId); + } + + @RequiresApi(CONVERSATION_SUPPORT_VERSION) + public static boolean canBubble(@NonNull Context context, @NonNull Recipient recipient, @Nullable Long threadId) { if (threadId == null) { Log.d(TAG, "Cannot bubble recipient without thread"); return false; @@ -58,7 +64,6 @@ public final class BubbleUtil { return false; } - Recipient recipient = Recipient.resolved(recipientId); if (recipient.isBlocked()) { Log.d(TAG, "Cannot bubble blocked recipient"); return false; @@ -66,7 +71,7 @@ public final class BubbleUtil { NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); NotificationChannel conversationChannel = notificationManager.getNotificationChannel(ConversationUtil.getChannelId(context, recipient), - ConversationUtil.getShortcutId(recipientId)); + ConversationUtil.getShortcutId(recipient.getId())); final StringBuilder bubbleLoggingMessage = new StringBuilder("Bubble State:"); if (Build.VERSION.SDK_INT < 31) {