mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 11:46:32 +00:00
system bar color tweaks
This commit is contained in:
parent
be77530a09
commit
699a31fd52
11 changed files with 96 additions and 56 deletions
|
|
@ -3,8 +3,11 @@ package com.habitrpg.android.habitica.extensions
|
|||
import android.os.Build
|
||||
import android.view.View
|
||||
import android.view.Window
|
||||
import android.view.WindowInsetsController
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.common.habitica.extensions.getThemeColor
|
||||
import kotlin.and
|
||||
import kotlin.or
|
||||
|
||||
fun Window.updateStatusBarColor(
|
||||
color: Int,
|
||||
|
|
@ -18,3 +21,18 @@ fun Window.updateStatusBarColor(
|
|||
decorView.systemUiVisibility =
|
||||
if (isLight) View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR else View.SYSTEM_UI_FLAG_VISIBLE
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
fun Window.setNavigationBarDarkIcons(dark: Boolean) {
|
||||
when {
|
||||
Build.VERSION_CODES.R <= Build.VERSION.SDK_INT -> insetsController?.setSystemBarsAppearance(
|
||||
if (dark) WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS else 0,
|
||||
WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
|
||||
)
|
||||
else -> decorView.systemUiVisibility = if (dark) {
|
||||
decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
|
||||
} else {
|
||||
decorView.systemUiVisibility and View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR.inv()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -94,7 +94,8 @@ abstract class BaseActivity : AppCompatActivity() {
|
|||
|
||||
private val defaultNavigationBarStyle by lazy {
|
||||
SystemBarStyle.auto(ContextCompat.getColor(this, R.color.white_50_alpha),
|
||||
ContextCompat.getColor(this, R.color.black_50_alpha)
|
||||
ContextCompat.getColor(this, R.color.black_50_alpha),
|
||||
{ _ -> true}
|
||||
)
|
||||
}
|
||||
internal var navigationBarStyle: SystemBarStyle? = null
|
||||
|
|
|
|||
|
|
@ -23,9 +23,6 @@ class GemPurchaseActivity : PurchaseActivity() {
|
|||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
showSubscription = !(intent.extras?.containsKey("openSubscription") == true && intent.extras?.getBoolean("openSubscription") == false)
|
||||
if (showSubscription) {
|
||||
navigationBarStyle = SystemBarStyle.dark(ContextCompat.getColor(this, R.color.background_brand_30))
|
||||
}
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
val toolbar = findViewById<Toolbar>(R.id.toolbar)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
package com.habitrpg.android.habitica.ui.activities
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.SystemBarStyle
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
||||
|
|
@ -16,6 +18,7 @@ import androidx.viewpager.widget.ViewPager
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.ContentRepository
|
||||
import com.habitrpg.android.habitica.databinding.ActivityIntroBinding
|
||||
import com.habitrpg.android.habitica.extensions.setNavigationBarDarkIcons
|
||||
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment
|
||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||
import com.viewpagerindicator.IconPagerAdapter
|
||||
|
|
@ -40,7 +43,6 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan
|
|||
}
|
||||
|
||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||
navigationBarStyle = SystemBarStyle.dark(ContextCompat.getColor(this, R.color.black_50_alpha))
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setupIntro()
|
||||
|
|
@ -52,9 +54,18 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan
|
|||
lifecycleScope.launch(ExceptionHandler.coroutine()) {
|
||||
contentRepository.retrieveContent()
|
||||
}
|
||||
}
|
||||
|
||||
window.statusBarColor = ContextCompat.getColor(this, R.color.black_20_alpha)
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
window.navigationBarColor = ContextCompat.getColor(this, R.color.black)
|
||||
window.isNavigationBarContrastEnforced = false
|
||||
val controller = WindowCompat.getInsetsController(window, window.decorView)
|
||||
controller.isAppearanceLightNavigationBars = false
|
||||
controller.isAppearanceLightStatusBars = false
|
||||
window.setNavigationBarDarkIcons(false)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupIntro() {
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ import com.habitrpg.android.habitica.extensions.updateStatusBarColor
|
|||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
||||
import com.habitrpg.android.habitica.extensions.AuthenticationErrors
|
||||
import com.habitrpg.android.habitica.extensions.setNavigationBarDarkIcons
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.AuthenticationViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
|
|
@ -71,7 +72,6 @@ class LoginActivity : BaseActivity() {
|
|||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
navigationBarStyle = SystemBarStyle.dark(ContextCompat.getColor(this, R.color.black_50_alpha))
|
||||
super.onCreate(savedInstanceState)
|
||||
supportActionBar?.hide()
|
||||
// Set default values to avoid null-responses when requesting unedited settings
|
||||
|
|
@ -84,6 +84,17 @@ class LoginActivity : BaseActivity() {
|
|||
setupViewmodelObserving()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
window.isNavigationBarContrastEnforced = false
|
||||
val controller = WindowCompat.getInsetsController(window, window.decorView)
|
||||
controller.isAppearanceLightNavigationBars = false
|
||||
controller.isAppearanceLightStatusBars = false
|
||||
window.setNavigationBarDarkIcons(false)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupViewmodelObserving() {
|
||||
lifecycleLaunchWhen(Lifecycle.State.RESUMED) {
|
||||
viewModel.showAuthProgress.collect { showProgress ->
|
||||
|
|
@ -155,14 +166,6 @@ class LoginActivity : BaseActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun loadTheme(
|
||||
sharedPreferences: SharedPreferences,
|
||||
forced: Boolean,
|
||||
) {
|
||||
super.loadTheme(sharedPreferences, forced)
|
||||
window.updateStatusBarColor(R.color.black_20_alpha, false)
|
||||
}
|
||||
|
||||
private fun resetLayout() {
|
||||
val isRegistering = viewModel.isRegistering.value
|
||||
binding.email.isVisible = isRegistering
|
||||
|
|
|
|||
|
|
@ -282,17 +282,25 @@ open class MainActivity : BaseActivity(), SnackbarActivity {
|
|||
drawerView: View,
|
||||
slideOffset: Float
|
||||
) {
|
||||
if (!isUsingNightModeResources()) {
|
||||
if (slideOffset < 0.5f && isOpeningDrawer == null) {
|
||||
if (!isUsingNightModeResources()) {
|
||||
window.updateStatusBarColor(getThemeColor(R.attr.colorPrimaryDark), false)
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
window?.isNavigationBarContrastEnforced = true
|
||||
}
|
||||
isOpeningDrawer = true
|
||||
} else if (slideOffset > 0.5f && isOpeningDrawer == null) {
|
||||
if (!isUsingNightModeResources()) {
|
||||
window.updateStatusBarColor(
|
||||
getThemeColor(R.attr.headerBackgroundColor),
|
||||
true
|
||||
)
|
||||
isOpeningDrawer = false
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
window?.isNavigationBarContrastEnforced = !binding.content.bottomNavigation.isVisible
|
||||
}
|
||||
isOpeningDrawer = false
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -107,20 +107,6 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
|||
|
||||
binding.previousButton.setOnClickListener { previousClicked() }
|
||||
binding.nextButton.setOnClickListener { nextClicked() }
|
||||
|
||||
if (this.isUsingNightModeResources()) {
|
||||
window.statusBarColor = ContextCompat.getColor(this, R.color.black_20_alpha)
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
window.insetsController?.setSystemBarsAppearance(
|
||||
0,
|
||||
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
|
||||
)
|
||||
} else {
|
||||
@Suppress("DEPRECATION")
|
||||
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
|
|
|||
|
|
@ -12,10 +12,14 @@ import androidx.compose.foundation.isSystemInDarkTheme
|
|||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.systemBars
|
||||
import androidx.compose.foundation.layout.windowInsetsTopHeight
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
|
|
@ -160,6 +164,7 @@ fun TaskSummaryView(viewModel: TaskSummaryViewModel) {
|
|||
Color.White
|
||||
}
|
||||
Column(Modifier.background(HabiticaTheme.colors.primaryBackgroundFor(task))) {
|
||||
Spacer(Modifier.windowInsetsTopHeight(WindowInsets.systemBars))
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier.padding(vertical = 2.dp)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments
|
||||
|
||||
import android.graphics.PorterDuff
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
|
|
@ -8,6 +9,7 @@ import android.view.MenuInflater
|
|||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowInsetsController
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.viewbinding.ViewBinding
|
||||
|
|
@ -16,6 +18,7 @@ import com.google.android.material.tabs.TabLayout
|
|||
import com.google.firebase.analytics.FirebaseAnalytics
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.setNavigationBarDarkIcons
|
||||
import com.habitrpg.android.habitica.helpers.SoundManager
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
|
||||
|
|
@ -50,16 +53,10 @@ abstract class BaseMainFragment<VB : ViewBinding> : BaseFragment<VB>() {
|
|||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
val window = activity?.window
|
||||
if (window != null) {
|
||||
val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView)
|
||||
if (this.usesBottomNavigation) {
|
||||
bottomNavigation?.visibility = View.VISIBLE
|
||||
windowInsetsController.isAppearanceLightNavigationBars = false
|
||||
} else {
|
||||
bottomNavigation?.visibility = View.GONE
|
||||
windowInsetsController.isAppearanceLightNavigationBars = requireActivity().isUsingNightModeResources()
|
||||
}
|
||||
}
|
||||
|
||||
setHasOptionsMenu(true)
|
||||
|
|
@ -94,6 +91,25 @@ abstract class BaseMainFragment<VB : ViewBinding> : BaseFragment<VB>() {
|
|||
super.onResume()
|
||||
mainActivity?.showBackButton = showsBackButton
|
||||
mainActivity?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
|
||||
val window = activity?.window
|
||||
if (window != null) {
|
||||
val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView)
|
||||
if (this.usesBottomNavigation) {
|
||||
windowInsetsController.isAppearanceLightNavigationBars = false
|
||||
view?.systemUiVisibility
|
||||
window.setNavigationBarDarkIcons(false)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
window.isNavigationBarContrastEnforced = false
|
||||
}
|
||||
} else {
|
||||
windowInsetsController.isAppearanceLightNavigationBars = requireActivity().isUsingNightModeResources()
|
||||
window.setNavigationBarDarkIcons(!requireActivity().isUsingNightModeResources())
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
window.isNavigationBarContrastEnforced = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Use onCreateOptionsMenu(Menu, MenuInflater) instead")
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import android.content.Intent
|
|||
import android.content.SharedPreferences
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
|
|
@ -620,11 +621,6 @@ class NavigationDrawerFragment : DialogFragment() {
|
|||
adapter.updateItems(items)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
getItemWithIdentifier(SIDEBAR_SHOPS_CUSTOMIZATIONS)?.isVisible = configManager.enableCustomizationShop()
|
||||
}
|
||||
|
||||
fun setSelection(
|
||||
transitionId: Int?,
|
||||
bundle: Bundle? = null,
|
||||
|
|
@ -726,17 +722,16 @@ class NavigationDrawerFragment : DialogFragment() {
|
|||
containerView?.isVisible = false
|
||||
}
|
||||
}
|
||||
|
||||
fun toggleDrawer() {
|
||||
val containerView = fragmentContainerView
|
||||
if (containerView != null && containerView.parent is DrawerLayout) {
|
||||
if (drawerLayout?.isDrawerOpen(containerView) == true) {
|
||||
drawerLayout?.closeDrawer(containerView)
|
||||
closeDrawer()
|
||||
} else {
|
||||
drawerLayout?.openDrawer(containerView)
|
||||
openDrawer()
|
||||
}
|
||||
} else {
|
||||
containerView?.isVisible = containerView?.isVisible != true
|
||||
containerView?.isVisible = containerView.isVisible != true
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
NAME=4.7.0
|
||||
CODE=12351
|
||||
CODE=12361
|
||||
Loading…
Reference in a new issue