diff options
| author | Wale Ogunwale <ogunwale@google.com> | 2020-02-14 13:55:40 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-02-14 13:55:40 +0000 |
| commit | 711539126fc822f236a920b69844eba49f9ff106 (patch) | |
| tree | 37bdeeab9252d1665ad2401ea88d2d915d951231 /core/java/android | |
| parent | b8144ae516739b80bd217caf34b4e548ce39f16b (diff) | |
| parent | 288e1bd0455132643cf6e1dc482913f430e56bba (diff) | |
Merge "Revert "Always get window insets from server""
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/WindowManagerImpl.java | 25 |
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) { |
