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