diff --git a/app/src/main/java/one/mixin/android/extension/ContextExtension.kt b/app/src/main/java/one/mixin/android/extension/ContextExtension.kt index 6c4213673e..acf789d6a1 100644 --- a/app/src/main/java/one/mixin/android/extension/ContextExtension.kt +++ b/app/src/main/java/one/mixin/android/extension/ContextExtension.kt @@ -1015,6 +1015,24 @@ fun supportsOreo( } } + +inline fun supportsIceCream(code: () -> Unit) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + code() + } +} + +fun supportsIceCream( + code: () -> Unit, + elseAction: (() -> Unit), +) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + code() + } else { + elseAction.invoke() + } +} + @SuppressLint("ObsoleteSdkInt") inline fun supportsNougat(code: () -> Unit) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { diff --git a/app/src/main/java/one/mixin/android/ui/common/AvatarActivity.kt b/app/src/main/java/one/mixin/android/ui/common/AvatarActivity.kt index e274024ab2..129218c7bc 100644 --- a/app/src/main/java/one/mixin/android/ui/common/AvatarActivity.kt +++ b/app/src/main/java/one/mixin/android/ui/common/AvatarActivity.kt @@ -67,7 +67,6 @@ class AvatarActivity : BaseActivity() { requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT } postponeEnterTransition() - window.statusBarColor = Color.TRANSPARENT binding = ActivityAvatarBinding.inflate(layoutInflater) setContentView(binding.root) getScreenshot()?.let { diff --git a/app/src/main/java/one/mixin/android/ui/common/BaseActivity.kt b/app/src/main/java/one/mixin/android/ui/common/BaseActivity.kt index c2a0aff085..14efe0c44b 100644 --- a/app/src/main/java/one/mixin/android/ui/common/BaseActivity.kt +++ b/app/src/main/java/one/mixin/android/ui/common/BaseActivity.kt @@ -30,9 +30,7 @@ open class BaseActivity : AppCompatActivity() { } else { setTheme(getDefaultThemeId()) } - if (!skipSystemUi) { - window.navigationBarColor = colorFromAttribute(R.attr.bg_white) - } + window.navigationBarColor = colorFromAttribute(R.attr.bg_white) } override fun setContentView(layoutResID: Int) { diff --git a/app/src/main/java/one/mixin/android/ui/conversation/BubbleActivity.kt b/app/src/main/java/one/mixin/android/ui/conversation/BubbleActivity.kt index fa72023ce8..ac15900af0 100644 --- a/app/src/main/java/one/mixin/android/ui/conversation/BubbleActivity.kt +++ b/app/src/main/java/one/mixin/android/ui/conversation/BubbleActivity.kt @@ -39,7 +39,6 @@ class BubbleActivity : BlazeBaseActivity() { displayId != Display.DEFAULT_DISPLAY } setContentView(R.layout.activity_chat) - WindowCompat.setDecorFitsSystemWindows(window, false) showConversation(intent) } diff --git a/app/src/main/java/one/mixin/android/ui/conversation/ConversationActivity.kt b/app/src/main/java/one/mixin/android/ui/conversation/ConversationActivity.kt index 04f707f240..48886021a8 100644 --- a/app/src/main/java/one/mixin/android/ui/conversation/ConversationActivity.kt +++ b/app/src/main/java/one/mixin/android/ui/conversation/ConversationActivity.kt @@ -29,7 +29,6 @@ class ConversationActivity : BlazeBaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_chat) - WindowCompat.setDecorFitsSystemWindows(window, false) if (savedInstanceState == null) { if (intent.getBooleanExtra(ARGS_FAST_SHOW, false)) { replaceFragment( diff --git a/app/src/main/java/one/mixin/android/ui/home/inscription/InscriptionActivity.kt b/app/src/main/java/one/mixin/android/ui/home/inscription/InscriptionActivity.kt index b44f558c2b..288cffae0d 100644 --- a/app/src/main/java/one/mixin/android/ui/home/inscription/InscriptionActivity.kt +++ b/app/src/main/java/one/mixin/android/ui/home/inscription/InscriptionActivity.kt @@ -11,11 +11,13 @@ import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.RectF +import android.graphics.drawable.ColorDrawable import android.media.MediaScannerConnection import android.net.Uri import android.os.Bundle import android.util.Base64 import android.view.View +import android.view.WindowManager import androidx.activity.result.ActivityResultLauncher import androidx.activity.viewModels import androidx.appcompat.view.ContextThemeWrapper @@ -130,16 +132,20 @@ class InscriptionActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { skipSystemUi = true super.onCreate(savedInstanceState) + SystemUIManager.lightUI(window, false) + window.setBackgroundDrawable(ColorDrawable(Color.BLACK)) + binding = ActivityInscriptionBinding.inflate(layoutInflater) + setContentView(binding.root) + window.decorView.setOnApplyWindowInsetsListener { view, windowInsets -> + view.setBackgroundColor(Color.BLACK) + windowInsets + } getSendResult = registerForActivityResult( InscriptionSendActivity.SendContract(), activityResultRegistry, ::callbackSend, ) - SystemUIManager.lightUI(window, false) - window.statusBarColor = Color.TRANSPARENT - binding = ActivityInscriptionBinding.inflate(layoutInflater) - setContentView(binding.root) val qrcode = "$INSCRIPTION$inscriptionHash".generateQRCode(dpToPx(110f), 0).first binding.compose.setContent { InscriptionPage(inscriptionHash, { finish() }, { inscriptionState -> diff --git a/app/src/main/java/one/mixin/android/ui/media/pager/MediaPagerActivity.kt b/app/src/main/java/one/mixin/android/ui/media/pager/MediaPagerActivity.kt index 728785889f..f48e530bc2 100644 --- a/app/src/main/java/one/mixin/android/ui/media/pager/MediaPagerActivity.kt +++ b/app/src/main/java/one/mixin/android/ui/media/pager/MediaPagerActivity.kt @@ -80,7 +80,6 @@ import one.mixin.android.util.SensorOrientationChangeNotifier import one.mixin.android.util.SystemUIManager import one.mixin.android.util.VideoPlayer import one.mixin.android.util.reportEvent -import one.mixin.android.util.reportException import one.mixin.android.util.rxpermission.RxPermissions import one.mixin.android.vo.FixedMessageDataSource import one.mixin.android.vo.MediaStatus @@ -152,9 +151,16 @@ class MediaPagerActivity : BaseActivity(), DismissFrameLayout.OnDismissListener, postponeEnterTransition() } super.onCreate(savedInstanceState) + colorDrawable = ColorDrawable(Color.BLACK) + window.setBackgroundDrawable(colorDrawable) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) binding = ActivityMediaPagerBinding.inflate(layoutInflater) setContentView(binding.root) + window.decorView.setOnApplyWindowInsetsListener { view, windowInsets -> + view.setBackgroundColor(Color.BLACK) + windowInsets + } + SystemUIManager.lightUI(window, false) window.sharedElementEnterTransition.duration = SHARED_ELEMENT_TRANSITION_DURATION window.sharedElementExitTransition.duration = SHARED_ELEMENT_TRANSITION_DURATION @@ -164,11 +170,6 @@ class MediaPagerActivity : BaseActivity(), DismissFrameLayout.OnDismissListener, WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES window.attributes = lp } - SystemUIManager.fitsSystem(window) - binding.root.doOnPreDraw { - SystemUIManager.lightUI(window, false) - } - colorDrawable = ColorDrawable(Color.BLACK) binding.viewPager.backgroundDrawable = colorDrawable binding.viewPager.adapter = adapter binding.viewPager.registerOnPageChangeCallback(onPageChangeCallback) diff --git a/app/src/main/java/one/mixin/android/ui/media/pager/transcript/TranscriptMediaPagerActivity.kt b/app/src/main/java/one/mixin/android/ui/media/pager/transcript/TranscriptMediaPagerActivity.kt index 7d20347d25..17e7e9c9ac 100644 --- a/app/src/main/java/one/mixin/android/ui/media/pager/transcript/TranscriptMediaPagerActivity.kt +++ b/app/src/main/java/one/mixin/android/ui/media/pager/transcript/TranscriptMediaPagerActivity.kt @@ -125,9 +125,16 @@ class TranscriptMediaPagerActivity : BaseActivity(), DismissFrameLayout.OnDismis skipSystemUi = true postponeEnterTransition() super.onCreate(savedInstanceState) + colorDrawable = ColorDrawable(Color.BLACK) + window.setBackgroundDrawable(colorDrawable) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) binding = ActivityMediaPagerBinding.inflate(layoutInflater) setContentView(binding.root) + window.decorView.setOnApplyWindowInsetsListener { view, windowInsets -> + view.setBackgroundColor(Color.BLACK) + windowInsets + } + SystemUIManager.lightUI(window, false) window.sharedElementEnterTransition.duration = SHARED_ELEMENT_TRANSITION_DURATION window.sharedElementExitTransition.duration = SHARED_ELEMENT_TRANSITION_DURATION supportsPie { @@ -136,11 +143,9 @@ class TranscriptMediaPagerActivity : BaseActivity(), DismissFrameLayout.OnDismis WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES window.attributes = lp } - SystemUIManager.fitsSystem(window) binding.root.doOnPreDraw { SystemUIManager.lightUI(window, false) } - colorDrawable = ColorDrawable(Color.BLACK) binding.viewPager.backgroundDrawable = colorDrawable binding.viewPager.adapter = adapter binding.viewPager.registerOnPageChangeCallback(onPageChangeCallback) diff --git a/app/src/main/java/one/mixin/android/ui/wallet/MarketShareActivity.kt b/app/src/main/java/one/mixin/android/ui/wallet/MarketShareActivity.kt index 8ebddf26df..24873ded23 100644 --- a/app/src/main/java/one/mixin/android/ui/wallet/MarketShareActivity.kt +++ b/app/src/main/java/one/mixin/android/ui/wallet/MarketShareActivity.kt @@ -81,7 +81,6 @@ class MarketShareActivity : BaseActivity() { View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN ) - window.statusBarColor = android.graphics.Color.TRANSPARENT binding.test.round(8.dp) binding.content.updateLayoutParams { topMargin = 20.dp diff --git a/app/src/main/java/one/mixin/android/ui/web/WebFragment.kt b/app/src/main/java/one/mixin/android/ui/web/WebFragment.kt index 7238ef3989..aa8c9582e2 100644 --- a/app/src/main/java/one/mixin/android/ui/web/WebFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/web/WebFragment.kt @@ -15,7 +15,6 @@ import android.content.pm.ActivityInfo import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Color -import android.graphics.drawable.BitmapDrawable import android.media.MediaScannerConnection import android.net.Uri import android.net.http.SslError @@ -1648,7 +1647,7 @@ class WebFragment : BaseFragment() { requireActivity().window.statusBarColor = color requireActivity().window?.let { - SystemUIManager.setAppearanceLightStatusBars(it, !dark) + SystemUIManager.lightUI(it, !dark) } titleColor = color binding.titleTv.setTextColor(if (dark) Color.WHITE else Color.BLACK) diff --git a/app/src/main/java/one/mixin/android/util/SystemUIManager.kt b/app/src/main/java/one/mixin/android/util/SystemUIManager.kt index 27b7758f92..631d4c3123 100644 --- a/app/src/main/java/one/mixin/android/util/SystemUIManager.kt +++ b/app/src/main/java/one/mixin/android/util/SystemUIManager.kt @@ -1,50 +1,20 @@ package one.mixin.android.util import android.annotation.SuppressLint +import android.graphics.Color import android.view.Window -import androidx.annotation.ColorInt import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat -import one.mixin.android.extension.supportsPie @SuppressLint("InlinedApi") object SystemUIManager { - fun fitsSystem( - window: Window, - @ColorInt color: Int = 0x33000000, - ) { - WindowCompat.setDecorFitsSystemWindows(window, false) - - window.statusBarColor = color - window.navigationBarColor = color - supportsPie { - window.navigationBarDividerColor = color - } - } - - fun clearStyle(window: Window) { - WindowCompat.setDecorFitsSystemWindows(window, true) - } - - fun fullScreen(window: Window) { - WindowCompat.setDecorFitsSystemWindows(window, false) - - WindowCompat.getInsetsController(window, window.decorView).apply { - hide(WindowInsetsCompat.Type.systemBars()) - systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE - } - } - fun lightUI( window: Window, - light: Boolean, + isLight: Boolean, ) { - val controller = WindowCompat.getInsetsController(window, window.decorView) - controller.apply { - isAppearanceLightStatusBars = light - isAppearanceLightNavigationBars = light - } + val windowInsetsControllerCompat = WindowInsetsControllerCompat(window, window.decorView) + windowInsetsControllerCompat.isAppearanceLightStatusBars = isLight } fun hideSystemUI(window: Window) { @@ -61,26 +31,4 @@ object SystemUIManager { show(WindowInsetsCompat.Type.systemBars()) } } - - fun setSystemUiColor( - window: Window, - color: Int, - ) { - window.navigationBarColor = color - window.statusBarColor = color - } - - fun hasCutOut(window: Window): Boolean { - supportsPie { - return window.decorView.rootWindowInsets?.displayCutout?.safeInsetTop != 0 - } - return false - } - - fun setAppearanceLightStatusBars( - window: Window, - isLight: Boolean, - ) { - WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = isLight - } } diff --git a/app/src/main/res/layout/activity_inscription.xml b/app/src/main/res/layout/activity_inscription.xml index 305a4f04d4..ad72b5dcf6 100644 --- a/app/src/main/res/layout/activity_inscription.xml +++ b/app/src/main/res/layout/activity_inscription.xml @@ -2,7 +2,8 @@ + android:layout_height="match_parent" + android:background="#000000"> + android:layout_height="match_parent" + android:background="#000000">