From 4ae35992a1a59277b86588d8df86600c58b320d3 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Fri, 25 Apr 2025 16:56:36 +0800 Subject: [PATCH] compat: auto hide navigation bar also for Android version below 11 (#960) --- .../src/main/java/NativeBridgePlugin.kt | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/main/java/NativeBridgePlugin.kt b/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/main/java/NativeBridgePlugin.kt index 8a6a73bc..889d6b38 100644 --- a/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/main/java/NativeBridgePlugin.kt +++ b/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/main/java/NativeBridgePlugin.kt @@ -11,7 +11,10 @@ import android.view.WindowManager import android.view.WindowInsetsController import android.graphics.Color import android.webkit.WebView +import androidx.core.view.WindowCompat import androidx.core.content.FileProvider +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat import androidx.browser.customtabs.CustomTabsIntent import app.tauri.annotation.Command import app.tauri.annotation.InvokeArg @@ -180,7 +183,8 @@ class NativeBridgePlugin(private val activity: Activity): Plugin(activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { controller.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE } else { - controller.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE + val compatController = WindowCompat.getInsetsController(window, decorView) + compatController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE } if (isDarkMode) { @@ -200,26 +204,24 @@ class NativeBridgePlugin(private val activity: Activity): Plugin(activity) { controller.hide(WindowInsets.Type.systemBars()) } } - window.statusBarColor = Color.TRANSPARENT - window.navigationBarColor = Color.TRANSPARENT } else { - @Suppress("DEPRECATION") - decorView.systemUiVisibility = when { - visible && !isDarkMode -> View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or - View.SYSTEM_UI_FLAG_LAYOUT_STABLE or - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - visible -> View.SYSTEM_UI_FLAG_LAYOUT_STABLE or - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - else -> View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or - View.SYSTEM_UI_FLAG_LAYOUT_STABLE or - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or - View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or - View.SYSTEM_UI_FLAG_FULLSCREEN + val compatController = WindowCompat.getInsetsController(window, decorView) + compatController?.let { + it.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + if (!isDarkMode) { + it.isAppearanceLightStatusBars = true + } else { + it.isAppearanceLightStatusBars = false + } + if (visible) { + it.show(WindowInsetsCompat.Type.statusBars()) + } else { + it.hide(WindowInsetsCompat.Type.systemBars()) + } } - window.statusBarColor = Color.TRANSPARENT - window.navigationBarColor = Color.TRANSPARENT } + window.statusBarColor = Color.TRANSPARENT + window.navigationBarColor = Color.TRANSPARENT ret.put("success", true) } catch (e: Exception) { ret.put("success", false)