diff --git a/app/src/main/java/com/electricdreams/numo/ModernPOSActivity.kt b/app/src/main/java/com/electricdreams/numo/ModernPOSActivity.kt index 863137bf..619de345 100644 --- a/app/src/main/java/com/electricdreams/numo/ModernPOSActivity.kt +++ b/app/src/main/java/com/electricdreams/numo/ModernPOSActivity.kt @@ -93,19 +93,26 @@ class ModernPOSActivity : AppCompatActivity(), SatocashWallet.OperationFeedback, // Use the same resolved background color as ThemeManager so the // ModernPOS window background matches the active theme selection // (obsidian, green, bitcoin orange, white, etc.). This ensures the - // navigation pill always floats above the correct themed background - // instead of a hardcoded "green". + // navigation bar always matches the current theme. val bgColor = com.electricdreams.numo.ui.theme.ThemeManager.resolveBackgroundColor(this) window.setBackgroundDrawable(android.graphics.drawable.ColorDrawable(bgColor)) - window.statusBarColor = android.graphics.Color.TRANSPARENT - window.navigationBarColor = android.graphics.Color.TRANSPARENT + // Set both status bar and navigation bar to match the theme background. + // Note: We use the actual color instead of TRANSPARENT because some devices + // (like Sunmi POS terminals) don't properly support transparent system bars + // and will show a system default color instead. + window.statusBarColor = bgColor + window.navigationBarColor = bgColor + + // Determine if this is a light theme (white) to set appropriate icon colors + val prefs = getSharedPreferences("app_prefs", MODE_PRIVATE) + val theme = prefs.getString("app_theme", "green") ?: "green" + val isLightTheme = (theme == "white") WindowInsetsControllerCompat(window, window.decorView).apply { - // For the dark themes we keep icons light; for white theme the - // ThemeManager will already have set light/dark appropriately. - isAppearanceLightStatusBars = false - isAppearanceLightNavigationBars = false + // Light icons for dark themes, dark icons for white theme + isAppearanceLightStatusBars = isLightTheme + isAppearanceLightNavigationBars = isLightTheme } ViewCompat.setOnApplyWindowInsetsListener(findViewById(android.R.id.content)) { v, windowInsets -> diff --git a/app/src/main/java/com/electricdreams/numo/PaymentFailureActivity.kt b/app/src/main/java/com/electricdreams/numo/PaymentFailureActivity.kt index 4fe6a40f..fe7b0407 100644 --- a/app/src/main/java/com/electricdreams/numo/PaymentFailureActivity.kt +++ b/app/src/main/java/com/electricdreams/numo/PaymentFailureActivity.kt @@ -48,8 +48,12 @@ class PaymentFailureActivity : AppCompatActivity() { // Enable edge-to-edge, mirroring PaymentReceivedActivity WindowCompat.setDecorFitsSystemWindows(window, false) - window.statusBarColor = android.graphics.Color.TRANSPARENT - window.navigationBarColor = android.graphics.Color.TRANSPARENT + + // Use solid white for both status and navigation bars. + // Note: TRANSPARENT doesn't work well on some devices (like Sunmi POS terminals). + val bgColor = android.graphics.Color.WHITE + window.statusBarColor = bgColor + window.navigationBarColor = bgColor val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) windowInsetsController.isAppearanceLightStatusBars = true diff --git a/app/src/main/java/com/electricdreams/numo/PaymentReceivedActivity.kt b/app/src/main/java/com/electricdreams/numo/PaymentReceivedActivity.kt index 7d2c91f8..7ea9c9a0 100644 --- a/app/src/main/java/com/electricdreams/numo/PaymentReceivedActivity.kt +++ b/app/src/main/java/com/electricdreams/numo/PaymentReceivedActivity.kt @@ -49,8 +49,12 @@ class PaymentReceivedActivity : AppCompatActivity() { // Enable edge-to-edge WindowCompat.setDecorFitsSystemWindows(window, false) - window.statusBarColor = android.graphics.Color.TRANSPARENT - window.navigationBarColor = android.graphics.Color.TRANSPARENT + + // Use solid white for both status and navigation bars. + // Note: TRANSPARENT doesn't work well on some devices (like Sunmi POS terminals). + val bgColor = android.graphics.Color.WHITE + window.statusBarColor = bgColor + window.navigationBarColor = bgColor // Set light status bar icons (since background is white) val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) diff --git a/app/src/main/java/com/electricdreams/numo/feature/MultiInsetEdgeToEdge.kt b/app/src/main/java/com/electricdreams/numo/feature/MultiInsetEdgeToEdge.kt index 5f34d796..25ea749c 100644 --- a/app/src/main/java/com/electricdreams/numo/feature/MultiInsetEdgeToEdge.kt +++ b/app/src/main/java/com/electricdreams/numo/feature/MultiInsetEdgeToEdge.kt @@ -15,13 +15,23 @@ import androidx.core.view.WindowInsetsControllerCompat * Usage from an Activity: * * enableEdgeToEdgeWithPill(this) + * enableEdgeToEdgeWithPill(this, backgroundColor = Color.WHITE) + * + * @param backgroundColor The background color to use for status and navigation bars. + * Defaults to WHITE. Note: We use solid colors instead of TRANSPARENT + * because some devices (like Sunmi POS terminals) don't properly + * support transparent system bars. */ -fun enableEdgeToEdgeWithPill(activity: Activity, lightNavIcons: Boolean = true) { +fun enableEdgeToEdgeWithPill( + activity: Activity, + lightNavIcons: Boolean = true, + backgroundColor: Int = Color.WHITE +) { val window = activity.window WindowCompat.setDecorFitsSystemWindows(window, false) - window.statusBarColor = Color.TRANSPARENT - window.navigationBarColor = Color.TRANSPARENT + window.statusBarColor = backgroundColor + window.navigationBarColor = backgroundColor val controller = WindowInsetsControllerCompat(window, window.decorView) controller.isAppearanceLightStatusBars = lightNavIcons diff --git a/app/src/main/java/com/electricdreams/numo/feature/settings/WithdrawSuccessActivity.kt b/app/src/main/java/com/electricdreams/numo/feature/settings/WithdrawSuccessActivity.kt index c7fdebb6..4d38423d 100644 --- a/app/src/main/java/com/electricdreams/numo/feature/settings/WithdrawSuccessActivity.kt +++ b/app/src/main/java/com/electricdreams/numo/feature/settings/WithdrawSuccessActivity.kt @@ -32,8 +32,12 @@ class WithdrawSuccessActivity : AppCompatActivity() { // Enable edge-to-edge WindowCompat.setDecorFitsSystemWindows(window, false) - window.statusBarColor = android.graphics.Color.TRANSPARENT - window.navigationBarColor = android.graphics.Color.TRANSPARENT + + // Use solid white for both status and navigation bars. + // Note: TRANSPARENT doesn't work well on some devices (like Sunmi POS terminals). + val bgColor = android.graphics.Color.WHITE + window.statusBarColor = bgColor + window.navigationBarColor = bgColor // Set light status bar icons (since background is white) val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) diff --git a/app/src/main/java/com/electricdreams/numo/feature/tips/TipSelectionActivity.kt b/app/src/main/java/com/electricdreams/numo/feature/tips/TipSelectionActivity.kt index 72bf81f3..1487fa39 100644 --- a/app/src/main/java/com/electricdreams/numo/feature/tips/TipSelectionActivity.kt +++ b/app/src/main/java/com/electricdreams/numo/feature/tips/TipSelectionActivity.kt @@ -104,8 +104,12 @@ class TipSelectionActivity : AppCompatActivity() { private fun setupWindowSettings() { WindowCompat.setDecorFitsSystemWindows(window, false) - window.statusBarColor = Color.TRANSPARENT - window.navigationBarColor = Color.TRANSPARENT + + // Use solid white for both status and navigation bars. + // Note: TRANSPARENT doesn't work well on some devices (like Sunmi POS terminals). + val bgColor = Color.WHITE + window.statusBarColor = bgColor + window.navigationBarColor = bgColor // Light status bar (dark icons) since we have white background WindowInsetsControllerCompat(window, window.decorView).apply { diff --git a/app/src/main/java/com/electricdreams/numo/ui/theme/ThemeManager.kt b/app/src/main/java/com/electricdreams/numo/ui/theme/ThemeManager.kt index 950d1608..102d9774 100644 --- a/app/src/main/java/com/electricdreams/numo/ui/theme/ThemeManager.kt +++ b/app/src/main/java/com/electricdreams/numo/ui/theme/ThemeManager.kt @@ -74,10 +74,11 @@ class ThemeManager( // Update status bar and navigation bar colors activity.window.statusBarColor = backgroundColor - // Let the system navigation bar be fully transparent so the gesture pill - // floats above whatever content/background we're drawing, instead of - // sitting on a solid-colored nav bar. - activity.window.navigationBarColor = android.graphics.Color.TRANSPARENT + // Set navigation bar to match the theme background color. + // Note: We use the actual color instead of TRANSPARENT because some devices + // (like Sunmi POS terminals) don't properly support transparent navigation + // bars and will show a system default color instead. + activity.window.navigationBarColor = backgroundColor // Update status bar appearance based on theme val windowInsetsController = WindowInsetsControllerCompat(activity.window, activity.window.decorView) diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 30d64440..b4d50f96 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -13,9 +13,9 @@ @color/dark_windowBackground false - - - @android:color/transparent + + @color/dark_windowBackground false @color/dark_textColorPrimary diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 5b101544..643c5cee 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -13,9 +13,9 @@ @color/color_bg_white true - - - @android:color/transparent + + @color/color_bg_white true @color/color_text_primary