summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorWale Ogunwale <ogunwale@google.com>2020-02-14 13:55:40 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-02-14 13:55:40 +0000
commit711539126fc822f236a920b69844eba49f9ff106 (patch)
tree37bdeeab9252d1665ad2401ea88d2d915d951231 /core/java/android
parentb8144ae516739b80bd217caf34b4e548ce39f16b (diff)
parent288e1bd0455132643cf6e1dc482913f430e56bba (diff)
Merge "Revert "Always get window insets from server""
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/view/WindowManagerImpl.java25
1 files changed, 16 insertions, 9 deletions
diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java
index 3274449b95c8..56683dd9a5d1 100644
--- a/core/java/android/view/WindowManagerImpl.java
+++ b/core/java/android/view/WindowManagerImpl.java
@@ -16,9 +16,6 @@
package android.view;
-import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
-import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
-
import android.annotation.NonNull;
import android.app.ResourcesManager;
import android.compat.annotation.UnsupportedAppUsage;
@@ -70,6 +67,10 @@ public final class WindowManagerImpl implements WindowManager {
private IBinder mDefaultToken;
+ private boolean mIsViewAdded;
+ private View mLastView;
+ private WindowManager.LayoutParams mLastParams;
+
public WindowManagerImpl(Context context) {
this(context, null);
}
@@ -101,6 +102,9 @@ public final class WindowManagerImpl implements WindowManager {
public void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams params) {
applyDefaultToken(params);
mGlobal.addView(view, params, mContext.getDisplay(), mParentWindow);
+ mIsViewAdded = true;
+ mLastView = view;
+ mLastParams = (WindowManager.LayoutParams) params;
}
@Override
@@ -246,15 +250,18 @@ public final class WindowManagerImpl implements WindowManager {
// TODO(window-context): This can only be properly implemented
// once we flip the new insets mode flag.
if (mParentWindow != null) {
+ if (mParentWindow.getDecorView().isAttachedToWindow()) {
+ return mParentWindow.getDecorView().getViewRootImpl()
+ .getWindowInsets(true /* forceConstruct */);
+ }
return getWindowInsetsFromServer(mParentWindow.getAttributes());
}
- return getWindowInsetsFromServer(getDefaultParams());
- }
+ if (mIsViewAdded) {
+ return mLastView.getViewRootImpl().getWindowInsets(true /* forceConstruct */);
+ } else {
+ return getWindowInsetsFromServer(new WindowManager.LayoutParams());
+ }
- private static WindowManager.LayoutParams getDefaultParams() {
- final WindowManager.LayoutParams params = new WindowManager.LayoutParams();
- params.flags = FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR;
- return params;
}
private WindowInsets getWindowInsetsFromServer(WindowManager.LayoutParams attrs) {