summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ale Nijamkin <nijamkin@google.com> 2023-09-29 23:46:10 +0000
committer Alejandro Nijamkin <nijamkin@google.com> 2023-10-02 15:03:14 -0700
commit006396acf79d80c60f19b4a6d07c04f55a7ed736 (patch)
treea45b22fdf0f21362c579c9818b38525539092587
parent14a320dc5fe6bb322f8b27ffff9cf857bc8fdd17 (diff)
[flexiglass] Revert^2 of WindowSizeClass composition local.
Reverted change: ag/24907658 Bug: 299343639 Test: see original CL at ag/24868438 Change-Id: Id34593b8e2f68fe409fa7b382cc15661523c4170
-rw-r--r--packages/SystemUI/compose/core/Android.bp2
-rw-r--r--packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt4
-rw-r--r--packages/SystemUI/compose/core/src/com/android/compose/windowsizeclass/WindowSizeClass.kt47
3 files changed, 53 insertions, 0 deletions
diff --git a/packages/SystemUI/compose/core/Android.bp b/packages/SystemUI/compose/core/Android.bp
index 510fa1e1fa80..42d088f218a1 100644
--- a/packages/SystemUI/compose/core/Android.bp
+++ b/packages/SystemUI/compose/core/Android.bp
@@ -34,7 +34,9 @@ android_library {
"androidx.compose.runtime_runtime",
"androidx.compose.material3_material3",
+ "androidx.compose.material3_material3-window-size-class",
"androidx.savedstate_savedstate",
+ "androidx.window_window",
],
kotlincflags: ["-Xjvm-default=all"],
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt b/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt
index b4e90d63c6b8..06618704e085 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt
@@ -29,6 +29,8 @@ import com.android.compose.theme.typography.TypefaceNames
import com.android.compose.theme.typography.TypefaceTokens
import com.android.compose.theme.typography.TypographyTokens
import com.android.compose.theme.typography.platformTypography
+import com.android.compose.windowsizeclass.LocalWindowSizeClass
+import com.android.compose.windowsizeclass.calculateWindowSizeClass
/** The Material 3 theme that should wrap all Platform Composables. */
@Composable
@@ -51,10 +53,12 @@ fun PlatformTheme(
remember(typefaceNames) {
platformTypography(TypographyTokens(TypeScaleTokens(TypefaceTokens(typefaceNames))))
}
+ val windowSizeClass = calculateWindowSizeClass()
MaterialTheme(colorScheme, typography = typography) {
CompositionLocalProvider(
LocalAndroidColorScheme provides androidColorScheme,
+ LocalWindowSizeClass provides windowSizeClass,
) {
content()
}
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/windowsizeclass/WindowSizeClass.kt b/packages/SystemUI/compose/core/src/com/android/compose/windowsizeclass/WindowSizeClass.kt
new file mode 100644
index 000000000000..4674d6e5f25a
--- /dev/null
+++ b/packages/SystemUI/compose/core/src/com/android/compose/windowsizeclass/WindowSizeClass.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.compose.windowsizeclass
+
+import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
+import androidx.compose.material3.windowsizeclass.WindowSizeClass
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.staticCompositionLocalOf
+import androidx.compose.ui.graphics.toComposeRect
+import androidx.compose.ui.platform.LocalConfiguration
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalDensity
+import androidx.window.layout.WindowMetricsCalculator
+
+val LocalWindowSizeClass =
+ staticCompositionLocalOf<WindowSizeClass> {
+ throw IllegalStateException(
+ "No WindowSizeClass configured. Make sure to use LocalWindowSizeClass in a Composable" +
+ " surrounded by a PlatformTheme {}."
+ )
+ }
+
+@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
+@Composable
+fun calculateWindowSizeClass(): WindowSizeClass {
+ // Observe view configuration changes and recalculate the size class on each change.
+ LocalConfiguration.current
+ val density = LocalDensity.current
+ val context = LocalContext.current
+ val metrics = WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(context)
+ val size = with(density) { metrics.bounds.toComposeRect().size.toDpSize() }
+ return WindowSizeClass.calculateFromSize(size)
+}