Loading services/core/java/com/android/server/wm/InsetsSourceProvider.java +26 −17 Original line number Diff line number Diff line Loading @@ -81,8 +81,8 @@ class InsetsSourceProvider { private boolean mIsLeashReadyForDispatching; private final Rect mSourceFrame = new Rect(); private final Rect mLastSourceFrame = new Rect(); private final Rect mLastContainerBounds = new Rect(); private @NonNull Insets mInsetsHint = Insets.NONE; private boolean mInsetsHintStale = true; private @Flags int mFlagsFromFrameProvider; private @Flags int mFlagsFromServer; Loading Loading @@ -238,6 +238,10 @@ class InsetsSourceProvider { mSource.setFlags(mFlagsFromFrameProvider | mFlagsFromServer); } updateSourceFrameForServerVisibility(); if (!mLastSourceFrame.equals(mSourceFrame)) { mLastSourceFrame.set(mSourceFrame); mInsetsHintStale = true; } if (mOverrideFrameProviders != null) { // Not necessary to clear the mOverrideFrames here. It will be cleared every time the Loading Loading @@ -279,28 +283,29 @@ class InsetsSourceProvider { // visible. (i.e. No surface, pending insets that were given during layout, etc..) if (mServerVisible) { mSource.setFrame(mSourceFrame); updateInsetsHint(); } else { mSource.setFrame(0, 0, 0, 0); } } // To be called when mSourceFrame or the window container bounds is changed. private void updateInsetsHint() { if (!mControllable || !mServerVisible) { return; } final Rect bounds = mWindowContainer.getBounds(); if (mSourceFrame.equals(mLastSourceFrame) && bounds.equals(mLastContainerBounds)) { return; } mLastSourceFrame.set(mSourceFrame); mLastContainerBounds.set(bounds); mInsetsHint = mSource.calculateInsets(bounds, true /* ignoreVisibility */); void onWindowContainerBoundsChanged() { mInsetsHintStale = true; } @VisibleForTesting Insets getInsetsHint() { if (!mServerVisible) { return mInsetsHint; } final WindowState win = mWindowContainer.asWindowState(); if (win != null && win.mGivenInsetsPending) { return mInsetsHint; } if (mInsetsHintStale) { final Rect bounds = mWindowContainer.getBounds(); mInsetsHint = mSource.calculateInsets(bounds, true /* ignoreVisibility */); mInsetsHintStale = false; } return mInsetsHint; } Loading Loading @@ -359,8 +364,9 @@ class InsetsSourceProvider { mSetLeashPositionConsumer.accept(t); } } if (!mControl.getInsetsHint().equals(mInsetsHint)) { mControl.setInsetsHint(mInsetsHint); final Insets insetsHint = getInsetsHint(); if (!mControl.getInsetsHint().equals(insetsHint)) { mControl.setInsetsHint(insetsHint); changed = true; } if (changed) { Loading Loading @@ -494,7 +500,7 @@ class InsetsSourceProvider { mControlTarget = target; updateVisibility(); mControl = new InsetsSourceControl(mSource.getId(), mSource.getType(), leash, mClientVisible, surfacePosition, mInsetsHint); mClientVisible, surfacePosition, getInsetsHint()); ProtoLog.d(WM_DEBUG_WINDOW_INSETS, "InsetsSource Control %s for target %s", mControl, mControlTarget); Loading Loading @@ -605,6 +611,9 @@ class InsetsSourceProvider { if (mControllable) { pw.print(prefix + "mInsetsHint="); pw.print(mInsetsHint); if (mInsetsHintStale) { pw.print(" stale"); } pw.println(); } pw.print(prefix); Loading services/core/java/com/android/server/wm/WindowContainer.java +6 −0 Original line number Diff line number Diff line Loading @@ -1143,6 +1143,9 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< } void onResize() { if (mControllableInsetProvider != null) { mControllableInsetProvider.onWindowContainerBoundsChanged(); } for (int i = mChildren.size() - 1; i >= 0; --i) { final WindowContainer wc = mChildren.get(i); wc.onParentResize(); Loading @@ -1162,6 +1165,9 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< } void onMovedByResize() { if (mControllableInsetProvider != null) { mControllableInsetProvider.onWindowContainerBoundsChanged(); } for (int i = mChildren.size() - 1; i >= 0; --i) { final WindowContainer wc = mChildren.get(i); wc.onMovedByResize(); Loading Loading
services/core/java/com/android/server/wm/InsetsSourceProvider.java +26 −17 Original line number Diff line number Diff line Loading @@ -81,8 +81,8 @@ class InsetsSourceProvider { private boolean mIsLeashReadyForDispatching; private final Rect mSourceFrame = new Rect(); private final Rect mLastSourceFrame = new Rect(); private final Rect mLastContainerBounds = new Rect(); private @NonNull Insets mInsetsHint = Insets.NONE; private boolean mInsetsHintStale = true; private @Flags int mFlagsFromFrameProvider; private @Flags int mFlagsFromServer; Loading Loading @@ -238,6 +238,10 @@ class InsetsSourceProvider { mSource.setFlags(mFlagsFromFrameProvider | mFlagsFromServer); } updateSourceFrameForServerVisibility(); if (!mLastSourceFrame.equals(mSourceFrame)) { mLastSourceFrame.set(mSourceFrame); mInsetsHintStale = true; } if (mOverrideFrameProviders != null) { // Not necessary to clear the mOverrideFrames here. It will be cleared every time the Loading Loading @@ -279,28 +283,29 @@ class InsetsSourceProvider { // visible. (i.e. No surface, pending insets that were given during layout, etc..) if (mServerVisible) { mSource.setFrame(mSourceFrame); updateInsetsHint(); } else { mSource.setFrame(0, 0, 0, 0); } } // To be called when mSourceFrame or the window container bounds is changed. private void updateInsetsHint() { if (!mControllable || !mServerVisible) { return; } final Rect bounds = mWindowContainer.getBounds(); if (mSourceFrame.equals(mLastSourceFrame) && bounds.equals(mLastContainerBounds)) { return; } mLastSourceFrame.set(mSourceFrame); mLastContainerBounds.set(bounds); mInsetsHint = mSource.calculateInsets(bounds, true /* ignoreVisibility */); void onWindowContainerBoundsChanged() { mInsetsHintStale = true; } @VisibleForTesting Insets getInsetsHint() { if (!mServerVisible) { return mInsetsHint; } final WindowState win = mWindowContainer.asWindowState(); if (win != null && win.mGivenInsetsPending) { return mInsetsHint; } if (mInsetsHintStale) { final Rect bounds = mWindowContainer.getBounds(); mInsetsHint = mSource.calculateInsets(bounds, true /* ignoreVisibility */); mInsetsHintStale = false; } return mInsetsHint; } Loading Loading @@ -359,8 +364,9 @@ class InsetsSourceProvider { mSetLeashPositionConsumer.accept(t); } } if (!mControl.getInsetsHint().equals(mInsetsHint)) { mControl.setInsetsHint(mInsetsHint); final Insets insetsHint = getInsetsHint(); if (!mControl.getInsetsHint().equals(insetsHint)) { mControl.setInsetsHint(insetsHint); changed = true; } if (changed) { Loading Loading @@ -494,7 +500,7 @@ class InsetsSourceProvider { mControlTarget = target; updateVisibility(); mControl = new InsetsSourceControl(mSource.getId(), mSource.getType(), leash, mClientVisible, surfacePosition, mInsetsHint); mClientVisible, surfacePosition, getInsetsHint()); ProtoLog.d(WM_DEBUG_WINDOW_INSETS, "InsetsSource Control %s for target %s", mControl, mControlTarget); Loading Loading @@ -605,6 +611,9 @@ class InsetsSourceProvider { if (mControllable) { pw.print(prefix + "mInsetsHint="); pw.print(mInsetsHint); if (mInsetsHintStale) { pw.print(" stale"); } pw.println(); } pw.print(prefix); Loading
services/core/java/com/android/server/wm/WindowContainer.java +6 −0 Original line number Diff line number Diff line Loading @@ -1143,6 +1143,9 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< } void onResize() { if (mControllableInsetProvider != null) { mControllableInsetProvider.onWindowContainerBoundsChanged(); } for (int i = mChildren.size() - 1; i >= 0; --i) { final WindowContainer wc = mChildren.get(i); wc.onParentResize(); Loading @@ -1162,6 +1165,9 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< } void onMovedByResize() { if (mControllableInsetProvider != null) { mControllableInsetProvider.onWindowContainerBoundsChanged(); } for (int i = mChildren.size() - 1; i >= 0; --i) { final WindowContainer wc = mChildren.get(i); wc.onMovedByResize(); Loading