Delete the reminders system.

This commit is contained in:
Nicholas Tinsley
2024-08-19 13:45:53 -04:00
committed by mtang-signal
parent 4002dea05d
commit 9a24455085
37 changed files with 73 additions and 1277 deletions

View File

@@ -21,8 +21,6 @@ import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.banner.Banner
import org.thoughtcrime.securesms.banner.BannerManager
import org.thoughtcrime.securesms.components.identity.UnverifiedBannerView
import org.thoughtcrime.securesms.components.reminder.Reminder
import org.thoughtcrime.securesms.components.reminder.ReminderView
import org.thoughtcrime.securesms.components.voice.VoiceNotePlayerView
import org.thoughtcrime.securesms.database.identity.IdentityRecordList
import org.thoughtcrime.securesms.database.model.IdentityRecord
@@ -50,7 +48,6 @@ class ConversationBannerView @JvmOverloads constructor(
defStyleAttr: Int = 0
) : LinearLayoutCompat(context, attrs, defStyleAttr) {
private val unverifiedBannerStub: Stub<UnverifiedBannerView> by lazy { ViewUtil.findStubById(this, R.id.unverified_banner_stub) }
private val reminderStub: Stub<ReminderView> by lazy { ViewUtil.findStubById(this, R.id.reminder_stub) }
private val bannerStub: Stub<ComposeView> by lazy { ViewUtil.findStubById(this, R.id.banner_stub) }
private val reviewBannerStub: Stub<ReviewBannerView> by lazy { ViewUtil.findStubById(this, R.id.review_banner_stub) }
private val voiceNotePlayerStub: Stub<View> by lazy { ViewUtil.findStubById(this, R.id.voice_note_player_stub) }
@@ -68,33 +65,6 @@ class ConversationBannerView @JvmOverloads constructor(
}
}
fun showReminder(reminder: Reminder) {
show(
stub = reminderStub
) {
showReminder(reminder)
setOnActionClickListener {
when (it) {
R.id.reminder_action_update_now -> listener?.updateAppAction()
R.id.reminder_action_re_register -> listener?.reRegisterAction()
R.id.reminder_action_review_join_requests -> listener?.reviewJoinRequestsAction()
R.id.reminder_action_gv1_suggestion_no_thanks -> listener?.gv1SuggestionsAction(it)
R.id.reminder_action_bubble_not_now, R.id.reminder_action_bubble_turn_off -> {
listener?.changeBubbleSettingAction(disableSetting = it == R.id.reminder_action_bubble_turn_off)
}
}
}
setOnHideListener {
clearReminder()
true
}
}
}
fun clearReminder() {
hide(reminderStub)
}
fun showUnverifiedBanner(identityRecords: IdentityRecordList) {
show(
stub = unverifiedBannerStub
@@ -169,10 +139,6 @@ class ConversationBannerView @JvmOverloads constructor(
val slideTransition = Slide(Gravity.TOP)
val changeTransition = ChangeBounds().apply {
if (reminderStub.isVisible) {
addTarget(reminderStub.get())
}
if (unverifiedBannerStub.isVisible) {
addTarget(unverifiedBannerStub.get())
}

View File

@@ -210,7 +210,6 @@ import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList
import org.thoughtcrime.securesms.databinding.V2ConversationFragmentBinding
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.events.GroupCallPeekEvent
import org.thoughtcrime.securesms.events.ReminderUpdateEvent
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ItemDecoration
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackController
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicy
@@ -228,7 +227,6 @@ 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
@@ -1020,35 +1018,25 @@ class ConversationFragment :
val conversationBannerListener = ConversationBannerListener()
binding.conversationBanner.listener = conversationBannerListener
if (RemoteConfig.newBannerUi) {
val serviceOutageObserver = ServiceOutageObserver(requireContext())
val bannerFlows = viewModel.getBannerFlows(
context = requireContext(),
serviceOutageStatusFlow = serviceOutageObserver.flow,
groupJoinClickListener = conversationBannerListener::reviewJoinRequestsAction,
onAddMembers = {
conversationGroupViewModel.groupRecordSnapshot?.let { groupRecord ->
GroupsV1MigrationSuggestionsDialog.show(requireActivity(), groupRecord.id.requireV2(), groupRecord.gv1MigrationSuggestions)
}
},
onNoThanks = conversationGroupViewModel::onSuggestedMembersBannerDismissed,
bubbleClickListener = conversationBannerListener::changeBubbleSettingAction
)
val serviceOutageObserver = ServiceOutageObserver(requireContext())
binding.conversationBanner.collectAndShowBanners(bannerFlows)
} else {
viewModel
.reminder
.subscribeBy { reminder ->
if (reminder.isPresent) {
binding.conversationBanner.showReminder(reminder.get())
} else {
binding.conversationBanner.clearReminder()
}
lifecycle.addObserver(serviceOutageObserver)
val bannerFlows = viewModel.getBannerFlows(
context = requireContext(),
serviceOutageStatusFlow = serviceOutageObserver.flow,
groupJoinClickListener = conversationBannerListener::reviewJoinRequestsAction,
onAddMembers = {
conversationGroupViewModel.groupRecordSnapshot?.let { groupRecord ->
GroupsV1MigrationSuggestionsDialog.show(requireActivity(), groupRecord.id.requireV2(), groupRecord.gv1MigrationSuggestions)
}
.addTo(disposables)
}
},
onNoThanks = conversationGroupViewModel::onSuggestedMembersBannerDismissed,
bubbleClickListener = conversationBannerListener::changeBubbleSettingAction
)
binding.conversationBanner.collectAndShowBanners(bannerFlows)
viewModel
.identityRecordsObservable
@@ -4287,11 +4275,6 @@ class ConversationFragment :
groupCallViewModel.onGroupCallPeekEvent(groupCallPeekEvent)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onReminderUpdateEvent(reminderUpdateEvent: ReminderUpdateEvent) {
viewModel.refreshReminder()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRecaptchaRequiredEvent(recaptchaRequiredEvent: RecaptchaRequiredEvent) {
RecaptchaProofBottomSheetFragment.show(childFragmentManager)

View File

@@ -30,7 +30,6 @@ import org.signal.core.util.concurrent.MaybeCompat
import org.signal.core.util.concurrent.SignalExecutors
import org.signal.core.util.dp
import org.signal.core.util.logging.Log
import org.signal.core.util.toOptional
import org.signal.paging.PagedData
import org.signal.paging.PagingConfig
import org.thoughtcrime.securesms.R
@@ -38,13 +37,6 @@ import org.thoughtcrime.securesms.ShortcutLauncherActivity
import org.thoughtcrime.securesms.attachments.TombstoneAttachment
import org.thoughtcrime.securesms.avatar.fallback.FallbackAvatarDrawable
import org.thoughtcrime.securesms.components.emoji.EmojiStrings
import org.thoughtcrime.securesms.components.reminder.BubbleOptOutReminder
import org.thoughtcrime.securesms.components.reminder.ExpiredBuildReminder
import org.thoughtcrime.securesms.components.reminder.GroupsV1MigrationSuggestionsReminder
import org.thoughtcrime.securesms.components.reminder.PendingGroupJoinRequestsReminder
import org.thoughtcrime.securesms.components.reminder.Reminder
import org.thoughtcrime.securesms.components.reminder.ServiceOutageReminder
import org.thoughtcrime.securesms.components.reminder.UnauthorizedReminder
import org.thoughtcrime.securesms.contactshare.Contact
import org.thoughtcrime.securesms.contactshare.ContactUtil
import org.thoughtcrime.securesms.conversation.ConversationMessage
@@ -74,9 +66,7 @@ import org.thoughtcrime.securesms.database.model.StickerRecord
import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.jobs.MultiDeviceViewOnceOpenJob
import org.thoughtcrime.securesms.jobs.ServiceOutageDetectionJob
import org.thoughtcrime.securesms.keyboard.KeyboardUtil
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.linkpreview.LinkPreview
import org.thoughtcrime.securesms.messagerequests.MessageRequestState
import org.thoughtcrime.securesms.mms.OutgoingMessage
@@ -101,7 +91,6 @@ import org.thoughtcrime.securesms.util.hasTextSlide
import org.thoughtcrime.securesms.util.isViewOnceMessage
import org.thoughtcrime.securesms.util.requireTextSlide
import java.io.IOException
import java.util.Optional
import kotlin.math.max
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
@@ -303,35 +292,6 @@ class ConversationRepository(
return SignalDatabase.messages.getUnreadMentionCount(threadId)
}
fun getReminder(groupRecord: GroupRecord?): Maybe<Optional<Reminder>> {
return Maybe.fromCallable {
val reminder: Reminder? = when {
ExpiredBuildReminder.isEligible() -> ExpiredBuildReminder(applicationContext)
UnauthorizedReminder.isEligible(applicationContext) -> UnauthorizedReminder()
ServiceOutageReminder.isEligible(applicationContext) -> {
AppDependencies.jobManager.add(ServiceOutageDetectionJob())
ServiceOutageReminder()
}
groupRecord != null && groupRecord.actionableRequestingMembersCount > 0 -> {
PendingGroupJoinRequestsReminder(groupRecord.actionableRequestingMembersCount)
}
groupRecord != null && groupRecord.gv1MigrationSuggestions.isNotEmpty() -> {
GroupsV1MigrationSuggestionsReminder(groupRecord.gv1MigrationSuggestions)
}
isInBubble && !SignalStore.tooltips.hasSeenBubbleOptOutTooltip() && Build.VERSION.SDK_INT > 29 -> {
BubbleOptOutReminder()
}
else -> null
}
reminder.toOptional()
}
}
@Suppress("IfThenToElvis")
fun getIdentityRecords(recipient: Recipient, groupRecord: GroupRecord?): Single<IdentityRecordsState> {
return Single.fromCallable {

View File

@@ -36,7 +36,6 @@ import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.rx3.asFlow
import org.signal.core.util.concurrent.subscribeWithSubject
import org.signal.core.util.orNull
import org.signal.paging.ProxyPagingController
import org.thoughtcrime.securesms.banner.Banner
@@ -46,7 +45,6 @@ import org.thoughtcrime.securesms.banner.banners.OutdatedBuildBanner
import org.thoughtcrime.securesms.banner.banners.PendingGroupJoinRequestsBanner
import org.thoughtcrime.securesms.banner.banners.ServiceOutageBanner
import org.thoughtcrime.securesms.banner.banners.UnauthorizedBanner
import org.thoughtcrime.securesms.components.reminder.Reminder
import org.thoughtcrime.securesms.contactshare.Contact
import org.thoughtcrime.securesms.conversation.ConversationMessage
import org.thoughtcrime.securesms.conversation.ScheduledMessagesRepository
@@ -87,7 +85,6 @@ import org.thoughtcrime.securesms.util.hasGiftBadge
import org.thoughtcrime.securesms.util.rx.RxStore
import org.thoughtcrime.securesms.wallpaper.ChatWallpaper
import org.whispersystems.signalservice.api.push.ServiceId
import java.util.Optional
import java.util.concurrent.TimeUnit
import kotlin.time.Duration
@@ -96,7 +93,7 @@ import kotlin.time.Duration
*/
class ConversationViewModel(
val threadId: Long,
private val requestedStartingPosition: Int,
requestedStartingPosition: Int,
initialChatColors: ChatColors,
private val repository: ConversationRepository,
recipientRepository: ConversationRecipientRepository,
@@ -167,9 +164,6 @@ class ConversationViewModel(
val messageRequestState: MessageRequestState
get() = hasMessageRequestStateSubject.value ?: MessageRequestState()
private val refreshReminder: Subject<Unit> = PublishSubject.create()
val reminder: Observable<Optional<Reminder>>
private val groupRecordFlow: Flow<GroupRecord>
private val refreshIdentityRecords: Subject<Unit> = PublishSubject.create()
@@ -286,13 +280,6 @@ class ConversationViewModel(
}
inputReadyState = _inputReadyState.observeOn(AndroidSchedulers.mainThread())
recipientRepository.conversationRecipient.map { Unit }.subscribeWithSubject(refreshReminder, disposables)
reminder = Observable.combineLatest(refreshReminder.startWithItem(Unit), recipientRepository.groupRecord) { _, groupRecord -> groupRecord }
.subscribeOn(Schedulers.io())
.flatMapMaybe { groupRecord -> repository.getReminder(groupRecord.orNull()) }
.observeOn(AndroidSchedulers.mainThread())
groupRecordFlow = recipientRepository.groupRecord
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@@ -356,10 +343,6 @@ class ConversationViewModel(
_searchQuery.onNext(query ?: "")
}
fun refreshReminder() {
refreshReminder.onNext(Unit)
}
fun onDismissReview() {
val recipientId = recipientSnapshot?.id ?: return
repository.dismissRequestReviewState(recipientId)