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 + +