Removes the dependency on windowSizeClass and displayFeatures to be passed in the global settings of the app (which is activity independenty)

This commit is contained in:
Vitor Pamplona
2025-09-11 11:16:26 -04:00
parent bf88e376de
commit 404d0ab40e
2 changed files with 17 additions and 5 deletions

View File

@@ -20,26 +20,32 @@
*/ */
package com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms package com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import com.vitorpamplona.amethyst.ui.components.getActivity
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.singlepane.MessagesSinglePane import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.singlepane.MessagesSinglePane
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.twopane.MessagesTwoPane import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.twopane.MessagesTwoPane
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
@Composable @Composable
fun MessagesScreen( fun MessagesScreen(
accountViewModel: AccountViewModel, accountViewModel: AccountViewModel,
nav: INav, nav: INav,
) { ) {
val windowSizeClass by accountViewModel.settings.windowSizeClass val act = LocalContext.current.getActivity()
val windowSizeClass = calculateWindowSizeClass(act)
val twoPane by remember { val twoPane by remember {
derivedStateOf { derivedStateOf {
when (windowSizeClass?.widthSizeClass) { when (windowSizeClass.widthSizeClass) {
WindowWidthSizeClass.Compact -> false WindowWidthSizeClass.Compact -> false
WindowWidthSizeClass.Expanded, WindowWidthSizeClass.Expanded,
WindowWidthSizeClass.Medium, WindowWidthSizeClass.Medium,
@@ -49,11 +55,11 @@ fun MessagesScreen(
} }
} }
if (twoPane && windowSizeClass != null) { if (twoPane) {
MessagesTwoPane( MessagesTwoPane(
knownFeedContentState = accountViewModel.feedStates.dmKnown, knownFeedContentState = accountViewModel.feedStates.dmKnown,
newFeedContentState = accountViewModel.feedStates.dmNew, newFeedContentState = accountViewModel.feedStates.dmNew,
widthSizeClass = windowSizeClass!!.widthSizeClass, widthSizeClass = windowSizeClass.widthSizeClass,
accountViewModel = accountViewModel, accountViewModel = accountViewModel,
nav = nav, nav = nav,
) )

View File

@@ -31,9 +31,12 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import com.google.accompanist.adaptive.FoldAwareConfiguration import com.google.accompanist.adaptive.FoldAwareConfiguration
import com.google.accompanist.adaptive.HorizontalTwoPaneStrategy import com.google.accompanist.adaptive.HorizontalTwoPaneStrategy
import com.google.accompanist.adaptive.TwoPane import com.google.accompanist.adaptive.TwoPane
import com.google.accompanist.adaptive.calculateDisplayFeatures
import com.vitorpamplona.amethyst.ui.components.getActivity
import com.vitorpamplona.amethyst.ui.feeds.FeedContentState import com.vitorpamplona.amethyst.ui.feeds.FeedContentState
import com.vitorpamplona.amethyst.ui.layouts.DisappearingScaffold import com.vitorpamplona.amethyst.ui.layouts.DisappearingScaffold
import com.vitorpamplona.amethyst.ui.navigation.bottombars.AppBottomBar import com.vitorpamplona.amethyst.ui.navigation.bottombars.AppBottomBar
@@ -68,6 +71,9 @@ fun MessagesTwoPane(
} }
} }
val act = LocalContext.current.getActivity()
val displayFeatures = calculateDisplayFeatures(act)
DisappearingScaffold( DisappearingScaffold(
isInvertedLayout = false, isInvertedLayout = false,
topBar = { topBar = {
@@ -126,7 +132,7 @@ fun MessagesTwoPane(
} }
}, },
strategy = strategy, strategy = strategy,
displayFeatures = accountViewModel.settings.displayFeatures.value, displayFeatures = displayFeatures,
foldAwareConfiguration = FoldAwareConfiguration.VerticalFoldsOnly, foldAwareConfiguration = FoldAwareConfiguration.VerticalFoldsOnly,
modifier = Modifier.padding(padding).consumeWindowInsets(padding).fillMaxSize(), modifier = Modifier.padding(padding).consumeWindowInsets(padding).fillMaxSize(),
) )