From 73a703b0b8e36902e37106e6cbdfbc170f51d774 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sat, 19 Nov 2022 10:57:08 +0100 Subject: [PATCH] Make navigation bar match color --- .../mealient/extensions/ViewExtensions.kt | 10 ++++++++++ .../mealient/ui/activity/MainActivity.kt | 18 ++++++++++++------ app/src/main/res/values-night/themes.xml | 7 ------- app/src/main/res/values/themes.xml | 4 ++-- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/gq/kirmanak/mealient/extensions/ViewExtensions.kt b/app/src/main/java/gq/kirmanak/mealient/extensions/ViewExtensions.kt index 452b2c9..3e3d779 100644 --- a/app/src/main/java/gq/kirmanak/mealient/extensions/ViewExtensions.kt +++ b/app/src/main/java/gq/kirmanak/mealient/extensions/ViewExtensions.kt @@ -2,6 +2,9 @@ package gq.kirmanak.mealient.extensions import android.content.Context import android.content.SharedPreferences +import android.content.res.Configuration.UI_MODE_NIGHT_MASK +import android.content.res.Configuration.UI_MODE_NIGHT_YES +import android.os.Build import android.view.View import android.view.inputmethod.InputMethodManager import android.widget.EditText @@ -114,4 +117,11 @@ private fun Context.showToast(text: String, length: Int) { fun View.hideKeyboard() { val imm = context.getSystemService() imm?.hideSoftInputFromWindow(windowToken, 0) +} + +fun Context.isDarkThemeOn(): Boolean { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) + resources.configuration.isNightModeActive + else + resources.configuration.uiMode and UI_MODE_NIGHT_MASK == UI_MODE_NIGHT_YES } \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivity.kt b/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivity.kt index aed8c2b..28052a0 100644 --- a/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivity.kt +++ b/app/src/main/java/gq/kirmanak/mealient/ui/activity/MainActivity.kt @@ -7,6 +7,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView.OnQueryTextListener import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.core.view.WindowInsetsControllerCompat import androidx.core.view.isVisible import androidx.navigation.NavController import androidx.navigation.NavDirections @@ -19,6 +20,7 @@ import gq.kirmanak.mealient.NavGraphDirections.Companion.actionGlobalBaseURLFrag import gq.kirmanak.mealient.NavGraphDirections.Companion.actionGlobalRecipesListFragment import gq.kirmanak.mealient.R import gq.kirmanak.mealient.databinding.MainActivityBinding +import gq.kirmanak.mealient.extensions.isDarkThemeOn import gq.kirmanak.mealient.extensions.observeOnce import gq.kirmanak.mealient.logging.Logger import javax.inject.Inject @@ -40,24 +42,28 @@ class MainActivity : AppCompatActivity(R.layout.main_activity) { logger.v { "onCreate() called with: savedInstanceState = $savedInstanceState" } splashScreen.setKeepOnScreenCondition { viewModel.startDestination.value == null } setContentView(binding.root) - configureToolbar() + setupUi() configureNavGraph() - viewModel.uiStateLive.observe(this, ::onUiStateChange) - binding.navigationView.setNavigationItemSelectedListener(::onNavigationItemSelected) } private fun configureNavGraph() { logger.v { "configureNavGraph() called" } viewModel.startDestination.observeOnce(this) { logger.d { "configureNavGraph: received destination" } - val graph = navController.navInflater.inflate(R.navigation.nav_graph) + val controller = navController + val graph = controller.navInflater.inflate(R.navigation.nav_graph) graph.setStartDestination(it) - navController.setGraph(graph, intent.extras) + controller.setGraph(graph, intent.extras) } } - private fun configureToolbar() { + private fun setupUi() { binding.toolbar.setNavigationOnClickListener { binding.drawer.open() } + binding.navigationView.setNavigationItemSelectedListener(::onNavigationItemSelected) + val insetsController = WindowInsetsControllerCompat(window, window.decorView) + insetsController.isAppearanceLightNavigationBars = !isDarkThemeOn() + insetsController.isAppearanceLightStatusBars = !isDarkThemeOn() + viewModel.uiStateLive.observe(this, ::onUiStateChange) } private fun onNavigationItemSelected(menuItem: MenuItem): Boolean { diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index cb3ede7..a047150 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -6,11 +6,4 @@ @android:color/black @drawable/ic_splash_screen - - \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index d7d3e0b..08ca0a0 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -6,10 +6,10 @@ @drawable/ic_splash_screen -