mirror of
https://github.com/mollyim/mollyim-android.git
synced 2025-05-12 21:30:39 +01:00
Sync toolbar state in tabs fragment.
This commit is contained in:
parent
fa7d19e474
commit
4d6c620f51
6 changed files with 55 additions and 7 deletions
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -663,7 +663,6 @@ public class ConversationListFragment extends MainFragment implements ActionMode
|
|||
setAdapter(defaultAdapter);
|
||||
fadeInButtonsAndMegaphone(250);
|
||||
mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL);
|
||||
conversationListTabsViewModel.onSearchClosed();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in a new issue