From 6ae09365a56ad87357a01a122de76d77281a97df Mon Sep 17 00:00:00 2001 From: Ming-Shin Lu Date: Fri, 28 May 2021 09:39:44 +0800 Subject: [PATCH] Fix Keyboard Theme update when device orientation changed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As CL[1] introduces diplayContext to address IME service context's Resources / DisplayMetrics update when switching IME window to another display after onConfigurationChange. In LatinIME#onInitializeInterface, we only update keyboard theme context and displayContent when the displayId is changed, but overlooked even the displayId is the same, the display context's resource configuration might changed like the device orientation changd. It leads getDefaultKeyboardHeight will get wrong config_max_keyboard_height fraction value when rotating to landcape because the context resources didn't get updated. Add a check to update keyboard theme context when the current display configuation is changed accordingly. [1]: I0ed6a079af1ed90c75fee1d36d5ce3ef3c41f8ed Fix: 186507147 Test: manual as issue steps 1) Turn on auto-rotate 2) Open Settings 3) Rotating the device to landscape mode 4) Tap “Search settings", verify if the soft-keyboard shown and the size is expected. Change-Id: I288a31baf04fa2e63d6b4a14ad81b401cb36ece5 Merged-In: I288a31baf04fa2e63d6b4a14ad81b401cb36ece5 --- java/src/com/android/inputmethod/latin/LatinIME.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 737bd0d3e..a99f0b48c 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -803,7 +803,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // create new display context and re-init keyboard layout with this context. final WindowManager wm = getSystemService(WindowManager.class); final int newDisplayId = wm.getDefaultDisplay().getDisplayId(); - if (mCurDisplayId != newDisplayId) { + if (mCurDisplayId != newDisplayId || !mDisplayContext.getResources().getConfiguration() + .equals(getResources().getConfiguration())) { mCurDisplayId = newDisplayId; mDisplayContext = createDisplayContext(wm.getDefaultDisplay()); mKeyboardSwitcher.updateKeyboardTheme(mDisplayContext);