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..002717d4017cbaf4b92c992fa8ecf6a01db6de0c 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 InsetConsumerView mInsetConsumerView; |
private ContextualSearchManager mContextualSearchManager; |
private ReaderModeManager mReaderModeManager; |
private SnackbarManager mSnackbarManager; |
@@ -354,6 +355,26 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
mCompositorViewHolder = (CompositorViewHolder) findViewById(R.id.compositor_view_holder); |
mCompositorViewHolder.setRootView(getWindow().getDecorView().getRootView()); |
+ |
+ // Add a custom view right after the root view that consumes the insets |
+ // and stores it to access later. ContentViewCore needs the insets to |
+ // determine the portion of the screen obscured by non-content |
Ted C
2016/03/12 00:01:43
I don't really like mucking with the view hierarch
ymalik
2016/03/14 22:19:01
Done.
|
+ // displaying things such as the OSK. |
+ ViewGroup rootView = (ViewGroup) getWindow().getDecorView().getRootView(); |
Ted C
2016/03/12 00:01:43
this is also needed above in setRootView, so let's
ymalik
2016/03/14 22:19:01
Done.
|
+ // Setting fitsSystemWindows to false ensures that the root view |
+ // doesn't consume the insets. |
+ rootView.setFitsSystemWindows(false); |
Ted C
2016/03/12 00:01:43
this didn't seem necessary in my prototyping
ymalik
2016/03/14 22:19:01
I had this in case the compat lib was ever changed
|
+ // Transfer child view hierarchy to InsetConsumerView. This is needed to |
+ // ensure that the insets are applied properly. |
+ InsetConsumerView insetConsumerView = new InsetConsumerView(this); |
+ insetConsumerView.setFitsSystemWindows(true); |
Ted C
2016/03/12 00:01:44
move this to the constructor
ymalik
2016/03/14 22:19:01
I don't think we need this with the sibling approa
|
+ while (rootView.getChildCount() > 0) { |
+ View currentChild = rootView.getChildAt(0); |
+ rootView.removeView(currentChild); |
+ insetConsumerView.addView(currentChild); |
+ } |
+ rootView.addView(insetConsumerView); |
+ mInsetConsumerView = insetConsumerView; |
} |
/** |
@@ -1059,6 +1080,15 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
return mTabModelSelector; |
} |
+ /** |
+ * Returns the {@link InsetConsumerView} that has the current system window |
+ * insets information. |
+ * @return The {@link InsetConsumerView}, possibly null. |
+ */ |
+ public InsetConsumerView getInsetConsumerView() { |
+ return mInsetConsumerView; |
+ } |
+ |
@Override |
public TabCreatorManager.TabCreator getTabCreator(boolean incognito) { |
return incognito ? mIncognitoTabCreator : mRegularTabCreator; |