package com.aiosman.ravenow.exp import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.content.res.Resources import android.os.Build import android.util.TypedValue import android.view.View import android.view.ViewGroup import android.view.WindowManager import androidx.annotation.ColorInt //import androidx.appcompat.app.AppCompatActivity private const val COLOR_TRANSPARENT = 0 @SuppressLint("ObsoleteSdkInt") @JvmOverloads fun Activity.immersive(@ColorInt color: Int = COLOR_TRANSPARENT, darkMode: Boolean? = null) { when { Build.VERSION.SDK_INT >= 21 -> { when (color) { COLOR_TRANSPARENT -> { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) var systemUiVisibility = window.decorView.systemUiVisibility systemUiVisibility = systemUiVisibility or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN systemUiVisibility = systemUiVisibility or View.SYSTEM_UI_FLAG_LAYOUT_STABLE window.decorView.systemUiVisibility = systemUiVisibility window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) window.statusBarColor = color } else -> { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) var systemUiVisibility = window.decorView.systemUiVisibility systemUiVisibility = systemUiVisibility and View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN systemUiVisibility = systemUiVisibility and View.SYSTEM_UI_FLAG_LAYOUT_STABLE window.decorView.systemUiVisibility = systemUiVisibility window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) window.statusBarColor = color } } } Build.VERSION.SDK_INT >= 19 -> { window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) if (color != COLOR_TRANSPARENT) { setTranslucentView(window.decorView as ViewGroup, color) } } } if (darkMode != null) { darkMode(darkMode) } } @JvmOverloads fun Activity.darkMode(darkMode: Boolean = true) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { var systemUiVisibility = window.decorView.systemUiVisibility systemUiVisibility = if (darkMode) { systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR } else { systemUiVisibility and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() } window.decorView.systemUiVisibility = systemUiVisibility } } private fun Context.setTranslucentView(container: ViewGroup, color: Int) { if (Build.VERSION.SDK_INT >= 19) { var simulateStatusBar: View? = container.findViewById(android.R.id.custom) if (simulateStatusBar == null && color != 0) { simulateStatusBar = View(container.context) simulateStatusBar.id = android.R.id.custom val lp = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) container.addView(simulateStatusBar, lp) } simulateStatusBar?.setBackgroundColor(color) } } val Context?.statusBarHeight: Int get() { this ?: return 0 var result = 24 val resId = resources.getIdentifier("status_bar_height", "dimen", "android") result = if (resId > 0) { resources.getDimensionPixelSize(resId) } else { TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, result.toFloat(), Resources.getSystem().displayMetrics ).toInt() } return result }