Fix various issues in main activity display.

This commit is contained in:
Alex Hart
2025-09-12 10:12:01 -03:00
committed by Greyson Parrelli
parent 897461b594
commit bf3135b2d0
3 changed files with 24 additions and 11 deletions

View File

@@ -38,6 +38,7 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
import androidx.compose.material3.adaptive.layout.PaneExpansionAnchor
import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole
import androidx.compose.material3.adaptive.layout.rememberPaneExpansionState
import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator
import androidx.compose.runtime.Composable
@@ -46,6 +47,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.key
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
@@ -345,11 +347,17 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner
val mutableInteractionSource = remember { MutableInteractionSource() }
LaunchedEffect(mainNavigationDetailLocation) {
if (paneExpansionState.currentAnchor == listOnlyAnchor) {
if (paneExpansionState.currentAnchor == listOnlyAnchor && wrappedNavigator.currentDestination?.pane == ThreePaneScaffoldRole.Primary) {
paneExpansionState.animateTo(detailOnlyAnchor)
}
}
LaunchedEffect(mainNavigationState.currentListLocation) {
if (paneExpansionState.currentAnchor == detailOnlyAnchor && wrappedNavigator.currentDestination?.pane == ThreePaneScaffoldRole.Secondary) {
paneExpansionState.animateTo(listOnlyAnchor)
}
}
AppScaffold(
navigator = wrappedNavigator,
paneExpansionState = paneExpansionState,

View File

@@ -20,9 +20,9 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.SignalPreview
import org.signal.core.ui.compose.Snackbars
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.megaphone.Megaphone
@@ -93,7 +93,9 @@ fun MainBottomChrome(
callback = callback
)
}
}
if (state.mainToolbarMode == MainToolbarMode.FULL) {
MainMegaphoneContainer(
state = state.megaphoneState,
controller = megaphoneActionController,
@@ -101,7 +103,6 @@ fun MainBottomChrome(
)
}
val windowSizeClass = WindowSizeClass.rememberWindowSizeClass()
val snackBarModifier = if (windowSizeClass.isCompact() && state.mainToolbarMode == MainToolbarMode.BASIC) {
Modifier.navigationBarsPadding()
} else {
@@ -151,7 +152,12 @@ private fun MainSnackbar(
}
}
@SignalPreview
@Preview(device = "spec:width=360dp,height=640dp,orientation=portrait")
@Preview(device = "spec:width=640dp,height=360dp,orientation=landscape")
@Preview(device = "spec:width=600dp,height=1024dp,orientation=portrait")
@Preview(device = "spec:width=1024dp,height=600dp,orientation=landscape")
@Preview(device = "spec:width=840dp,height=1280dp,orientation=portrait")
@Preview(device = "spec:width=1280dp,height=840dp,orientation=landscape")
@Composable
fun MainBottomChromePreview() {
Previews.Preview {

View File

@@ -7,12 +7,10 @@ package org.thoughtcrime.securesms.main
import android.app.Activity
import android.content.Intent
import android.content.res.Configuration
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalConfiguration
import androidx.fragment.app.DialogFragment
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.SignalPreview
@@ -20,6 +18,7 @@ import org.thoughtcrime.securesms.megaphone.Megaphone
import org.thoughtcrime.securesms.megaphone.MegaphoneActionController
import org.thoughtcrime.securesms.megaphone.MegaphoneComponent
import org.thoughtcrime.securesms.megaphone.Megaphones
import org.thoughtcrime.securesms.window.WindowSizeClass
data class MainMegaphoneState(
val megaphone: Megaphone = Megaphone.NONE,
@@ -45,9 +44,9 @@ fun MainMegaphoneContainer(
controller: MegaphoneActionController,
onMegaphoneVisible: (Megaphone) -> Unit
) {
val isLandscape = LocalConfiguration.current.orientation == Configuration.ORIENTATION_LANDSCAPE
val visible = remember(isLandscape, state) {
!(state.megaphone == Megaphone.NONE || state.mainToolbarMode != MainToolbarMode.FULL || isLandscape)
val windowSizeClass = WindowSizeClass.rememberWindowSizeClass()
val visible = remember(windowSizeClass, state) {
!(state.megaphone == Megaphone.NONE || state.mainToolbarMode != MainToolbarMode.FULL || windowSizeClass == WindowSizeClass.COMPACT_LANDSCAPE)
}
AnimatedVisibility(visible = visible) {
@@ -57,8 +56,8 @@ fun MainMegaphoneContainer(
)
}
LaunchedEffect(state, isLandscape) {
if (state.megaphone == Megaphone.NONE || state.mainToolbarMode == MainToolbarMode.BASIC || isLandscape) {
LaunchedEffect(state, windowSizeClass) {
if (state.megaphone == Megaphone.NONE || state.mainToolbarMode == MainToolbarMode.BASIC || windowSizeClass == WindowSizeClass.COMPACT_LANDSCAPE) {
return@LaunchedEffect
}