From eb190f5f00c687d8987aa6d0fbdc62e1435c7486 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Mon, 31 Mar 2025 10:10:23 -0300 Subject: [PATCH] Remove ConversationListTabs enum. --- .../thoughtcrime/securesms/MainActivity.kt | 16 ++++++------ .../securesms/calls/log/CallLogFragment.kt | 4 +-- .../conversation/v2/ConversationFragment.kt | 4 +-- .../ConversationListFragment.java | 4 +-- .../main/MainActivityListHostFragment.kt | 17 ++++++------- .../stories/landing/StoriesLandingFragment.kt | 4 +-- .../stories/tabs/ConversationListTab.kt | 7 ------ .../tabs/ConversationListTabsFragment.kt | 6 ++--- .../stories/tabs/ConversationListTabsState.kt | 5 ++-- .../tabs/ConversationListTabsViewModel.kt | 25 ++++++++++--------- 10 files changed, 43 insertions(+), 49 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTab.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt index 18c298c86d..c58fea0b87 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt @@ -38,11 +38,11 @@ import org.thoughtcrime.securesms.conversationlist.RestoreCompleteBottomSheetDia import org.thoughtcrime.securesms.devicetransfer.olddevice.OldDeviceExitActivity import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.main.MainActivityListHostFragment +import org.thoughtcrime.securesms.main.MainNavigationDestination import org.thoughtcrime.securesms.main.MainNavigationDetailLocation import org.thoughtcrime.securesms.net.DeviceTransferBlockingInterceptor import org.thoughtcrime.securesms.notifications.VitalsViewModel import org.thoughtcrime.securesms.stories.Stories -import org.thoughtcrime.securesms.stories.tabs.ConversationListTab import org.thoughtcrime.securesms.stories.tabs.ConversationListTabRepository import org.thoughtcrime.securesms.stories.tabs.ConversationListTabsFragment import org.thoughtcrime.securesms.stories.tabs.ConversationListTabsViewModel @@ -68,7 +68,7 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner } @JvmStatic - fun clearTopAndOpenTab(context: Context, startingTab: ConversationListTab): Intent { + fun clearTopAndOpenTab(context: Context, startingTab: MainNavigationDestination): Intent { return clearTop(context).putExtra(KEY_STARTING_TAB, startingTab) } } @@ -83,8 +83,8 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner get() = mediaController private val conversationListTabsViewModel: ConversationListTabsViewModel by viewModel { - val startingTab = intent.extras?.getSerializableCompat(KEY_STARTING_TAB, ConversationListTab::class.java) - ConversationListTabsViewModel(startingTab ?: ConversationListTab.CHATS, ConversationListTabRepository()) + val startingTab = intent.extras?.getSerializableCompat(KEY_STARTING_TAB, MainNavigationDestination::class.java) + ConversationListTabsViewModel(startingTab ?: MainNavigationDestination.CHATS, ConversationListTabRepository()) } private val vitalsViewModel: VitalsViewModel by viewModel { @@ -165,12 +165,12 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner handleDeepLinkIntent(intent) val extras = intent.extras ?: return - val startingTab = extras.getSerializableCompat(KEY_STARTING_TAB, ConversationListTab::class.java) + val startingTab = extras.getSerializableCompat(KEY_STARTING_TAB, MainNavigationDestination::class.java) when (startingTab) { - ConversationListTab.CHATS -> conversationListTabsViewModel.onChatsSelected() - ConversationListTab.CALLS -> conversationListTabsViewModel.onCallsSelected() - ConversationListTab.STORIES -> { + MainNavigationDestination.CHATS -> conversationListTabsViewModel.onChatsSelected() + MainNavigationDestination.CALLS -> conversationListTabsViewModel.onCallsSelected() + MainNavigationDestination.STORIES -> { if (Stories.isFeatureEnabled()) { conversationListTabsViewModel.onStoriesSelected() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt index 166c0ed677..7cb77638ff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt @@ -50,11 +50,11 @@ import org.thoughtcrime.securesms.conversationlist.chatfilter.FilterLerp import org.thoughtcrime.securesms.conversationlist.chatfilter.FilterPullState import org.thoughtcrime.securesms.databinding.CallLogFragmentBinding import org.thoughtcrime.securesms.dependencies.AppDependencies +import org.thoughtcrime.securesms.main.MainNavigationDestination import org.thoughtcrime.securesms.main.MainToolbarMode import org.thoughtcrime.securesms.main.MainToolbarViewModel import org.thoughtcrime.securesms.main.Material3OnScrollHelperBinder import org.thoughtcrime.securesms.recipients.Recipient -import org.thoughtcrime.securesms.stories.tabs.ConversationListTab import org.thoughtcrime.securesms.stories.tabs.ConversationListTabsViewModel import org.thoughtcrime.securesms.util.CommunicationActions import org.thoughtcrime.securesms.util.ViewUtil @@ -226,7 +226,7 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal private fun initializeTapToScrollToTop(scrollToPositionDelegate: ScrollToPositionDelegate) { disposables += tabsViewModel.tabClickEvents - .filter { it == ConversationListTab.CALLS } + .filter { it == MainNavigationDestination.CALLS } .subscribeBy(onNext = { scrollToPositionDelegate.resetScrollPosition() }) 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 5fde5f9c9f..0b9d217d1b 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 @@ -254,6 +254,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.linkpreview.LinkPreview import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModelV2 import org.thoughtcrime.securesms.longmessage.LongMessageFragment +import org.thoughtcrime.securesms.main.MainNavigationDestination import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory import org.thoughtcrime.securesms.mediapreview.MediaPreviewV2Activity @@ -300,7 +301,6 @@ import org.thoughtcrime.securesms.stickers.StickerManagementActivity import org.thoughtcrime.securesms.stickers.StickerPackInstallEvent import org.thoughtcrime.securesms.stickers.StickerPackPreviewActivity import org.thoughtcrime.securesms.stories.StoryViewerArgs -import org.thoughtcrime.securesms.stories.tabs.ConversationListTab import org.thoughtcrime.securesms.stories.viewer.StoryViewerActivity import org.thoughtcrime.securesms.util.BottomSheetUtil import org.thoughtcrime.securesms.util.BubbleUtil @@ -3031,7 +3031,7 @@ class ConversationFragment : } else if ("username_edit" == action) { startActivity(EditProfileActivity.getIntentForUsernameEdit(requireContext())) } else if ("calls_tab" == action) { - startActivity(MainActivity.clearTopAndOpenTab(requireContext(), ConversationListTab.CALLS)) + startActivity(MainActivity.clearTopAndOpenTab(requireContext(), MainNavigationDestination.CALLS)) } else if ("chat_folder" == action) { startActivity(AppSettingsActivity.chatFolders(requireContext())) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index d905b861a0..dd1727c6ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -143,6 +143,7 @@ import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob; import org.thoughtcrime.securesms.keyvalue.AccountValues; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.lock.v2.CreateSvrPinActivity; +import org.thoughtcrime.securesms.main.MainNavigationDestination; import org.thoughtcrime.securesms.main.MainToolbarMode; import org.thoughtcrime.securesms.main.MainToolbarViewModel; import org.thoughtcrime.securesms.main.Material3OnScrollHelperBinder; @@ -161,7 +162,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.search.MessageResult; import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.storage.StorageSyncHelper; -import org.thoughtcrime.securesms.stories.tabs.ConversationListTab; import org.thoughtcrime.securesms.stories.tabs.ConversationListTabsViewModel; import org.thoughtcrime.securesms.util.AppForegroundObserver; import org.thoughtcrime.securesms.util.AppStartup; @@ -446,7 +446,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode conversationListTabsViewModel = new ViewModelProvider(requireActivity()).get(ConversationListTabsViewModel.class); lifecycleDisposable.bindTo(getViewLifecycleOwner()); - lifecycleDisposable.add(conversationListTabsViewModel.getTabClickEvents().filter(tab -> tab == ConversationListTab.CHATS) + lifecycleDisposable.add(conversationListTabsViewModel.getTabClickEvents().filter(tab -> tab == MainNavigationDestination.CHATS) .subscribe(unused -> { LinearLayoutManager layoutManager = (LinearLayoutManager) list.getLayoutManager(); int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt index 74c6f0ec5d..e52db78d72 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt @@ -38,7 +38,6 @@ import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile import org.thoughtcrime.securesms.notifications.profiles.NotificationProfiles import org.thoughtcrime.securesms.service.KeyCachingService import org.thoughtcrime.securesms.stories.settings.StorySettingsActivity -import org.thoughtcrime.securesms.stories.tabs.ConversationListTab import org.thoughtcrime.securesms.stories.tabs.ConversationListTabsState import org.thoughtcrime.securesms.stories.tabs.ConversationListTabsViewModel import org.thoughtcrime.securesms.util.BottomSheetUtil @@ -190,7 +189,7 @@ class MainActivityListHostFragment : Fragment(R.layout.main_activity_list_host_f } private fun goToStateFromConversationList(state: ConversationListTabsState, navController: NavController) { - if (state.tab == ConversationListTab.CHATS) { + if (state.tab == MainNavigationDestination.CHATS) { return } else { val cameraFab = requireView().findViewById(R.id.camera_fab) @@ -210,7 +209,7 @@ class MainActivityListHostFragment : Fragment(R.layout.main_activity_list_host_f else -> null } - val destination = if (state.tab == ConversationListTab.STORIES) { + val destination = if (state.tab == MainNavigationDestination.STORIES) { R.id.action_conversationListFragment_to_storiesLandingFragment } else { R.id.action_conversationListFragment_to_callLogFragment @@ -227,17 +226,17 @@ class MainActivityListHostFragment : Fragment(R.layout.main_activity_list_host_f private fun goToStateFromCalling(state: ConversationListTabsState, navController: NavController) { when (state.tab) { - ConversationListTab.CALLS -> return - ConversationListTab.CHATS -> navController.popBackStack(R.id.conversationListFragment, false) - ConversationListTab.STORIES -> navController.navigate(R.id.action_callLogFragment_to_storiesLandingFragment) + MainNavigationDestination.CALLS -> return + MainNavigationDestination.CHATS -> navController.popBackStack(R.id.conversationListFragment, false) + MainNavigationDestination.STORIES -> navController.navigate(R.id.action_callLogFragment_to_storiesLandingFragment) } } private fun goToStateFromStories(state: ConversationListTabsState, navController: NavController) { when (state.tab) { - ConversationListTab.STORIES -> return - ConversationListTab.CHATS -> navController.popBackStack(R.id.conversationListFragment, false) - ConversationListTab.CALLS -> navController.navigate(R.id.action_storiesLandingFragment_to_callLogFragment) + MainNavigationDestination.STORIES -> return + MainNavigationDestination.CHATS -> navController.popBackStack(R.id.conversationListFragment, false) + MainNavigationDestination.CALLS -> navController.navigate(R.id.action_storiesLandingFragment_to_callLogFragment) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt index 739e767cf7..e9e362ffeb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt @@ -39,6 +39,7 @@ import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectFor import org.thoughtcrime.securesms.database.model.MmsMessageRecord import org.thoughtcrime.securesms.database.model.StoryViewState import org.thoughtcrime.securesms.dependencies.AppDependencies +import org.thoughtcrime.securesms.main.MainNavigationDestination import org.thoughtcrime.securesms.main.MainToolbarMode import org.thoughtcrime.securesms.main.MainToolbarViewModel import org.thoughtcrime.securesms.main.Material3OnScrollHelperBinder @@ -51,7 +52,6 @@ import org.thoughtcrime.securesms.stories.StoryViewerArgs import org.thoughtcrime.securesms.stories.dialogs.StoryContextMenu import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs import org.thoughtcrime.securesms.stories.my.MyStoriesActivity -import org.thoughtcrime.securesms.stories.tabs.ConversationListTab import org.thoughtcrime.securesms.stories.tabs.ConversationListTabsViewModel import org.thoughtcrime.securesms.stories.viewer.StoryViewerActivity import org.thoughtcrime.securesms.util.ViewUtil @@ -213,7 +213,7 @@ class StoriesLandingFragment : DSLSettingsFragment(layoutId = R.layout.stories_l ) lifecycleDisposable += tabsViewModel.tabClickEvents - .filter { it == ConversationListTab.STORIES } + .filter { it == MainNavigationDestination.STORIES } .subscribeBy(onNext = { val layoutManager = recyclerView?.layoutManager as? LinearLayoutManager ?: return@subscribeBy if (layoutManager.findFirstVisibleItemPosition() <= LIST_SMOOTH_SCROLL_TO_TOP_THRESHOLD) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTab.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTab.kt deleted file mode 100644 index 41e5cf5df9..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTab.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.thoughtcrime.securesms.stories.tabs - -enum class ConversationListTab { - CHATS, - CALLS, - STORIES -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsFragment.kt index 09b7bd0613..b7f4790f55 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsFragment.kt @@ -31,9 +31,9 @@ class ConversationListTabsFragment : ComposeFragment() { storiesCount = state.unreadStoriesCount.toInt(), storyFailure = state.hasFailedStory, selectedDestination = when (state.tab) { - ConversationListTab.CHATS -> MainNavigationDestination.CHATS - ConversationListTab.CALLS -> MainNavigationDestination.CALLS - ConversationListTab.STORIES -> MainNavigationDestination.STORIES + MainNavigationDestination.CHATS -> MainNavigationDestination.CHATS + MainNavigationDestination.CALLS -> MainNavigationDestination.CALLS + MainNavigationDestination.STORIES -> MainNavigationDestination.STORIES }, compact = state.compact ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsState.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsState.kt index 54da5d8fbf..e2e75a4a9f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsState.kt @@ -1,10 +1,11 @@ package org.thoughtcrime.securesms.stories.tabs import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.main.MainNavigationDestination data class ConversationListTabsState( - val tab: ConversationListTab = ConversationListTab.CHATS, - val prevTab: ConversationListTab = if (tab == ConversationListTab.CHATS) ConversationListTab.STORIES else ConversationListTab.CHATS, + val tab: MainNavigationDestination = MainNavigationDestination.CHATS, + val prevTab: MainNavigationDestination = if (tab == MainNavigationDestination.CHATS) MainNavigationDestination.STORIES else MainNavigationDestination.CHATS, val unreadMessagesCount: Long = 0L, val unreadCallsCount: Long = 0L, val unreadStoriesCount: Long = 0L, diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsViewModel.kt index e2dbbc3002..0f6af650bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabsViewModel.kt @@ -12,11 +12,12 @@ import io.reactivex.rxjava3.subjects.PublishSubject import io.reactivex.rxjava3.subjects.Subject import org.thoughtcrime.securesms.components.settings.app.notifications.profiles.NotificationProfilesRepository import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.main.MainNavigationDestination import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile import org.thoughtcrime.securesms.stories.Stories import org.thoughtcrime.securesms.util.rx.RxStore -class ConversationListTabsViewModel(startingTab: ConversationListTab, repository: ConversationListTabRepository) : ViewModel() { +class ConversationListTabsViewModel(startingTab: MainNavigationDestination, repository: ConversationListTabRepository) : ViewModel() { private val notificationProfilesRepository: NotificationProfilesRepository = NotificationProfilesRepository() @@ -28,8 +29,8 @@ class ConversationListTabsViewModel(startingTab: ConversationListTab, repository val state: Flowable = store.stateFlowable.distinctUntilChanged().observeOn(AndroidSchedulers.mainThread()) val disposables = CompositeDisposable() - private val internalTabClickEvents: Subject = PublishSubject.create() - val tabClickEvents: Observable = internalTabClickEvents.filter { Stories.isFeatureEnabled() } + private val internalTabClickEvents: Subject = PublishSubject.create() + val tabClickEvents: Observable = internalTabClickEvents.filter { Stories.isFeatureEnabled() } init { disposables += performStoreUpdate(repository.getNumberOfUnreadMessages()) { unreadChats, state -> @@ -63,18 +64,18 @@ class ConversationListTabsViewModel(startingTab: ConversationListTab, repository } fun onChatsSelected() { - internalTabClickEvents.onNext(ConversationListTab.CHATS) - performStoreUpdate { it.copy(tab = ConversationListTab.CHATS) } + internalTabClickEvents.onNext(MainNavigationDestination.CHATS) + performStoreUpdate { it.copy(tab = MainNavigationDestination.CHATS) } } fun onCallsSelected() { - internalTabClickEvents.onNext(ConversationListTab.CALLS) - performStoreUpdate { it.copy(tab = ConversationListTab.CALLS) } + internalTabClickEvents.onNext(MainNavigationDestination.CALLS) + performStoreUpdate { it.copy(tab = MainNavigationDestination.CALLS) } } fun onStoriesSelected() { - internalTabClickEvents.onNext(ConversationListTab.STORIES) - performStoreUpdate { it.copy(tab = ConversationListTab.STORIES) } + internalTabClickEvents.onNext(MainNavigationDestination.STORIES) + performStoreUpdate { it.copy(tab = MainNavigationDestination.STORIES) } } fun onSearchOpened() { @@ -113,10 +114,10 @@ class ConversationListTabsViewModel(startingTab: ConversationListTab, repository } } - class Factory(private val startingTab: ConversationListTab?, private val repository: ConversationListTabRepository) : ViewModelProvider.Factory { + class Factory(private val startingTab: MainNavigationDestination?, private val repository: ConversationListTabRepository) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { - val tab = if (startingTab == null || (startingTab == ConversationListTab.STORIES && !Stories.isFeatureEnabled())) { - ConversationListTab.CHATS + val tab = if (startingTab == null || (startingTab == MainNavigationDestination.STORIES && !Stories.isFeatureEnabled())) { + MainNavigationDestination.CHATS } else { startingTab }