Re-enable bubble menu shortcut on CFv2.

This commit is contained in:
Nicholas 2023-07-26 13:21:00 -04:00 committed by GitHub
parent fe5d5df2d7
commit 72d1e55373
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 4 deletions

View file

@ -69,7 +69,6 @@ import com.google.android.material.snackbar.Snackbar
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Completable
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.disposables.Disposable
import io.reactivex.rxjava3.kotlin.subscribeBy import io.reactivex.rxjava3.kotlin.subscribeBy
@ -2857,7 +2856,7 @@ class ConversationFragment :
return ConversationOptionsMenu.Snapshot( return ConversationOptionsMenu.Snapshot(
recipient = recipient, recipient = recipient,
isPushAvailable = viewModel.isPushAvailable, isPushAvailable = viewModel.isPushAvailable,
canShowAsBubble = Observable.empty(), canShowAsBubble = viewModel.canShowAsBubble(requireContext()),
isActiveGroup = recipient?.isActiveGroup == true, isActiveGroup = recipient?.isActiveGroup == true,
isActiveV2Group = recipient?.let { it.isActiveGroup && it.isPushV2Group } == true, isActiveV2Group = recipient?.let { it.isActiveGroup && it.isPushV2Group } == true,
isInActiveGroup = recipient?.isActiveGroup == false, isInActiveGroup = recipient?.isActiveGroup == false,

View file

@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.conversation.v2
import android.content.Context import android.content.Context
import android.net.Uri import android.net.Uri
import android.os.Build
import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutInfoCompat
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers 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.recipients.RecipientId
import org.thoughtcrime.securesms.search.MessageResult import org.thoughtcrime.securesms.search.MessageResult
import org.thoughtcrime.securesms.sms.MessageSender 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.TextSecurePreferences
import org.thoughtcrime.securesms.util.hasGiftBadge import org.thoughtcrime.securesms.util.hasGiftBadge
import org.thoughtcrime.securesms.util.rx.RxStore import org.thoughtcrime.securesms.util.rx.RxStore
@ -403,6 +406,12 @@ class ConversationViewModel(
return repository.getTemporaryViewOnceUri(mmsMessageRecord).observeOn(AndroidSchedulers.mainThread()) return repository.getTemporaryViewOnceUri(mmsMessageRecord).observeOn(AndroidSchedulers.mainThread())
} }
fun canShowAsBubble(context: Context): Observable<Boolean> {
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<MultiselectPart>): Maybe<CharSequence> { fun copyToClipboard(context: Context, messageParts: Set<MultiselectPart>): Maybe<CharSequence> {
return repository.copyToClipboard(context, messageParts) return repository.copyToClipboard(context, messageParts)
} }

View file

@ -47,6 +47,12 @@ public final class BubbleUtil {
@RequiresApi(CONVERSATION_SUPPORT_VERSION) @RequiresApi(CONVERSATION_SUPPORT_VERSION)
@WorkerThread @WorkerThread
public static boolean canBubble(@NonNull Context context, @NonNull RecipientId recipientId, @Nullable Long threadId) { 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) { if (threadId == null) {
Log.d(TAG, "Cannot bubble recipient without thread"); Log.d(TAG, "Cannot bubble recipient without thread");
return false; return false;
@ -58,7 +64,6 @@ public final class BubbleUtil {
return false; return false;
} }
Recipient recipient = Recipient.resolved(recipientId);
if (recipient.isBlocked()) { if (recipient.isBlocked()) {
Log.d(TAG, "Cannot bubble blocked recipient"); Log.d(TAG, "Cannot bubble blocked recipient");
return false; return false;
@ -66,7 +71,7 @@ public final class BubbleUtil {
NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); NotificationManager notificationManager = ServiceUtil.getNotificationManager(context);
NotificationChannel conversationChannel = notificationManager.getNotificationChannel(ConversationUtil.getChannelId(context, recipient), NotificationChannel conversationChannel = notificationManager.getNotificationChannel(ConversationUtil.getChannelId(context, recipient),
ConversationUtil.getShortcutId(recipientId)); ConversationUtil.getShortcutId(recipient.getId()));
final StringBuilder bubbleLoggingMessage = new StringBuilder("Bubble State:"); final StringBuilder bubbleLoggingMessage = new StringBuilder("Bubble State:");
if (Build.VERSION.SDK_INT < 31) { if (Build.VERSION.SDK_INT < 31) {