Loading services/core/java/com/android/server/wm/InsetsPolicy.java +48 −8 Original line number Original line Diff line number Diff line Loading @@ -156,11 +156,11 @@ class InsetsPolicy { final Resources r = mPolicy.getContext().getResources(); final Resources r = mPolicy.getContext().getResources(); mHideNavBarForKeyboard = r.getBoolean(R.bool.config_hideNavBarForKeyboard); mHideNavBarForKeyboard = r.getBoolean(R.bool.config_hideNavBarForKeyboard); mShowingTransientControlTarget = new ControlTarget( mShowingTransientControlTarget = new ControlTarget( displayContent, true /* showing */, false /* permanent */); this, true /* showing */, false /* permanent */); mShowingPermanentControlTarget = new ControlTarget( mShowingPermanentControlTarget = new ControlTarget( displayContent, true /* showing */, true /* permanent */); this, true /* showing */, true /* permanent */); mHidingPermanentControlTarget = new ControlTarget( mHidingPermanentControlTarget = new ControlTarget( displayContent, false /* showing */, true /* permanent */); this, false /* showing */, true /* permanent */); } } /** Updates the target which can control system bars. */ /** Updates the target which can control system bars. */ Loading Loading @@ -209,6 +209,17 @@ class InsetsPolicy { mStatusBar.updateVisibility(statusControlTarget, Type.statusBars()); mStatusBar.updateVisibility(statusControlTarget, Type.statusBars()); mNavBar.updateVisibility(navControlTarget, Type.navigationBars()); mNavBar.updateVisibility(navControlTarget, Type.navigationBars()); if (((mHidingTransientTypes & Type.statusBars()) != 0 && mHidingTransientStatusControlTarget != mFakeStatusControlTarget && mHidingTransientStatusControlTarget != statusControlTarget) || ((mHidingTransientTypes & Type.navigationBars()) != 0 && mHidingTransientNavControlTarget != mFakeNavControlTarget && mHidingTransientNavControlTarget != navControlTarget)) { // The target responsible for playing the animation of hiding transient bars is gone. // Here aborts the transient state. abortTransient(); } } } boolean hasHiddenSources(@InsetsType int types) { boolean hasHiddenSources(@InsetsType int types) { Loading Loading @@ -243,6 +254,7 @@ class InsetsPolicy { } } if (mShowingTransientTypes != showingTransientTypes) { if (mShowingTransientTypes != showingTransientTypes) { mShowingTransientTypes = showingTransientTypes; mShowingTransientTypes = showingTransientTypes; mHidingTransientTypes &= ~showingTransientTypes; StatusBarManagerInternal statusBarManagerInternal = StatusBarManagerInternal statusBarManagerInternal = mPolicy.getStatusBarManagerInternal(); mPolicy.getStatusBarManagerInternal(); if (statusBarManagerInternal != null) { if (statusBarManagerInternal != null) { Loading Loading @@ -599,10 +611,10 @@ class InsetsPolicy { * updateBarControlTarget(mFocusedWin) after this invocation. * updateBarControlTarget(mFocusedWin) after this invocation. */ */ private void abortTransient() { private void abortTransient() { if (mShowingTransientTypes == 0) { if (mShowingTransientTypes == 0 && mHidingTransientTypes == 0) { return; return; } } sendAbortTransient(mShowingTransientTypes); sendAbortTransient(mShowingTransientTypes | mHidingTransientTypes); mShowingTransientTypes = 0; mShowingTransientTypes = 0; mHidingTransientTypes = 0; mHidingTransientTypes = 0; mHidingTransientStatusControlTarget = null; mHidingTransientStatusControlTarget = null; Loading Loading @@ -925,6 +937,8 @@ class InsetsPolicy { @NonNull @NonNull private final InsetsState mState = new InsetsState(); private final InsetsState mState = new InsetsState(); @NonNull @NonNull private final InsetsPolicy mInsetsPolicy; @NonNull private final InsetsStateController mStateController; private final InsetsStateController mStateController; @NonNull @NonNull private final InsetsController mInsetsController; private final InsetsController mInsetsController; Loading @@ -932,15 +946,19 @@ class InsetsPolicy { private final int mRequestedVisibleTypes; private final int mRequestedVisibleTypes; @NonNull @NonNull private final String mName; private final String mName; @InsetsType private int mAnimatingTypes; ControlTarget(@NonNull DisplayContent displayContent, boolean showing, boolean permanent) { ControlTarget(@NonNull InsetsPolicy insetsPolicy, boolean showing, boolean permanent) { final String name = String.format(FORMAT, final String name = String.format(FORMAT, showing ? "Showing" : "Hiding", showing ? "Showing" : "Hiding", permanent ? "Permanent" : "Transient"); permanent ? "Permanent" : "Transient"); final DisplayContent displayContent = insetsPolicy.mDisplayContent; mHandler = displayContent.mWmService.mH; mHandler = displayContent.mWmService.mH; mGlobalLock = displayContent.mWmService.mGlobalLock; mGlobalLock = displayContent.mWmService.mGlobalLock; mStateController = displayContent.getInsetsStateController(); mStateController = displayContent.getInsetsStateController(); mInsetsController = new InsetsController(new Host(mHandler, name)); mInsetsPolicy = insetsPolicy; mInsetsController = new InsetsController(new Host(mHandler, name, this)); mRequestedVisibleTypes = Type.defaultVisible() & ~(showing ? 0 : Type.systemBars()); mRequestedVisibleTypes = Type.defaultVisible() & ~(showing ? 0 : Type.systemBars()); if (!showing) { if (!showing) { mInsetsController.hide(Type.systemBars()); mInsetsController.hide(Type.systemBars()); Loading Loading @@ -978,6 +996,19 @@ class InsetsPolicy { return mRequestedVisibleTypes; return mRequestedVisibleTypes; } } @InsetsType @Override public int getAnimatingTypes() { return mAnimatingTypes; } @Override public void setAnimatingTypes(@InsetsType int animatingTypes, @Nullable ImeTracker.Token statsToken) { mInsetsPolicy.onAnimatingTypesChanged(this, mAnimatingTypes, animatingTypes); mAnimatingTypes = animatingTypes; } @NonNull @NonNull @Override @Override public String toString() { public String toString() { Loading @@ -993,10 +1024,13 @@ class InsetsPolicy { private final Handler mHandler; private final Handler mHandler; @NonNull @NonNull private final String mName; private final String mName; @NonNull private final InsetsControlTarget mControlTarget; Host(@NonNull Handler handler, @NonNull String name) { Host(@NonNull Handler handler, @NonNull String name, @NonNull InsetsControlTarget target) { mHandler = handler; mHandler = handler; mName = name; mName = name; mControlTarget = target; } } @NonNull @NonNull Loading Loading @@ -1042,6 +1076,12 @@ class InsetsPolicy { t.close(); t.close(); } } @Override public void updateAnimatingTypes(@InsetsType int animatingTypes, @Nullable ImeTracker.Token statsToken) { mControlTarget.setAnimatingTypes(animatingTypes, statsToken); } @Override @Override public void updateRequestedVisibleTypes(@InsetsType int types, public void updateRequestedVisibleTypes(@InsetsType int types, @Nullable ImeTracker.Token statsToken) { @Nullable ImeTracker.Token statsToken) { Loading Loading
services/core/java/com/android/server/wm/InsetsPolicy.java +48 −8 Original line number Original line Diff line number Diff line Loading @@ -156,11 +156,11 @@ class InsetsPolicy { final Resources r = mPolicy.getContext().getResources(); final Resources r = mPolicy.getContext().getResources(); mHideNavBarForKeyboard = r.getBoolean(R.bool.config_hideNavBarForKeyboard); mHideNavBarForKeyboard = r.getBoolean(R.bool.config_hideNavBarForKeyboard); mShowingTransientControlTarget = new ControlTarget( mShowingTransientControlTarget = new ControlTarget( displayContent, true /* showing */, false /* permanent */); this, true /* showing */, false /* permanent */); mShowingPermanentControlTarget = new ControlTarget( mShowingPermanentControlTarget = new ControlTarget( displayContent, true /* showing */, true /* permanent */); this, true /* showing */, true /* permanent */); mHidingPermanentControlTarget = new ControlTarget( mHidingPermanentControlTarget = new ControlTarget( displayContent, false /* showing */, true /* permanent */); this, false /* showing */, true /* permanent */); } } /** Updates the target which can control system bars. */ /** Updates the target which can control system bars. */ Loading Loading @@ -209,6 +209,17 @@ class InsetsPolicy { mStatusBar.updateVisibility(statusControlTarget, Type.statusBars()); mStatusBar.updateVisibility(statusControlTarget, Type.statusBars()); mNavBar.updateVisibility(navControlTarget, Type.navigationBars()); mNavBar.updateVisibility(navControlTarget, Type.navigationBars()); if (((mHidingTransientTypes & Type.statusBars()) != 0 && mHidingTransientStatusControlTarget != mFakeStatusControlTarget && mHidingTransientStatusControlTarget != statusControlTarget) || ((mHidingTransientTypes & Type.navigationBars()) != 0 && mHidingTransientNavControlTarget != mFakeNavControlTarget && mHidingTransientNavControlTarget != navControlTarget)) { // The target responsible for playing the animation of hiding transient bars is gone. // Here aborts the transient state. abortTransient(); } } } boolean hasHiddenSources(@InsetsType int types) { boolean hasHiddenSources(@InsetsType int types) { Loading Loading @@ -243,6 +254,7 @@ class InsetsPolicy { } } if (mShowingTransientTypes != showingTransientTypes) { if (mShowingTransientTypes != showingTransientTypes) { mShowingTransientTypes = showingTransientTypes; mShowingTransientTypes = showingTransientTypes; mHidingTransientTypes &= ~showingTransientTypes; StatusBarManagerInternal statusBarManagerInternal = StatusBarManagerInternal statusBarManagerInternal = mPolicy.getStatusBarManagerInternal(); mPolicy.getStatusBarManagerInternal(); if (statusBarManagerInternal != null) { if (statusBarManagerInternal != null) { Loading Loading @@ -599,10 +611,10 @@ class InsetsPolicy { * updateBarControlTarget(mFocusedWin) after this invocation. * updateBarControlTarget(mFocusedWin) after this invocation. */ */ private void abortTransient() { private void abortTransient() { if (mShowingTransientTypes == 0) { if (mShowingTransientTypes == 0 && mHidingTransientTypes == 0) { return; return; } } sendAbortTransient(mShowingTransientTypes); sendAbortTransient(mShowingTransientTypes | mHidingTransientTypes); mShowingTransientTypes = 0; mShowingTransientTypes = 0; mHidingTransientTypes = 0; mHidingTransientTypes = 0; mHidingTransientStatusControlTarget = null; mHidingTransientStatusControlTarget = null; Loading Loading @@ -925,6 +937,8 @@ class InsetsPolicy { @NonNull @NonNull private final InsetsState mState = new InsetsState(); private final InsetsState mState = new InsetsState(); @NonNull @NonNull private final InsetsPolicy mInsetsPolicy; @NonNull private final InsetsStateController mStateController; private final InsetsStateController mStateController; @NonNull @NonNull private final InsetsController mInsetsController; private final InsetsController mInsetsController; Loading @@ -932,15 +946,19 @@ class InsetsPolicy { private final int mRequestedVisibleTypes; private final int mRequestedVisibleTypes; @NonNull @NonNull private final String mName; private final String mName; @InsetsType private int mAnimatingTypes; ControlTarget(@NonNull DisplayContent displayContent, boolean showing, boolean permanent) { ControlTarget(@NonNull InsetsPolicy insetsPolicy, boolean showing, boolean permanent) { final String name = String.format(FORMAT, final String name = String.format(FORMAT, showing ? "Showing" : "Hiding", showing ? "Showing" : "Hiding", permanent ? "Permanent" : "Transient"); permanent ? "Permanent" : "Transient"); final DisplayContent displayContent = insetsPolicy.mDisplayContent; mHandler = displayContent.mWmService.mH; mHandler = displayContent.mWmService.mH; mGlobalLock = displayContent.mWmService.mGlobalLock; mGlobalLock = displayContent.mWmService.mGlobalLock; mStateController = displayContent.getInsetsStateController(); mStateController = displayContent.getInsetsStateController(); mInsetsController = new InsetsController(new Host(mHandler, name)); mInsetsPolicy = insetsPolicy; mInsetsController = new InsetsController(new Host(mHandler, name, this)); mRequestedVisibleTypes = Type.defaultVisible() & ~(showing ? 0 : Type.systemBars()); mRequestedVisibleTypes = Type.defaultVisible() & ~(showing ? 0 : Type.systemBars()); if (!showing) { if (!showing) { mInsetsController.hide(Type.systemBars()); mInsetsController.hide(Type.systemBars()); Loading Loading @@ -978,6 +996,19 @@ class InsetsPolicy { return mRequestedVisibleTypes; return mRequestedVisibleTypes; } } @InsetsType @Override public int getAnimatingTypes() { return mAnimatingTypes; } @Override public void setAnimatingTypes(@InsetsType int animatingTypes, @Nullable ImeTracker.Token statsToken) { mInsetsPolicy.onAnimatingTypesChanged(this, mAnimatingTypes, animatingTypes); mAnimatingTypes = animatingTypes; } @NonNull @NonNull @Override @Override public String toString() { public String toString() { Loading @@ -993,10 +1024,13 @@ class InsetsPolicy { private final Handler mHandler; private final Handler mHandler; @NonNull @NonNull private final String mName; private final String mName; @NonNull private final InsetsControlTarget mControlTarget; Host(@NonNull Handler handler, @NonNull String name) { Host(@NonNull Handler handler, @NonNull String name, @NonNull InsetsControlTarget target) { mHandler = handler; mHandler = handler; mName = name; mName = name; mControlTarget = target; } } @NonNull @NonNull Loading Loading @@ -1042,6 +1076,12 @@ class InsetsPolicy { t.close(); t.close(); } } @Override public void updateAnimatingTypes(@InsetsType int animatingTypes, @Nullable ImeTracker.Token statsToken) { mControlTarget.setAnimatingTypes(animatingTypes, statsToken); } @Override @Override public void updateRequestedVisibleTypes(@InsetsType int types, public void updateRequestedVisibleTypes(@InsetsType int types, @Nullable ImeTracker.Token statsToken) { @Nullable ImeTracker.Token statsToken) { Loading