summaryrefslogtreecommitdiff
path: root/core/java/android/inputmethodservice/InputMethodService.java
diff options
context:
space:
mode:
authorYohei Yukawa <yukawa@google.com>2018-01-10 13:18:09 -0800
committerYohei Yukawa <yukawa@google.com>2018-01-10 13:18:09 -0800
commit8f162c6e846ac99d6aac4473d7903722e9d6e54b (patch)
tree2e35a9b61e16386b2ea2fd3265bc39786d755ea4 /core/java/android/inputmethodservice/InputMethodService.java
parent5fd1c97e34e54cd74c304cacf5c3ccdaaa7a7e13 (diff)
DecorView#mNavigationGuard is gone
With this CL, DecorView#mNavigationGuard that handles navigation bar only for IME windows [1] is finally gone and replaced with the standard mechanism to handle navigation bar layout padding / background color. This CL addresses multiple anomalies regarding how the following APIs work for IME windows. * Window#setNavigationBarColor() * Previous behavior: - Only works for Color#TRANSPARENT [2]. - Ignores FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS. * New behavior: - Works as documented. - Requires FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS to work. * SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION flag * Previous behavior: - The system automatically sets SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION to the IME windows [3]. - Does not work as documented. Content area is not extended to the navigation bar area. - Manually unsetting SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION can cause unexpected layout, because the system expects that this flag is always set to the IME window. - Had a special logic for FLAG_LAYOUT_IN_OVERSCAN [4]. * New behavior: - Works as documented. - Can set/unset as necessary. From the viewpoint of IME developers, this CL enables IME windows to * correctly extend the input view to the navigation bar region by using SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION as documented, instead of relying on a special hack with FLAG_LAYOUT_IN_OVERSCAN hack. * use Window#setNavigationBarColor() to easily change the navigation bar background color, like other non-floating windows. Note that SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR is not yet supported for IME windows, which will be implemented in a subsequent CL. [1]: I6a93f30aec83f1cecfb854073046cbc87ab4aa66 ae3349e1c34f7aceddc526cd11d9ac44951e97b6 [2]: Iea77915ecc55eedaf19899e72c44f704ba9d852c 0a9d1ea015af24056018ec02f6d9afd2f62243ba [3]: I460912ee7c117480c57b947ed31eca330819f32c c68d577f29604d205573ee4253704c5b2c5e4f81 [4]: Ic38f204a892bf34e8dae65990d5aa8c95af555d8 9b32a35aa7d47d39da919e777e2fe271cc83fa1c [5]: I4b10a19641bd3ce6c43e7629404b6f202d4186e8 Fix: 25706186 Bug: 69002467 Test: ThemedNavBarKeyboard sample [5] works for the following cases * Extended Dark Navigation Bar * Separate Dark Navigation Bar * Floating Mode (if the target app uses dark navigation bar) Change-Id: I664630099b6eb3fe31675444ba94944cb0eb98b0
Diffstat (limited to 'core/java/android/inputmethodservice/InputMethodService.java')
-rw-r--r--core/java/android/inputmethodservice/InputMethodService.java8
1 files changed, 6 insertions, 2 deletions
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 02b1c658b2ec..8937490091d0 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -18,6 +18,7 @@ package android.inputmethodservice;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
import android.annotation.CallSuper;
import android.annotation.DrawableRes;
@@ -852,6 +853,11 @@ public class InputMethodService extends AbstractInputMethodService {
Context.LAYOUT_INFLATER_SERVICE);
mWindow = new SoftInputWindow(this, "InputMethod", mTheme, null, null, mDispatcherState,
WindowManager.LayoutParams.TYPE_INPUT_METHOD, Gravity.BOTTOM, false);
+ // For ColorView in DecorView to work, FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS needs to be set
+ // by default (but IME developers can opt this out later if they want a new behavior).
+ mWindow.getWindow().setFlags(
+ FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+
initViews();
mWindow.getWindow().setLayout(MATCH_PARENT, WRAP_CONTENT);
}
@@ -882,8 +888,6 @@ public class InputMethodService extends AbstractInputMethodService {
mThemeAttrs = obtainStyledAttributes(android.R.styleable.InputMethodService);
mRootView = mInflater.inflate(
com.android.internal.R.layout.input_method, null);
- mRootView.setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
mWindow.setContentView(mRootView);
mRootView.getViewTreeObserver().removeOnComputeInternalInsetsListener(mInsetsComputer);
mRootView.getViewTreeObserver().addOnComputeInternalInsetsListener(mInsetsComputer);