diff options
| author | 2020-06-02 14:51:43 -0400 | |
|---|---|---|
| committer | 2020-06-02 15:36:03 -0400 | |
| commit | 529913a0235c9b0b2edfb6b68c4ca87a200beed4 (patch) | |
| tree | f7a39e330d35a562606a7f16a81830d3f1bb1a3f | |
| parent | 322b748b8d7c7500e0aca0f6665eb9058bc29d1f (diff) | |
Hide bubbles whenever the status bar is hidden, unless there's a flyout.
Test: manual, youtube fullscreen + get flyouts
Fixes: 157921959
Change-Id: I1da9ea7bde624b63f94570dc961241aea6ec74ec
3 files changed, 66 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index 0690907e8433..2607efd70d32 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -578,6 +578,18 @@ public class BubbleController implements ConfigurationController.ConfigurationLi } /** + * Called when the status bar has become visible or invisible (either permanently or + * temporarily). + */ + public void onStatusBarVisibilityChanged(boolean visible) { + if (mStackView != null) { + // Hide the stack temporarily if the status bar has been made invisible, and the stack + // is collapsed. An expanded stack should remain visible until collapsed. + mStackView.setTemporarilyInvisible(!visible && !isStackExpanded()); + } + } + + /** * Sets whether to perform inflation on the same thread as the caller. This method should only * be used in tests, not in production. */ diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java index fb081e2bf904..a8bea5429557 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java @@ -79,6 +79,7 @@ import androidx.dynamicanimation.animation.SpringForce; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ContrastColorUtil; import com.android.internal.widget.ViewClippingUtil; +import com.android.systemui.Interpolators; import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.bubbles.animation.ExpandedAnimationController; @@ -88,6 +89,7 @@ import com.android.systemui.model.SysUiState; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.shared.system.SysUiStatsLog; import com.android.systemui.statusbar.notification.collection.NotificationEntry; +import com.android.systemui.statusbar.phone.CollapsedStatusBarFragment; import com.android.systemui.statusbar.phone.NotificationShadeWindowController; import com.android.systemui.util.DismissCircleView; import com.android.systemui.util.FloatingContentCoordinator; @@ -239,6 +241,9 @@ public class BubbleStackView extends FrameLayout /** Whether a touch gesture, such as a stack/bubble drag or flyout drag, is in progress. */ private boolean mIsGestureInProgress = false; + /** Whether or not the stack is temporarily invisible off the side of the screen. */ + private boolean mTemporarilyInvisible = false; + /** Description of current animation controller state. */ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("Stack view state:"); @@ -902,6 +907,38 @@ public class BubbleStackView extends FrameLayout return true; }); + + animate() + .setInterpolator(Interpolators.PANEL_CLOSE_ACCELERATED) + .setDuration(CollapsedStatusBarFragment.FADE_IN_DURATION); + } + + /** + * Sets whether or not the stack should become temporarily invisible by moving off the side of + * the screen. + * + * If a flyout comes in while it's invisible, it will animate back in while the flyout is + * showing but disappear again when the flyout is gone. + */ + public void setTemporarilyInvisible(boolean invisible) { + mTemporarilyInvisible = invisible; + animateTemporarilyInvisible(); + } + + /** + * Animates onto or off the screen depending on whether we're temporarily invisible, and whether + * a flyout is visible. + */ + private void animateTemporarilyInvisible() { + if (mTemporarilyInvisible && mFlyout.getVisibility() != View.VISIBLE) { + if (mStackAnimationController.isStackOnLeftSide()) { + animate().translationX(-mBubbleSize).start(); + } else { + animate().translationX(mBubbleSize).start(); + } + } else { + animate().translationX(0).start(); + } } private void setUpManageMenu() { @@ -1953,6 +1990,9 @@ public class BubbleStackView extends FrameLayout // Stop suppressing the dot now that the flyout has morphed into the dot. bubbleView.removeDotSuppressionFlag( BadgedImageView.SuppressionFlag.FLYOUT_VISIBLE); + + mFlyout.setVisibility(INVISIBLE); + animateTemporarilyInvisible(); }; mFlyout.setVisibility(INVISIBLE); @@ -1970,6 +2010,7 @@ public class BubbleStackView extends FrameLayout final Runnable expandFlyoutAfterDelay = () -> { mAnimateInFlyout = () -> { mFlyout.setVisibility(VISIBLE); + animateTemporarilyInvisible(); mFlyoutDragDeltaX = mStackAnimationController.isStackOnLeftSide() ? -mFlyout.getWidth() diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index e0e52001e740..1bc42d1a169d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -2253,6 +2253,8 @@ public class StatusBar extends SystemUI implements DemoMode, updateHideIconsForBouncer(false /* animate */); } } + + updateBubblesVisibility(); } @Override @@ -2268,6 +2270,8 @@ public class StatusBar extends SystemUI implements DemoMode, } mLightBarController.onStatusBarAppearanceChanged(appearanceRegions, barModeChanged, mStatusBarMode, navbarColorManagedByIme); + + updateBubblesVisibility(); } @Override @@ -2311,6 +2315,7 @@ public class StatusBar extends SystemUI implements DemoMode, final int barMode = barMode(mTransientShown, mAppearance); if (updateBarMode(barMode)) { mLightBarController.onStatusBarModeChanged(barMode); + updateBubblesVisibility(); } } @@ -2395,6 +2400,14 @@ public class StatusBar extends SystemUI implements DemoMode, mNotificationPanelViewController.setQsScrimEnabled(scrimEnabled); } + /** Temporarily hides Bubbles if the status bar is hidden. */ + private void updateBubblesVisibility() { + mBubbleController.onStatusBarVisibilityChanged( + mStatusBarMode != MODE_LIGHTS_OUT + && mStatusBarMode != MODE_LIGHTS_OUT_TRANSPARENT + && !mStatusBarWindowHidden); + } + void checkBarMode(@TransitionMode int mode, @WindowVisibleState int windowState, BarTransitions transitions) { final boolean anim = !mNoAnimationOnNextBarModeChange && mDeviceInteractive |