diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/UiHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/UiHandler.java
index fd37faff..b5799f32 100644
--- a/app/src/main/java/io/github/sspanak/tt9/ime/UiHandler.java
+++ b/app/src/main/java/io/github/sspanak/tt9/ime/UiHandler.java
@@ -10,6 +10,7 @@ import io.github.sspanak.tt9.ime.modes.InputModeKind;
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
import io.github.sspanak.tt9.ui.main.ResizableMainView;
import io.github.sspanak.tt9.ui.tray.StatusBar;
+import io.github.sspanak.tt9.util.SystemSettings;
abstract class UiHandler extends AbstractHandler {
protected SettingsStore settings;
@@ -44,6 +45,7 @@ abstract class UiHandler extends AbstractHandler {
statusBar.setText(inputMode);
mainView.hideCommandPalette();
mainView.render();
+ SystemSettings.setNavigationBarDarkTheme(getWindow().getWindow(), settings.getDarkTheme());
if (!isInputViewShown()) {
updateInputViewShown();
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/BaseMainLayout.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/BaseMainLayout.java
index abb30d34..ed4742f2 100644
--- a/app/src/main/java/io/github/sspanak/tt9/ui/main/BaseMainLayout.java
+++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/BaseMainLayout.java
@@ -1,5 +1,6 @@
package io.github.sspanak.tt9.ui.main;
+import android.graphics.Color;
import android.graphics.Insets;
import android.os.Build;
import android.view.ContextThemeWrapper;
@@ -238,6 +239,45 @@ abstract class BaseMainLayout {
}
+ private boolean shouldEnableBackgroundBlending() {
+ if (view == null || tt9 == null) {
+ return true;
+ }
+
+ boolean isLandscape = DeviceInfo.isLandscapeOrientation(view.getContext());
+ int width = tt9.getSettings().getWidthPercent();
+
+ return
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM
+ && ((isLandscape && width >= 75) || (!isLandscape && width >= 65));
+ }
+
+
+ protected void setBackgroundBlending() {
+ if (view == null) {
+ return;
+ }
+
+ boolean yes = shouldEnableBackgroundBlending();
+
+ view.setBackgroundColor(
+ yes ? view.getContext().getResources().getColor(R.color.keyboard_background) : Color.TRANSPARENT
+ );
+
+ final int separatorVisibility = yes ? View.VISIBLE : View.GONE;
+
+ View leftBumperTopSeparator = view.findViewById(R.id.bumper_left_top_separator);
+ if (leftBumperTopSeparator != null) {
+ leftBumperTopSeparator.setVisibility(separatorVisibility);
+ }
+
+ View rightBumperTopSeparator = view.findViewById(R.id.bumper_right_top_separator);
+ if (rightBumperTopSeparator != null) {
+ rightBumperTopSeparator.setVisibility(separatorVisibility);
+ }
+ }
+
+
abstract void showCommandPalette();
abstract void hideCommandPalette();
abstract boolean isCommandPaletteShown();
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java
index cdb3e9f2..182facc0 100644
--- a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java
+++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java
@@ -276,6 +276,7 @@ class MainLayoutNumpad extends BaseMainLayout {
preventEdgeToEdge();
setWidth(tt9.getSettings().getWidthPercent(), tt9.getSettings().getAlignment());
setKeyColumnWidth(tt9.getSettings().getNumpadFnKeyScale());
+ setBackgroundBlending();
showLongSpace(
tt9.getSettings().isNumpadShapeLongSpace() && !tt9.isInputModeNumeric() && !LanguageKind.isKorean(tt9.getLanguage()),
defaultKeyHeight
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutTray.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutTray.java
index 39002707..974bd36b 100644
--- a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutTray.java
+++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutTray.java
@@ -88,6 +88,7 @@ class MainLayoutTray extends BaseMainLayout {
setSoftKeysVisibility();
preventEdgeToEdge();
setWidth(tt9.getSettings().getWidthPercent(), tt9.getSettings().getAlignment());
+ setBackgroundBlending();
enableClickHandlers();
for (SoftKey key : getKeys()) {
key.render();
diff --git a/app/src/main/java/io/github/sspanak/tt9/util/SystemSettings.java b/app/src/main/java/io/github/sspanak/tt9/util/SystemSettings.java
index 36bef94c..5e20d790 100644
--- a/app/src/main/java/io/github/sspanak/tt9/util/SystemSettings.java
+++ b/app/src/main/java/io/github/sspanak/tt9/util/SystemSettings.java
@@ -4,6 +4,8 @@ import android.content.Context;
import android.os.Build;
import android.os.LocaleList;
import android.provider.Settings;
+import android.view.Window;
+import android.view.WindowInsetsController;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
@@ -68,4 +70,25 @@ public class SystemSettings {
return null;
}
+
+ /**
+ * Even though the background changes automatically on Android 15, thanks to edge-to-edge,
+ * the text/icon color remains the device default. This function allows us to change it.
+ * @see : the only working solution.
+ */
+ public static void setNavigationBarDarkTheme(@Nullable Window window, boolean dark) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
+ return;
+ }
+
+ WindowInsetsController insetsController = window != null ? window.getInsetsController() : null;
+ if (insetsController == null) {
+ return;
+ }
+
+ insetsController.setSystemBarsAppearance(
+ dark ? 0 : WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS,
+ WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
+ );
+ }
}
diff --git a/app/src/main/res/layout/main_numpad.xml b/app/src/main/res/layout/main_numpad.xml
index 21f4fe2c..2d2e767d 100644
--- a/app/src/main/res/layout/main_numpad.xml
+++ b/app/src/main/res/layout/main_numpad.xml
@@ -3,7 +3,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/TTheme.FullScreenContainer">
-
+
+
+
@@ -27,6 +29,8 @@
-
+
+
+
diff --git a/app/src/main/res/layout/main_small.xml b/app/src/main/res/layout/main_small.xml
index 5c915574..9d0ae0c3 100644
--- a/app/src/main/res/layout/main_small.xml
+++ b/app/src/main/res/layout/main_small.xml
@@ -3,7 +3,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/TTheme.FullScreenContainer">
-
+
+
+
@@ -21,6 +23,8 @@
android:visibility="gone" />
-
+
+
+
diff --git a/app/src/main/res/values-land/dimens.xml b/app/src/main/res/values-land/dimens.xml
index ed1a2805..9d0a0cc6 100644
--- a/app/src/main/res/values-land/dimens.xml
+++ b/app/src/main/res/values-land/dimens.xml
@@ -1,4 +1,5 @@
+
720dp
diff --git a/app/src/main/res/values-v35/colors.xml b/app/src/main/res/values-v35/colors.xml
index 611b1107..34deb4cd 100644
--- a/app/src/main/res/values-v35/colors.xml
+++ b/app/src/main/res/values-v35/colors.xml
@@ -1,5 +1,8 @@
+ @color/keyboard_background
+ @color/keyboard_top_separator
+
@color/key_fn_background
@color/key_fn_ripple
@color/key_fn_text
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 7626fd94..c5a4577e 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -10,6 +10,8 @@
#e8eaed
#3d3d3f
@color/key_fn_background
+ #00000000
+ #00000000
#fff
#eff0f1
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 12eae4c0..7f554665 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -11,6 +11,7 @@
- wrap_content
- ltr
- horizontal
+ - @color/keyboard_wrapper_background
+
+