Sync toolbar state in tabs fragment.

This commit is contained in:
Alex Hart 2025-04-09 15:20:58 -03:00 committed by GitHub
parent fa7d19e474
commit 4d6c620f51
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 55 additions and 7 deletions

View file

@ -382,9 +382,7 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner
}
override fun onSearchClick() {
conversationListTabsViewModel.onSearchOpened()
toolbarViewModel.setToolbarMode(MainToolbarMode.SEARCH)
toolbarViewModel.emitEvent(MainToolbarViewModel.Event.Search.Open)
}
override fun onClearCallHistoryClick() {
@ -404,9 +402,7 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner
}
override fun onCloseSearchClick() {
conversationListTabsViewModel.onSearchClosed()
toolbarViewModel.setToolbarMode(MainToolbarMode.FULL)
toolbarViewModel.emitEvent(MainToolbarViewModel.Event.Search.Close)
}
override fun onCloseArchiveClick() {

View file

@ -416,7 +416,6 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal
private fun closeSearchIfOpen(): Boolean {
if (isSearchOpen()) {
mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL)
tabsViewModel.onSearchClosed()
return true
}
return false

View file

@ -663,7 +663,6 @@ public class ConversationListFragment extends MainFragment implements ActionMode
setAdapter(defaultAdapter);
fadeInButtonsAndMegaphone(250);
mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL);
conversationListTabsViewModel.onSearchClosed();
return true;
}

View file

@ -64,9 +64,13 @@ class MainToolbarViewModel : ViewModel() {
@JvmOverloads
fun setToolbarMode(mode: MainToolbarMode, destination: MainNavigationDestination? = null) {
val previousMode = internalStateFlow.value.mode
internalStateFlow.update {
it.copy(mode = mode, destination = destination ?: it.destination, searchQuery = "")
}
emitPossibleSearchStateChangeEvent(previousMode, mode)
}
fun setProxyState(proxyState: MainToolbarState.ProxyState) {
@ -147,6 +151,14 @@ class MainToolbarViewModel : ViewModel() {
}
}
private fun emitPossibleSearchStateChangeEvent(previousMode: MainToolbarMode, mode: MainToolbarMode) {
if (previousMode == MainToolbarMode.SEARCH && mode != MainToolbarMode.SEARCH) {
emitEvent(Event.Search.Close)
} else if (mode == MainToolbarMode.SEARCH && previousMode != MainToolbarMode.SEARCH) {
emitEvent(Event.Search.Open)
}
}
sealed interface Event {
sealed interface Search : Event {
data object Open : Search

View file

@ -415,7 +415,6 @@ class StoriesLandingFragment : DSLSettingsFragment(layoutId = R.layout.stories_l
private fun closeSearchIfOpen(): Boolean {
if (isSearchOpen()) {
mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL)
tabsViewModel.onSearchClosed()
return true
}
return false

View file

@ -1,15 +1,26 @@
package org.thoughtcrime.securesms.stories.tabs
import android.os.Bundle
import android.view.View
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rxjava3.subscribeAsState
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.main.MainNavigationBar
import org.thoughtcrime.securesms.main.MainNavigationDestination
import org.thoughtcrime.securesms.main.MainNavigationRail
import org.thoughtcrime.securesms.main.MainNavigationState
import org.thoughtcrime.securesms.main.MainToolbarMode
import org.thoughtcrime.securesms.main.MainToolbarViewModel
import org.thoughtcrime.securesms.window.Navigation
import org.thoughtcrime.securesms.window.WindowSizeClass
@ -19,6 +30,38 @@ import org.thoughtcrime.securesms.window.WindowSizeClass
class ConversationListTabsFragment : ComposeFragment() {
private val viewModel: ConversationListTabsViewModel by viewModels(ownerProducer = { requireActivity() })
private val mainToolbarViewModel: MainToolbarViewModel by activityViewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.RESUMED) {
mainToolbarViewModel.state.map { it.mode }.collectLatest {
when (it) {
MainToolbarMode.ACTION_MODE -> {
viewModel.onMultiSelectStarted()
viewModel.onSearchClosed()
}
MainToolbarMode.FULL -> {
viewModel.onMultiSelectFinished()
viewModel.onSearchClosed()
viewModel.isShowingArchived(false)
}
MainToolbarMode.BASIC -> {
viewModel.onMultiSelectFinished()
viewModel.onSearchClosed()
viewModel.isShowingArchived(true)
}
MainToolbarMode.SEARCH -> {
viewModel.onMultiSelectFinished()
viewModel.onSearchOpened()
}
}
}
}
}
}
@Composable
override fun FragmentContent() {