Make navigation bar match color

This commit is contained in:
Kirill Kamakin
2022-11-19 10:57:08 +01:00
parent bb6f9004d0
commit 73a703b0b8
4 changed files with 24 additions and 15 deletions

View File

@@ -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<InputMethodManager>()
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
}

View File

@@ -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 {

View File

@@ -6,11 +6,4 @@
<item name="windowSplashScreenBackground">@android:color/black</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_splash_screen</item>
</style>
<style name="AppTheme" parent="Theme.Material3.DynamicColors.Dark">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">false</item>
</style>
</resources>

View File

@@ -6,10 +6,10 @@
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_splash_screen</item>
</style>
<style name="AppTheme" parent="Theme.Material3.DynamicColors.Light">
<style name="AppTheme" parent="Theme.Material3.DynamicColors.DayNight">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
</style>
</resources>