mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 20:48:43 +00:00
Sync toolbar state in tabs fragment.
This commit is contained in:
@@ -382,9 +382,7 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onSearchClick() {
|
override fun onSearchClick() {
|
||||||
conversationListTabsViewModel.onSearchOpened()
|
|
||||||
toolbarViewModel.setToolbarMode(MainToolbarMode.SEARCH)
|
toolbarViewModel.setToolbarMode(MainToolbarMode.SEARCH)
|
||||||
toolbarViewModel.emitEvent(MainToolbarViewModel.Event.Search.Open)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClearCallHistoryClick() {
|
override fun onClearCallHistoryClick() {
|
||||||
@@ -404,9 +402,7 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onCloseSearchClick() {
|
override fun onCloseSearchClick() {
|
||||||
conversationListTabsViewModel.onSearchClosed()
|
|
||||||
toolbarViewModel.setToolbarMode(MainToolbarMode.FULL)
|
toolbarViewModel.setToolbarMode(MainToolbarMode.FULL)
|
||||||
toolbarViewModel.emitEvent(MainToolbarViewModel.Event.Search.Close)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCloseArchiveClick() {
|
override fun onCloseArchiveClick() {
|
||||||
|
|||||||
@@ -416,7 +416,6 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal
|
|||||||
private fun closeSearchIfOpen(): Boolean {
|
private fun closeSearchIfOpen(): Boolean {
|
||||||
if (isSearchOpen()) {
|
if (isSearchOpen()) {
|
||||||
mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL)
|
mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL)
|
||||||
tabsViewModel.onSearchClosed()
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -663,7 +663,6 @@ public class ConversationListFragment extends MainFragment implements ActionMode
|
|||||||
setAdapter(defaultAdapter);
|
setAdapter(defaultAdapter);
|
||||||
fadeInButtonsAndMegaphone(250);
|
fadeInButtonsAndMegaphone(250);
|
||||||
mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL);
|
mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL);
|
||||||
conversationListTabsViewModel.onSearchClosed();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,9 +64,13 @@ class MainToolbarViewModel : ViewModel() {
|
|||||||
|
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun setToolbarMode(mode: MainToolbarMode, destination: MainNavigationDestination? = null) {
|
fun setToolbarMode(mode: MainToolbarMode, destination: MainNavigationDestination? = null) {
|
||||||
|
val previousMode = internalStateFlow.value.mode
|
||||||
|
|
||||||
internalStateFlow.update {
|
internalStateFlow.update {
|
||||||
it.copy(mode = mode, destination = destination ?: it.destination, searchQuery = "")
|
it.copy(mode = mode, destination = destination ?: it.destination, searchQuery = "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emitPossibleSearchStateChangeEvent(previousMode, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setProxyState(proxyState: MainToolbarState.ProxyState) {
|
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 Event {
|
||||||
sealed interface Search : Event {
|
sealed interface Search : Event {
|
||||||
data object Open : Search
|
data object Open : Search
|
||||||
|
|||||||
@@ -415,7 +415,6 @@ class StoriesLandingFragment : DSLSettingsFragment(layoutId = R.layout.stories_l
|
|||||||
private fun closeSearchIfOpen(): Boolean {
|
private fun closeSearchIfOpen(): Boolean {
|
||||||
if (isSearchOpen()) {
|
if (isSearchOpen()) {
|
||||||
mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL)
|
mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL)
|
||||||
tabsViewModel.onSearchClosed()
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -1,15 +1,26 @@
|
|||||||
package org.thoughtcrime.securesms.stories.tabs
|
package org.thoughtcrime.securesms.stories.tabs
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rxjava3.subscribeAsState
|
import androidx.compose.runtime.rxjava3.subscribeAsState
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.fragment.app.viewModels
|
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.compose.ComposeFragment
|
||||||
import org.thoughtcrime.securesms.main.MainNavigationBar
|
import org.thoughtcrime.securesms.main.MainNavigationBar
|
||||||
import org.thoughtcrime.securesms.main.MainNavigationDestination
|
import org.thoughtcrime.securesms.main.MainNavigationDestination
|
||||||
import org.thoughtcrime.securesms.main.MainNavigationRail
|
import org.thoughtcrime.securesms.main.MainNavigationRail
|
||||||
import org.thoughtcrime.securesms.main.MainNavigationState
|
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.Navigation
|
||||||
import org.thoughtcrime.securesms.window.WindowSizeClass
|
import org.thoughtcrime.securesms.window.WindowSizeClass
|
||||||
|
|
||||||
@@ -19,6 +30,38 @@ import org.thoughtcrime.securesms.window.WindowSizeClass
|
|||||||
class ConversationListTabsFragment : ComposeFragment() {
|
class ConversationListTabsFragment : ComposeFragment() {
|
||||||
|
|
||||||
private val viewModel: ConversationListTabsViewModel by viewModels(ownerProducer = { requireActivity() })
|
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
|
@Composable
|
||||||
override fun FragmentContent() {
|
override fun FragmentContent() {
|
||||||
|
|||||||
Reference in New Issue
Block a user