diff options
| author | Tiger Huang <tigerhuang@google.com> | 2020-02-17 18:07:55 +0800 |
|---|---|---|
| committer | Tiger Huang <tigerhuang@google.com> | 2020-02-17 18:27:58 +0800 |
| commit | 1828adfab2f15e0971dab629eca7585cbd9d47e2 (patch) | |
| tree | 9aaec977448bee0f0967016e92c07426aebd4f69 /core/java/android/view/ViewRootImpl.java | |
| parent | 40fd197d0d8bb674d74f7190218a1708c048d20f (diff) | |
Refactor AttachInfo.mGlobalSystemUiVisibility
Move it to ViewRootImpl and rename it: mDispatchedSystemUiVisibility
with default value 0 in the new insets mode instead of -1. Because
mCompatibleVisibilityInfo.globalVisibility will always be updated in the
new insets mode, we don't need the -1 value to detect the change from
non-zero value to zero dispatched from the server.
Bug: 118118435
Test: atest LayoutTests
Change-Id: I45064bdcdca37b9a2b30d82bb9d9c84e45732029
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 5964e121151a..8e5bc56c9a22 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -436,6 +436,8 @@ public final class ViewRootImpl implements ViewParent, @UnsupportedAppUsage final View.AttachInfo mAttachInfo; final SystemUiVisibilityInfo mCompatibleVisibilityInfo; + int mDispatchedSystemUiVisibility = + ViewRootImpl.sNewInsetsMode == NEW_INSETS_MODE_FULL ? 0 : -1; InputQueue.Callback mInputQueueCallback; InputQueue mInputQueue; @UnsupportedAppUsage @@ -1945,11 +1947,33 @@ public final class ViewRootImpl implements ViewParent, } else { info.globalVisibility |= systemUiFlag; } - if (mAttachInfo.mGlobalSystemUiVisibility != info.globalVisibility) { + if (mDispatchedSystemUiVisibility != info.globalVisibility) { scheduleTraversals(); } } + private void handleDispatchSystemUiVisibilityChanged(SystemUiVisibilityInfo args) { + if (mSeq != args.seq && sNewInsetsMode != NEW_INSETS_MODE_FULL) { + // The sequence has changed, so we need to update our value and make + // sure to do a traversal afterward so the window manager is given our + // most recent data. + mSeq = args.seq; + mAttachInfo.mForceReportNewAttributes = true; + scheduleTraversals(); + } + if (mView == null) return; + if (args.localChanges != 0) { + mView.updateLocalSystemUiVisibility(args.localValue, args.localChanges); + args.localChanges = 0; + } + + final int visibility = args.globalVisibility & View.SYSTEM_UI_CLEARABLE_FLAGS; + if (mDispatchedSystemUiVisibility != visibility) { + mDispatchedSystemUiVisibility = visibility; + mView.dispatchSystemUiVisibilityChanged(visibility); + } + } + @VisibleForTesting public static void adjustLayoutParamsForCompatibility(WindowManager.LayoutParams inOutParams) { if (sNewInsetsMode != NEW_INSETS_MODE_FULL) { @@ -7182,28 +7206,6 @@ public final class ViewRootImpl implements ViewParent, event.recycle(); } - public void handleDispatchSystemUiVisibilityChanged(SystemUiVisibilityInfo args) { - if (mSeq != args.seq && sNewInsetsMode != NEW_INSETS_MODE_FULL) { - // The sequence has changed, so we need to update our value and make - // sure to do a traversal afterward so the window manager is given our - // most recent data. - mSeq = args.seq; - mAttachInfo.mForceReportNewAttributes = true; - scheduleTraversals(); - } - if (mView == null) return; - if (args.localChanges != 0) { - mView.updateLocalSystemUiVisibility(args.localValue, args.localChanges); - args.localChanges = 0; - } - - int visibility = args.globalVisibility&View.SYSTEM_UI_CLEARABLE_FLAGS; - if (visibility != mAttachInfo.mGlobalSystemUiVisibility) { - mAttachInfo.mGlobalSystemUiVisibility = visibility; - mView.dispatchSystemUiVisibilityChanged(visibility); - } - } - /** * Notify that the window title changed */ @@ -8373,6 +8375,7 @@ public final class ViewRootImpl implements ViewParent, mHandler.sendMessage(msg); } + // TODO(118118435): Remove this after migration public void dispatchSystemUiVisibilityChanged(int seq, int globalVisibility, int localValue, int localChanges) { SystemUiVisibilityInfo args = new SystemUiVisibilityInfo(); |
