Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
index 162d1fa3d260bacf4d5b0edd52bc7e306bf99bb9..c4adf509e3ea95b487f473471618826161d6fa0f 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
@@ -205,6 +205,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
private ActivityWindowAndroid mWindowAndroid; |
private ChromeFullscreenManager mFullscreenManager; |
private CompositorViewHolder mCompositorViewHolder; |
+ private InsetObserverView mInsetObserverView; |
private ContextualSearchManager mContextualSearchManager; |
private ReaderModeManager mReaderModeManager; |
private SnackbarManager mSnackbarManager; |
@@ -352,8 +353,18 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
// black status bar |
ApiCompatibilityUtils.setStatusBarColor(getWindow(), Color.BLACK); |
+ ViewGroup rootView = (ViewGroup) getWindow().getDecorView().getRootView(); |
mCompositorViewHolder = (CompositorViewHolder) findViewById(R.id.compositor_view_holder); |
- mCompositorViewHolder.setRootView(getWindow().getDecorView().getRootView()); |
+ mCompositorViewHolder.setRootView(rootView); |
+ |
+ // Setting fitsSystemWindows to false ensures that the root view doesn't consume the insets. |
+ rootView.setFitsSystemWindows(false); |
+ |
+ // Add a custom view right after the root view that stores the insets to access later. |
+ // ContentViewCore needs the insets to determine the portion of the screen obscured by |
+ // non-content displaying things such as the OSK. |
+ mInsetObserverView = InsetObserverView.create(this); |
+ rootView.addView(mInsetObserverView, 0); |
} |
/** |
@@ -1059,6 +1070,15 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
return mTabModelSelector; |
} |
+ /** |
+ * Returns the {@link InsetObserverView} that has the current system window |
+ * insets information. |
+ * @return The {@link InsetObserverView}, possibly null. |
+ */ |
+ public InsetObserverView getInsetObserverView() { |
+ return mInsetObserverView; |
+ } |
+ |
@Override |
public TabCreatorManager.TabCreator getTabCreator(boolean incognito) { |
return incognito ? mIncognitoTabCreator : mRegularTabCreator; |