From f2db6744323671d0d12bc368c42d0a04e8fa54f6 Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Tue, 23 Jan 2024 17:57:56 +0300 Subject: [PATCH] Migrate to edge to edge --- app/build.gradle.kts | 8 ++--- app/src/main/java/com/sadellie/unitto/App.kt | 34 +++++++++++++------ .../java/com/sadellie/unitto/MainActivity.kt | 20 ++--------- app/src/main/res/values/themes.xml | 24 ++++++++++--- gradle/libs.versions.toml | 4 +-- 5 files changed, 50 insertions(+), 40 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9e97ae09..2124ee47 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,6 @@ /* * Unitto is a unit converter for Android - * Copyright (c) 2023 Elshan Agaev + * Copyright (c) 2023-2024 Elshan Agaev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -129,14 +129,14 @@ dependencies { implementation(libs.androidx.profileinstaller.profileinstaller) coreLibraryDesugaring(libs.com.android.tools.desugar.jdk.libs) + implementation(libs.androidx.activity.activity.compose) + implementation(libs.androidx.appcompat.appcompat) + implementation(libs.androidx.lifecycle.lifecycle.runtime.compose) implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.material3.window.size) implementation(libs.androidx.compose.material.icons.extended) - implementation(libs.androidx.lifecycle.lifecycle.runtime.compose) implementation(libs.com.github.sadellie.themmo) - implementation(libs.com.google.accompanist.accompanist.systemuicontroller) implementation(libs.androidx.datastore.datastore.preferences) - implementation(libs.androidx.appcompat.appcompat) implementation(project(":feature:converter")) implementation(project(":feature:calculator")) diff --git a/app/src/main/java/com/sadellie/unitto/App.kt b/app/src/main/java/com/sadellie/unitto/App.kt index 37b07fc6..4af0741b 100644 --- a/app/src/main/java/com/sadellie/unitto/App.kt +++ b/app/src/main/java/com/sadellie/unitto/App.kt @@ -18,11 +18,14 @@ package com.sadellie.unitto +import androidx.activity.ComponentActivity +import androidx.activity.SystemBarStyle import androidx.activity.compose.BackHandler +import androidx.activity.enableEdgeToEdge import androidx.compose.animation.core.tween import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember @@ -34,7 +37,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController -import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.sadellie.unitto.core.ui.common.NavigationDrawer import com.sadellie.unitto.core.ui.common.rememberDrawerState import com.sadellie.unitto.core.ui.model.DrawerItem @@ -48,13 +50,10 @@ import io.github.sadellie.themmo.ThemmoController import kotlinx.coroutines.launch @Composable -internal fun App(prefs: AppPreferences?) { - +internal fun ComponentActivity.App(prefs: AppPreferences?) { val mContext = LocalContext.current val navController = rememberNavController() - val sysUiController = rememberSystemUiController() - // Navigation drawer stuff val drawerScope = rememberCoroutineScope() val drawerState = rememberDrawerState() @@ -87,7 +86,7 @@ internal fun App(prefs: AppPreferences?) { animationSpec = tween(250) ) { val backgroundColor = MaterialTheme.colorScheme.background - val useDarkIcons = remember(backgroundColor) { backgroundColor.luminance() > 0.5f } + val isDarkThemeEnabled = remember(backgroundColor) { backgroundColor.luminance() < 0.5f } NavigationDrawer( modifier = Modifier, @@ -119,9 +118,18 @@ internal fun App(prefs: AppPreferences?) { } ) - LaunchedEffect(useDarkIcons) { - sysUiController.setNavigationBarColor(Color.Transparent, useDarkIcons) - sysUiController.setStatusBarColor(Color.Transparent, useDarkIcons) + DisposableEffect(isDarkThemeEnabled) { + enableEdgeToEdge( + statusBarStyle = SystemBarStyle.auto( + android.graphics.Color.TRANSPARENT, + android.graphics.Color.TRANSPARENT, + ) { isDarkThemeEnabled }, + navigationBarStyle = SystemBarStyle.auto( + lightScrim, + darkScrim, + ) { isDarkThemeEnabled }, + ) + onDispose {} } } @@ -134,4 +142,8 @@ private fun Long.toColor(): Color = try { Color(this.toULong()) } catch (e: Exception) { Color.Unspecified -} \ No newline at end of file +} + +// The default scrims, as defined by androidx and the platform +private val lightScrim = android.graphics.Color.argb(0xe6, 0xFF, 0xFF, 0xFF) +private val darkScrim = android.graphics.Color.argb(0x80, 0x1b, 0x1b, 0x1b) diff --git a/app/src/main/java/com/sadellie/unitto/MainActivity.kt b/app/src/main/java/com/sadellie/unitto/MainActivity.kt index b37348bb..60190817 100644 --- a/app/src/main/java/com/sadellie/unitto/MainActivity.kt +++ b/app/src/main/java/com/sadellie/unitto/MainActivity.kt @@ -18,19 +18,15 @@ package com.sadellie.unitto -import android.app.Activity -import android.content.Context import android.os.Bundle -import android.util.AttributeSet -import android.view.View import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalConfiguration import androidx.core.os.ConfigurationCompat -import androidx.core.view.WindowCompat import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.sadellie.unitto.core.ui.LocalHapticPreference import com.sadellie.unitto.core.ui.LocalLocale @@ -53,6 +49,7 @@ internal class MainActivity : AppCompatActivity() { @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + enableEdgeToEdge() setContent { val configuration = LocalConfiguration.current @@ -77,17 +74,4 @@ internal class MainActivity : AppCompatActivity() { } } } - - override fun onCreateView( - parent: View?, - name: String, - context: Context, - attrs: AttributeSet - ): View? { - val window = (parent?.context as? Activity)?.window - if (window != null) { - WindowCompat.setDecorFitsSystemWindows(window, false) - } - return super.onCreateView(parent, name, context, attrs) - } } diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index ecaeb63c..c8ef5802 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,7 +1,21 @@ + + - +