app/src/main/java/com/geekorum/ttrss/settings/SettingsActivity.kt
changeset 1111 a0e3579dee3f
parent 1037 5f14112904de
child 1148 e27fcdf4a50e
--- a/app/src/main/java/com/geekorum/ttrss/settings/SettingsActivity.kt	Sat May 20 20:17:30 2023 -0400
+++ b/app/src/main/java/com/geekorum/ttrss/settings/SettingsActivity.kt	Sun May 21 19:00:53 2023 -0400
@@ -22,30 +22,37 @@
 
 import android.content.Intent
 import android.content.pm.PackageManager
+import android.content.res.Configuration
 import android.os.Bundle
 import android.os.StrictMode
 import androidx.activity.compose.setContent
 import androidx.appcompat.app.AppCompatDelegate
 import androidx.browser.customtabs.CustomTabsService
 import androidx.compose.foundation.background
+import androidx.compose.foundation.isSystemInDarkTheme
 import androidx.compose.foundation.layout.*
-import androidx.compose.material.*
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material3.*
 import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
 import androidx.compose.material3.windowsizeclass.WindowSizeClass
 import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
 import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.DisposableEffect
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.input.nestedscroll.nestedScroll
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.res.stringResource
+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.compose.ui.viewinterop.AndroidViewBinding
 import androidx.core.net.toUri
+import androidx.core.view.WindowCompat
 import androidx.fragment.app.commit
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleEventObserver
@@ -57,7 +64,8 @@
 import com.geekorum.ttrss.core.BaseActivity
 import com.geekorum.ttrss.databinding.SettingsPreferencesContainerBinding
 import com.geekorum.ttrss.debugtools.withStrictMode
-import com.geekorum.ttrss.ui.AppTheme
+import com.geekorum.ttrss.ui.AppTheme3
+import com.google.accompanist.systemuicontroller.rememberSystemUiController
 import dagger.hilt.android.AndroidEntryPoint
 import javax.inject.Inject
 
@@ -68,9 +76,16 @@
     @OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        WindowCompat.setDecorFitsSystemWindows(window, false)
         allowDiskReads()
         setContent {
-            AppTheme {
+            AppTheme3 {
+                val sysUiController = rememberSystemUiController()
+                val useDarkIcons = !isSystemInDarkTheme()
+                DisposableEffect(sysUiController, useDarkIcons) {
+                    sysUiController.setSystemBarsColor(Color.Transparent, darkIcons = useDarkIcons)
+                    onDispose {  }
+                }
                 SettingsScreen(windowSizeClass = calculateWindowSizeClass(activity = this@SettingsActivity),
                     onNavigateUpClick = {
                         onSupportNavigateUp()
@@ -176,18 +191,26 @@
 }
 
 
+@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun SettingsScreen(
     windowSizeClass: WindowSizeClass,
     onNavigateUpClick: () -> Unit,
-    scaffoldState: ScaffoldState = rememberScaffoldState(),
 ) {
     val useTabletLayout = windowSizeClass.widthSizeClass >= WindowWidthSizeClass.Medium
+    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
     Scaffold(
-        scaffoldState = scaffoldState,
+        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
         topBar = {
+            val colors = TopAppBarDefaults.topAppBarColors(
+                containerColor = if (useTabletLayout) MaterialTheme.colorScheme.primaryContainer
+                    else MaterialTheme.colorScheme.surface,
+                titleContentColor = if (useTabletLayout) MaterialTheme.colorScheme.onPrimaryContainer
+                    else MaterialTheme.colorScheme.onSurface
+            )
             TopAppBar(
-                elevation = if (useTabletLayout) 0.dp else AppBarDefaults.TopAppBarElevation,
+                scrollBehavior = scrollBehavior,
+                colors = colors,
                 title = {
                     Text(stringResource(R.string.activity_settings_title))
                 },
@@ -204,7 +227,7 @@
                 PreferencesContainer(Modifier.padding(4.dp))
             }
         } else {
-            PreferencesContainer()
+            PreferencesContainer(Modifier.padding(it))
         }
     }
 }
@@ -212,7 +235,7 @@
 @Composable
 private fun TabletLayoutContent(
     modifier: Modifier = Modifier,
-    content: @Composable () -> Unit
+    content: @Composable ColumnScope.() -> Unit
 ) {
     Box(
         contentAlignment = Alignment.TopCenter,
@@ -222,11 +245,11 @@
             modifier = Modifier
                 .height(136.dp) // 192.dp - 56.dp of appbar
                 .fillMaxWidth()
-                .background(MaterialTheme.colors.primarySurface)
+                .background(MaterialTheme.colorScheme.primaryContainer)
                 .testTag("fakeAppBar")
         )
 
-        Card(
+        ElevatedCard(
             Modifier
                 .width(512.dp)
                 .fillMaxSize()
@@ -244,9 +267,13 @@
 
 @OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
 @Preview
-@Composable
+@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL)
+@Preview(device = Devices.TABLET)
+@Preview(device = Devices.TABLET,
+    uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL
+)@Composable
 fun PreviewSettingsScreen() {
-    AppTheme {
+    AppTheme3 {
         BoxWithConstraints {
             val windowSizeClass = WindowSizeClass.calculateFromSize(DpSize(maxWidth, maxHeight))
             SettingsScreen(windowSizeClass = windowSizeClass, onNavigateUpClick = {})