Remove custom WindowSizeClass and just depend on Material Adaptive WindowSizeClass.

Co-authored-by: jeffrey-signal <jeffrey@signal.org>
This commit is contained in:
Alex Hart
2025-10-31 12:50:33 -03:00
committed by jeffrey-signal
parent 95c9776b4d
commit 109f651681
32 changed files with 202 additions and 246 deletions

View File

@@ -19,8 +19,9 @@ import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.util.ThemeUtil
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.WindowUtil
import org.thoughtcrime.securesms.window.WindowSizeClass
import org.thoughtcrime.securesms.window.WindowSizeClass.Companion.getWindowSizeClass
import org.thoughtcrime.securesms.window.getWindowSizeClass
import org.thoughtcrime.securesms.window.isLargeScreenSupportEnabled
import org.thoughtcrime.securesms.window.isSplitPane
import com.google.android.material.R as MaterialR
/**
@@ -32,7 +33,7 @@ abstract class FixedRoundedCornerBottomSheetDialogFragment : BottomSheetDialogFr
* Sheet corner radius in DP
*/
protected val cornerRadius: Int by lazy {
if (WindowSizeClass.isLargeScreenSupportEnabled() && resources.getWindowSizeClass().isSplitPane()) {
if (isLargeScreenSupportEnabled() && resources.getWindowSizeClass().isSplitPane()) {
32
} else {
18

View File

@@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.components
import android.content.Context
import android.content.res.Configuration
import android.util.AttributeSet
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
@@ -15,7 +16,6 @@ import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.main.VerticalInsets
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.window.WindowSizeClass.Companion.getWindowSizeClass
import kotlin.math.roundToInt
/**
@@ -241,7 +241,7 @@ open class InsetAwareConstraintLayout @JvmOverloads constructor(
}
private fun isLandscape(): Boolean {
return resources.getWindowSizeClass().isLandscape()
return resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
}
private val Guideline?.guidelineEnd: Int

View File

@@ -8,10 +8,12 @@ package org.thoughtcrime.securesms.components.compose
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import org.thoughtcrime.securesms.window.WindowSizeClass
import androidx.window.core.layout.WindowWidthSizeClass
import org.thoughtcrime.securesms.window.isAtLeast
/**
* Displays the screen title for split-pane UIs on tablets and foldable devices.
@@ -21,7 +23,7 @@ fun ScreenTitlePane(
title: String,
modifier: Modifier = Modifier
) {
val windowSizeClass = WindowSizeClass.rememberWindowSizeClass()
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
Text(
text = title,
@@ -29,7 +31,7 @@ fun ScreenTitlePane(
color = MaterialTheme.colorScheme.onSurface,
modifier = modifier
.padding(
start = if (windowSizeClass.isExtended()) 80.dp else 20.dp,
start = if (windowSizeClass.windowWidthSizeClass.isAtLeast(WindowWidthSizeClass.EXPANDED)) 80.dp else 20.dp,
end = 20.dp,
bottom = 12.dp
)

View File

@@ -185,11 +185,11 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter
switchPref(
isEnabled = state.largeScreenUi,
title = DSLSettingsText.from("Force split pane UI on landscape phones."),
title = DSLSettingsText.from("Force split pane UI on phones."),
summary = DSLSettingsText.from("This setting requires split pane UI to be enabled."),
isChecked = state.forceSplitPaneOnCompactLandscape,
isChecked = state.forceSplitPane,
onClick = {
viewModel.setForceSplitPaneOnCompactLandscape(!state.forceSplitPaneOnCompactLandscape)
viewModel.setForceSplitPane(!state.forceSplitPane)
}
)

View File

@@ -32,5 +32,5 @@ data class InternalSettingsState(
val hevcEncoding: Boolean,
val newCallingUi: Boolean,
val largeScreenUi: Boolean,
val forceSplitPaneOnCompactLandscape: Boolean
val forceSplitPane: Boolean
)

View File

@@ -198,7 +198,7 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito
hevcEncoding = SignalStore.internal.hevcEncoding,
newCallingUi = SignalStore.internal.newCallingUi,
largeScreenUi = SignalStore.internal.largeScreenUi,
forceSplitPaneOnCompactLandscape = SignalStore.internal.forceSplitPaneOnCompactLandscape
forceSplitPane = SignalStore.internal.forceSplitPane
)
fun onClearOnboardingState() {
@@ -219,8 +219,8 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito
refresh()
}
fun setForceSplitPaneOnCompactLandscape(forceSplitPaneOnCompactLandscape: Boolean) {
SignalStore.internal.forceSplitPaneOnCompactLandscape = forceSplitPaneOnCompactLandscape
fun setForceSplitPane(forceSplitPane: Boolean) {
SignalStore.internal.forceSplitPane = forceSplitPane
refresh()
}

View File

@@ -37,6 +37,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SheetValue
import androidx.compose.material3.Text
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@@ -63,6 +64,8 @@ import androidx.compose.ui.tooling.preview.Devices
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.window.core.layout.WindowHeightSizeClass
import androidx.window.core.layout.WindowWidthSizeClass
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.signal.core.ui.compose.BottomSheets
@@ -76,7 +79,6 @@ import org.thoughtcrime.securesms.events.CallParticipant
import org.thoughtcrime.securesms.events.GroupCallReactionEvent
import org.thoughtcrime.securesms.events.WebRtcViewModel
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.window.WindowSizeClass
import kotlin.math.max
import kotlin.math.round
import kotlin.time.Duration.Companion.seconds
@@ -484,7 +486,7 @@ private fun TinyLocalVideoRenderer(
if (LocalInspectionMode.current) {
Text(
"Test ${WindowSizeClass.rememberWindowSizeClass()}",
"Test ${currentWindowAdaptiveInfo().windowSizeClass}",
modifier = modifier
.padding(padding)
.height(height)
@@ -553,27 +555,28 @@ private fun SmallMoveableLocalVideoRenderer(
@Composable
private fun rememberTinyPortraitSize(): SelfPictureInPictureDimensions {
val smallWidth = dimensionResource(R.dimen.call_screen_overflow_item_size)
val windowClass = WindowSizeClass.rememberWindowSizeClass()
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
val isLandscape = LocalConfiguration.current.orientation == Configuration.ORIENTATION_LANDSCAPE
val smallSize = when (windowClass) {
WindowSizeClass.COMPACT_PORTRAIT -> DpSize(40.dp, smallWidth)
WindowSizeClass.COMPACT_LANDSCAPE -> DpSize(smallWidth, 40.dp)
WindowSizeClass.EXTENDED_PORTRAIT, WindowSizeClass.EXTENDED_LANDSCAPE -> DpSize(124.dp, 217.dp)
val smallSize = when {
windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT && !isLandscape -> DpSize(40.dp, smallWidth)
windowSizeClass.windowHeightSizeClass == WindowHeightSizeClass.COMPACT && isLandscape -> DpSize(smallWidth, 40.dp)
windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.EXPANDED -> DpSize(124.dp, 217.dp)
else -> DpSize(smallWidth, smallWidth)
}
val expandedSize = when (windowClass) {
WindowSizeClass.COMPACT_PORTRAIT -> DpSize(180.dp, 320.dp)
WindowSizeClass.COMPACT_LANDSCAPE -> DpSize(320.dp, 180.dp)
val expandedSize = when {
windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT && !isLandscape -> DpSize(180.dp, 320.dp)
windowSizeClass.windowHeightSizeClass == WindowHeightSizeClass.COMPACT && isLandscape -> DpSize(320.dp, 180.dp)
else -> DpSize(smallWidth, smallWidth)
}
val padding = when (windowClass) {
WindowSizeClass.COMPACT_PORTRAIT -> PaddingValues(vertical = 16.dp)
val padding = when {
windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT && !isLandscape -> PaddingValues(vertical = 16.dp)
else -> PaddingValues(16.dp)
}
return remember(windowClass) {
return remember(windowSizeClass) {
SelfPictureInPictureDimensions(smallSize, expandedSize, padding)
}
}