Observe sharedprefs for banner updates.

This commit is contained in:
Nicholas Tinsley
2024-08-22 15:44:44 -04:00
committed by mtang-signal
parent 244a81ef24
commit d15bb05ae3
11 changed files with 157 additions and 135 deletions

View File

@@ -106,6 +106,8 @@ import org.thoughtcrime.securesms.badges.gifts.OpenableGift
import org.thoughtcrime.securesms.badges.gifts.OpenableGiftItemDecoration
import org.thoughtcrime.securesms.badges.gifts.viewgift.received.ViewReceivedGiftBottomSheet
import org.thoughtcrime.securesms.badges.gifts.viewgift.sent.ViewSentGiftBottomSheet
import org.thoughtcrime.securesms.banner.banners.ServiceOutageBanner
import org.thoughtcrime.securesms.banner.banners.UnauthorizedBanner
import org.thoughtcrime.securesms.components.AnimatingToggle
import org.thoughtcrime.securesms.components.ComposeText
import org.thoughtcrime.securesms.components.ConversationSearchBottomBar
@@ -227,6 +229,7 @@ import org.thoughtcrime.securesms.groups.ui.migration.GroupsV1MigrationInfoBotto
import org.thoughtcrime.securesms.groups.ui.migration.GroupsV1MigrationSuggestionsDialog
import org.thoughtcrime.securesms.groups.v2.GroupBlockJoinRequestResult
import org.thoughtcrime.securesms.invites.InviteActions
import org.thoughtcrime.securesms.jobs.ServiceOutageDetectionJob
import org.thoughtcrime.securesms.keyboard.KeyboardPage
import org.thoughtcrime.securesms.keyboard.KeyboardPagerFragment
import org.thoughtcrime.securesms.keyboard.KeyboardPagerViewModel
@@ -306,7 +309,7 @@ import org.thoughtcrime.securesms.util.MessageConstraintsUtil.isValidEditMessage
import org.thoughtcrime.securesms.util.PlayStoreUtil
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.SaveAttachmentUtil
import org.thoughtcrime.securesms.util.ServiceOutageObserver
import org.thoughtcrime.securesms.util.SharedPreferencesLifecycleObserver
import org.thoughtcrime.securesms.util.SignalLocalMetrics
import org.thoughtcrime.securesms.util.StorageUtil
import org.thoughtcrime.securesms.util.TextSecurePreferences
@@ -1019,13 +1022,22 @@ class ConversationFragment :
val conversationBannerListener = ConversationBannerListener()
binding.conversationBanner.listener = conversationBannerListener
val serviceOutageObserver = ServiceOutageObserver(requireContext())
lifecycle.addObserver(serviceOutageObserver)
val unauthorizedProducer = UnauthorizedBanner.Producer(requireContext())
val serviceOutageProducer = ServiceOutageBanner.Producer(requireContext())
lifecycle.addObserver(
SharedPreferencesLifecycleObserver(
requireContext(),
mapOf(
TextSecurePreferences.UNAUTHORIZED_RECEIVED to { unauthorizedProducer.queryAndEmit() },
TextSecurePreferences.SERVICE_OUTAGE to { serviceOutageProducer.queryAndEmit() }
)
)
)
val bannerFlows = viewModel.getBannerFlows(
context = requireContext(),
serviceOutageStatusFlow = serviceOutageObserver.flow,
unauthorizedFlow = unauthorizedProducer.flow,
serviceOutageStatusFlow = serviceOutageProducer.flow,
groupJoinClickListener = conversationBannerListener::reviewJoinRequestsAction,
onAddMembers = {
conversationGroupViewModel.groupRecordSnapshot?.let { groupRecord ->
@@ -1038,6 +1050,10 @@ class ConversationFragment :
binding.conversationBanner.collectAndShowBanners(bannerFlows)
if (TextSecurePreferences.getServiceOutage(context)) {
AppDependencies.jobManager.add(ServiceOutageDetectionJob())
}
viewModel
.identityRecordsObservable
.distinctUntilChanged()

View File

@@ -310,7 +310,7 @@ class ConversationViewModel(
}
@OptIn(ExperimentalCoroutinesApi::class)
fun getBannerFlows(context: Context, serviceOutageStatusFlow: Flow<Boolean>, groupJoinClickListener: () -> Unit, onAddMembers: () -> Unit, onNoThanks: () -> Unit, bubbleClickListener: (Boolean) -> Unit): List<Flow<Banner>> {
fun getBannerFlows(context: Context, unauthorizedFlow: Flow<UnauthorizedBanner>, serviceOutageStatusFlow: Flow<ServiceOutageBanner>, groupJoinClickListener: () -> Unit, onAddMembers: () -> Unit, onNoThanks: () -> Unit, bubbleClickListener: (Boolean) -> Unit): List<Flow<Banner>> {
val pendingGroupJoinFlow: Flow<PendingGroupJoinRequestsBanner> = merge(
flow {
emit(PendingGroupJoinRequestsBanner(false, 0, {}, {}))
@@ -327,8 +327,8 @@ class ConversationViewModel(
return listOf(
OutdatedBuildBanner.createFlow(context, OutdatedBuildBanner.ExpiryStatus.EXPIRED_ONLY),
UnauthorizedBanner.createFlow(context),
ServiceOutageBanner.fromFlow(serviceOutageStatusFlow),
unauthorizedFlow,
serviceOutageStatusFlow,
pendingGroupJoinFlow,
groupV1SuggestionsFlow,
BubbleOptOutBanner.createFlow(inBubble = repository.isInBubble, bubbleClickListener)