Skip to content

Commit a820bb6

Browse files
committed
edgeToEdge for material 2/3 & dark/light
1 parent 3263ca3 commit a820bb6

8 files changed

Lines changed: 68 additions & 2 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
GROUP=io.github.softartdev
2-
VERSION=0.9.3
2+
VERSION=0.9.4
33

44
org.gradle.jvmargs=-Xmx16g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx16g" -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g
55
org.gradle.parallel=true
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.softartdev.shared
2+
3+
import android.app.Activity
4+
import android.graphics.Color
5+
import androidx.activity.ComponentActivity
6+
import androidx.activity.SystemBarStyle
7+
import androidx.activity.compose.LocalActivity
8+
import androidx.activity.enableEdgeToEdge
9+
import androidx.compose.runtime.Composable
10+
import androidx.core.view.WindowCompat
11+
12+
@Composable
13+
actual fun EnableEdgeToEdge(material3: Boolean, inDark: Boolean) {
14+
val activity: Activity = LocalActivity.current ?: return
15+
if (material3) {
16+
val componentActivity = activity as? ComponentActivity ?: return
17+
val scrimLight: Int = Color.argb(0xe6, 0xFF, 0xFF, 0xFF)
18+
val scrimDark: Int = Color.argb(0x80, 0x1b, 0x1b, 0x1b)
19+
val sbStyle: SystemBarStyle = when {
20+
inDark -> SystemBarStyle.dark(scrim = scrimDark)
21+
else -> SystemBarStyle.light(scrim = scrimLight, darkScrim = scrimDark)
22+
}
23+
componentActivity.enableEdgeToEdge(statusBarStyle = sbStyle, navigationBarStyle = sbStyle)
24+
} else {
25+
WindowCompat.setDecorFitsSystemWindows(activity.window, false)
26+
}
27+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.softartdev.shared
2+
3+
import androidx.compose.foundation.isSystemInDarkTheme
4+
import androidx.compose.runtime.Composable
5+
import androidx.compose.runtime.ReadOnlyComposable
6+
import com.softartdev.theme.pref.ThemeEnum
7+
import com.softartdev.theme.pref.ThemePrefs
8+
9+
@Composable
10+
expect fun EnableEdgeToEdge(material3: Boolean, inDark: Boolean)
11+
12+
val ThemePrefs.inDark: Boolean
13+
@Composable
14+
@ReadOnlyComposable
15+
get() = when (darkThemeState.value) {
16+
ThemeEnum.Light -> false
17+
ThemeEnum.Dark -> true
18+
ThemeEnum.SystemDefault -> isSystemInDarkTheme()
19+
}

sample/src/commonMain/kotlin/com/softartdev/shared/material/MaterialApp.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import androidx.navigation.compose.composable
99
import androidx.navigation.compose.dialog
1010
import androidx.navigation.compose.rememberNavController
1111
import com.softartdev.shared.AppNavGraph
12+
import com.softartdev.shared.EnableEdgeToEdge
13+
import com.softartdev.shared.inDark
1214
import com.softartdev.theme.material.PreferableMaterialTheme
1315
import com.softartdev.theme.material.ThemeDialog
1416
import com.softartdev.theme.pref.PreferenceHelper
@@ -22,6 +24,7 @@ fun MaterialApp(
2224
modifier: Modifier = Modifier,
2325
navController: NavHostController = rememberNavController()
2426
) = PreferableMaterialTheme { // provides composition locals
27+
EnableEdgeToEdge(material3 = false, inDark = themePrefs.inDark)
2528
NavHost(
2629
modifier = modifier.safeDrawingPadding(),
2730
navController = navController,

sample/src/commonMain/kotlin/com/softartdev/shared/material3/Material3App.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import androidx.navigation.compose.composable
88
import androidx.navigation.compose.dialog
99
import androidx.navigation.compose.rememberNavController
1010
import com.softartdev.shared.AppNavGraph
11+
import com.softartdev.shared.EnableEdgeToEdge
12+
import com.softartdev.shared.inDark
1113
import com.softartdev.theme.material3.PreferableMaterialTheme
1214
import com.softartdev.theme.material3.ThemeDialog
1315
import com.softartdev.theme.pref.PreferenceHelper
@@ -21,6 +23,7 @@ fun Material3App(
2123
modifier: Modifier = Modifier,
2224
navController: NavHostController = rememberNavController()
2325
) = PreferableMaterialTheme { // provides composition locals
26+
EnableEdgeToEdge(material3 = true, inDark = themePrefs.inDark)
2427
NavHost(
2528
modifier = modifier,
2629
navController = navController,
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.softartdev.shared
2+
3+
import androidx.compose.runtime.Composable
4+
5+
@Composable
6+
actual fun EnableEdgeToEdge(material3: Boolean, inDark: Boolean) {
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.softartdev.shared
2+
3+
import androidx.compose.runtime.Composable
4+
5+
@Composable
6+
actual fun EnableEdgeToEdge(material3: Boolean, inDark: Boolean) {
7+
}

theme/theme-prefs/src/androidMain/kotlin/com/softartdev/theme/pref/AndroidPreferenceHelper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ internal class AndroidPreferenceHelper(context: Context) : PreferenceHelper {
1111
context.getSharedPreferences(context.packageName + "_ThemePref", Context.MODE_PRIVATE)
1212

1313
override var themeEnum: ThemeEnum
14-
get() = preferences.getInt(THEME_KEY, ThemeEnum.SystemDefault.ordinal).let(ThemeEnum.values()::get)
14+
get() = preferences.getInt(THEME_KEY, ThemeEnum.SystemDefault.ordinal).let(ThemeEnum.entries::get)
1515
set(value) = preferences.edit().putInt(THEME_KEY, value.ordinal).apply()
1616

1717
override fun clear() = preferences.edit().clear().apply()

0 commit comments

Comments
 (0)