summaryrefslogtreecommitdiff
path: root/core/java/android/inputmethodservice/InputMethodService.java
diff options
context:
space:
mode:
authorTiger Huang <tigerhuang@google.com>2020-09-18 02:24:27 +0800
committerTiger Huang <tigerhuang@google.com>2020-09-23 01:13:54 +0800
commit3cd311415ba00d5d75660a8607d1ece5e68f0534 (patch)
tree3992a25664ca45304ffc92d80c890135f47469cc /core/java/android/inputmethodservice/InputMethodService.java
parent8b9d40586b2ca36a94460775a6cd6b0034b8855d (diff)
Don't let IME window fit status bar
1. So that the IME position won't be affected by the status bar position. 2. When status bar is hidden, the fullscreen IME can fill the status bar area. Since IME can be behind status bar now, we set the status bar color to be transparent, so that there won't be a visible color view at the status bar area. Fix: 168657591 Test: 1. Steps in the bug. 2. Play WindowInsetsTests with combinations of system bar visibilities, navigation mode, screen orientation, and display cutout. 3. Show/hide status bar while IME is visible, and see if there is any flicker. Change-Id: Ia133a62cfa98c47c0d3f8d118947a18246dd8d4f
Diffstat (limited to 'core/java/android/inputmethodservice/InputMethodService.java')
-rw-r--r--core/java/android/inputmethodservice/InputMethodService.java26
1 files changed, 11 insertions, 15 deletions
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 4f0c84e586a2..e0195e4eafc1 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -16,11 +16,11 @@
package android.inputmethodservice;
+import static android.graphics.Color.TRANSPARENT;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static android.view.ViewRootImpl.NEW_INSETS_MODE_NONE;
import static android.view.WindowInsets.Type.navigationBars;
-import static android.view.WindowInsets.Type.statusBars;
import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
import static java.lang.annotation.RetentionPolicy.SOURCE;
@@ -69,7 +69,6 @@ import android.view.ViewGroup;
import android.view.ViewRootImpl;
import android.view.ViewTreeObserver;
import android.view.Window;
-import android.view.WindowInsets;
import android.view.WindowInsets.Side;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
@@ -1203,25 +1202,22 @@ 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);
- mWindow.getWindow().getAttributes().setFitInsetsTypes(statusBars() | navigationBars());
+ mWindow.getWindow().getAttributes().setFitInsetsTypes(navigationBars());
mWindow.getWindow().getAttributes().setFitInsetsSides(Side.all() & ~Side.BOTTOM);
mWindow.getWindow().getAttributes().setFitInsetsIgnoringVisibility(true);
- // IME layout should always be inset by navigation bar, no matter its current visibility,
- // unless automotive requests it. Automotive devices may request the navigation bar to be
- // hidden when the IME shows up (controlled via config_automotiveHideNavBarForKeyboard)
- // in order to maximize the visible screen real estate. When this happens, the IME window
- // should animate from the bottom of the screen to reduce the jank that happens from the
- // lack of synchronization between the bottom system window and the IME window.
+ // Our window will extend into the status bar area no matter the bar is visible or not.
+ // We don't want the ColorView to be visible when status bar is shown.
+ mWindow.getWindow().setStatusBarColor(TRANSPARENT);
+
+ // Automotive devices may request the navigation bar to be hidden when the IME shows up
+ // (controlled via config_automotiveHideNavBarForKeyboard) in order to maximize the visible
+ // screen real estate. When this happens, the IME window should animate from the bottom of
+ // the screen to reduce the jank that happens from the lack of synchronization between the
+ // bottom system window and the IME window.
if (mIsAutomotive && mAutomotiveHideNavBarForKeyboard) {
mWindow.getWindow().setDecorFitsSystemWindows(false);
}
- mWindow.getWindow().getDecorView().setOnApplyWindowInsetsListener(
- (v, insets) -> v.onApplyWindowInsets(
- new WindowInsets.Builder(insets).setInsets(
- navigationBars(),
- insets.getInsetsIgnoringVisibility(navigationBars()))
- .build()));
// 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).