Merge "[Status Bar Refactor] Move some PanelView setters + getters into PanelViewController and out of PanelBar." into sc-v2-dev am: 837ed2be5a am: e41d00bc66

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15854191

Change-Id: I87d1c5a1d8415b0addcec034342565c706eb7c9c
This commit is contained in:
Caitlin Cassidy
2021-09-30 18:01:20 +00:00
committed by Automerger Merge Worker
6 changed files with 90 additions and 81 deletions

View File

@@ -358,6 +358,7 @@ public class NotificationPanelViewController extends PanelViewController {
private boolean mKeyguardUserSwitcherEnabled;
private boolean mDozing;
private boolean mDozingOnDown;
private boolean mBouncerShowing;
private int mBarState;
private float mInitialHeightOnTouch;
private float mInitialTouchX;
@@ -434,7 +435,7 @@ public class NotificationPanelViewController extends PanelViewController {
private Runnable mHeadsUpExistenceChangedRunnable = () -> {
setHeadsUpAnimatingAway(false);
notifyBarPanelExpansionChanged();
updatePanelExpansionAndVisibility();
};
// TODO (b/162832756): once migrated to the new pipeline, delete legacy group manager
private NotificationGroupManagerLegacy mGroupManager;
@@ -3382,11 +3383,19 @@ public class NotificationPanelViewController extends PanelViewController {
public void setHeadsUpAnimatingAway(boolean headsUpAnimatingAway) {
mHeadsUpAnimatingAway = headsUpAnimatingAway;
mNotificationStackScrollLayoutController.setHeadsUpAnimatingAway(headsUpAnimatingAway);
updateHeadsUpVisibility();
updateVisibility();
}
private void updateHeadsUpVisibility() {
((PhoneStatusBarView) mBar).setHeadsUpVisible(mHeadsUpAnimatingAway || mHeadsUpPinnedMode);
/** Set whether the bouncer is showing. */
public void setBouncerShowing(boolean bouncerShowing) {
mBouncerShowing = bouncerShowing;
updateVisibility();
}
@Override
protected boolean shouldPanelBeVisible() {
boolean headsUpVisible = mHeadsUpAnimatingAway || mHeadsUpPinnedMode;
return headsUpVisible || isExpanded() || mBouncerShowing;
}
@Override
@@ -3796,6 +3805,11 @@ public class NotificationPanelViewController extends PanelViewController {
}
}
/** */
public void setImportantForAccessibility(int mode) {
mView.setImportantForAccessibility(mode);
}
/**
* Do not let the user drag the shade up and down for the current touch session.
* This is necessary to avoid shade expansion while/after the bouncer is dismissed.
@@ -4371,7 +4385,7 @@ public class NotificationPanelViewController extends PanelViewController {
}
updateGestureExclusionRect();
mHeadsUpPinnedMode = inPinnedMode;
updateHeadsUpVisibility();
updateVisibility();
mKeyguardStatusBarViewController.updateForHeadsUp();
}

View File

@@ -33,8 +33,6 @@ public abstract class PanelBar extends FrameLayout {
private static final boolean SPEW = false;
private static final String PANEL_BAR_SUPER_PARCELABLE = "panel_bar_super_parcelable";
private static final String STATE = "state";
private boolean mBouncerShowing;
private boolean mExpanded;
protected float mPanelFraction;
public static final void LOG(String fmt, Object... args) {
@@ -99,33 +97,6 @@ public abstract class PanelBar extends FrameLayout {
pv.setBar(this);
}
public void setBouncerShowing(boolean showing) {
mBouncerShowing = showing;
int important = showing ? IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
: IMPORTANT_FOR_ACCESSIBILITY_AUTO;
setImportantForAccessibility(important);
updateVisibility();
if (mPanel != null) mPanel.getView().setImportantForAccessibility(important);
}
public float getExpansionFraction() {
return mPanelFraction;
}
public boolean isExpanded() {
return mExpanded;
}
protected void updateVisibility() {
mPanel.getView().setVisibility(shouldPanelBeVisible() ? VISIBLE : INVISIBLE);
}
protected boolean shouldPanelBeVisible() {
return mExpanded || mBouncerShowing;
}
public boolean panelEnabled() {
return true;
}
@@ -183,9 +154,7 @@ public abstract class PanelBar extends FrameLayout {
boolean fullyClosed = true;
boolean fullyOpened = false;
if (SPEW) LOG("panelExpansionChanged: start state=%d, f=%.1f", mState, frac);
mExpanded = expanded;
mPanelFraction = frac;
updateVisibility();
// adjust any other panels that may be partially visible
if (expanded) {
if (mState == STATE_CLOSED) {

View File

@@ -16,6 +16,9 @@
package com.android.systemui.statusbar.phone;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE;
import static com.android.systemui.classifier.Classifier.BOUNCER_UNLOCK;
import static com.android.systemui.classifier.Classifier.GENERIC;
@@ -315,7 +318,7 @@ public abstract class PanelViewController {
}
private void startOpening(MotionEvent event) {
notifyBarPanelExpansionChanged();
updatePanelExpansionAndVisibility();
maybeVibrateOnOpening();
//TODO: keyguard opens QS a different way; log that too?
@@ -447,7 +450,7 @@ public abstract class PanelViewController {
protected void onTrackingStopped(boolean expand) {
mTracking = false;
mBar.onTrackingStopped(expand);
notifyBarPanelExpansionChanged();
updatePanelExpansionAndVisibility();
}
protected void onTrackingStarted() {
@@ -455,7 +458,7 @@ public abstract class PanelViewController {
mTracking = true;
mBar.onTrackingStarted();
notifyExpandingStarted();
notifyBarPanelExpansionChanged();
updatePanelExpansionAndVisibility();
}
/**
@@ -685,7 +688,7 @@ public abstract class PanelViewController {
} else {
cancelJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
}
notifyBarPanelExpansionChanged();
updatePanelExpansionAndVisibility();
}
protected abstract boolean shouldUseDismissingAnimation();
@@ -760,7 +763,7 @@ public abstract class PanelViewController {
mExpandedFraction = Math.min(1f,
maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight);
onHeightUpdated(mExpandedHeight);
notifyBarPanelExpansionChanged();
updatePanelExpansionAndVisibility();
}
/**
@@ -878,7 +881,7 @@ public abstract class PanelViewController {
if (mExpanding) {
notifyExpandingFinished();
}
notifyBarPanelExpansionChanged();
updatePanelExpansionAndVisibility();
// Wait for window manager to pickup the change, so we know the maximum height of the panel
// then.
@@ -916,7 +919,7 @@ public abstract class PanelViewController {
}
if (mInstantExpanding) {
mInstantExpanding = false;
notifyBarPanelExpansionChanged();
updatePanelExpansionAndVisibility();
}
}
@@ -1022,7 +1025,7 @@ public abstract class PanelViewController {
public void onAnimationEnd(Animator animation) {
setAnimator(null);
onAnimationFinished.run();
notifyBarPanelExpansionChanged();
updatePanelExpansionAndVisibility();
}
});
animator.start();
@@ -1059,19 +1062,39 @@ public abstract class PanelViewController {
return animator;
}
protected void notifyBarPanelExpansionChanged() {
/** Update the visibility of {@link PanelView} if necessary. */
public void updateVisibility() {
mView.setVisibility(shouldPanelBeVisible() ? VISIBLE : INVISIBLE);
}
/** Returns true if {@link PanelView} should be visible. */
abstract boolean shouldPanelBeVisible();
/**
* Updates the panel expansion and {@link PanelView} visibility if necessary.
*
* TODO(b/200063118): Could public calls to this method be replaced with calls to
* {@link #updateVisibility()}? That would allow us to make this method private.
*/
public void updatePanelExpansionAndVisibility() {
if (mBar != null) {
mBar.panelExpansionChanged(
mExpandedFraction,
mExpandedFraction > 0f || mInstantExpanding
|| isPanelVisibleBecauseOfHeadsUp() || mTracking
|| mHeightAnimator != null && !mIsSpringBackAnimation);
mBar.panelExpansionChanged(mExpandedFraction, isExpanded());
}
updateVisibility();
for (int i = 0; i < mExpansionListeners.size(); i++) {
mExpansionListeners.get(i).onPanelExpansionChanged(mExpandedFraction, mTracking);
}
}
public boolean isExpanded() {
return mExpandedFraction > 0f
|| mInstantExpanding
|| isPanelVisibleBecauseOfHeadsUp()
|| mTracking
|| mHeightAnimator != null
&& !mIsSpringBackAnimation;
}
public void addExpansionListener(PanelExpansionListener panelExpansionListener) {
mExpansionListeners.add(panelExpansionListener);
}

View File

@@ -402,16 +402,6 @@ public class PhoneStatusBarView extends PanelBar {
getPaddingBottom());
}
public void setHeadsUpVisible(boolean headsUpVisible) {
mHeadsUpVisible = headsUpVisible;
updateVisibility();
}
@Override
protected boolean shouldPanelBeVisible() {
return mHeadsUpVisible || super.shouldPanelBeVisible();
}
/** An interface that will provide whether panel is enabled. */
interface PanelEnabledProvider {
/** Returns true if the panel is enabled and false otherwise. */

View File

@@ -61,6 +61,10 @@ class PhoneStatusBarViewController(
}
}
fun setImportantForAccessibility(mode: Int) {
mView.importantForAccessibility = mode
}
private class StatusBarViewsCenterProvider : UnfoldMoveFromCenterAnimator.ViewCenterProvider {
override fun getViewCenter(view: View, outPoint: Point) =
when (view.id) {

View File

@@ -26,6 +26,8 @@ import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_STATUS_BARS;
import static android.view.WindowInsetsController.APPEARANCE_SEMI_TRANSPARENT_STATUS_BARS;
import static androidx.core.view.ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
import static androidx.core.view.ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS;
import static androidx.lifecycle.Lifecycle.State.RESUMED;
import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
@@ -1188,22 +1190,13 @@ public class StatusBar extends SystemUI implements
);
mBatteryMeterViewController.init();
// CollapsedStatusBarFragment re-inflated PhoneStatusBarView and both of
// mStatusBarView.mExpanded and mStatusBarView.mBouncerShowing are false.
// PhoneStatusBarView's new instance will set to be gone in
// PanelBar.updateVisibility after calling mStatusBarView.setBouncerShowing
// that will trigger PanelBar.updateVisibility. If there is a heads up showing,
// it needs to notify PhoneStatusBarView's new instance to update the correct
// status by calling mNotificationPanel.notifyBarPanelExpansionChanged().
if (mHeadsUpManager.hasPinnedHeadsUp()) {
mNotificationPanelViewController.notifyBarPanelExpansionChanged();
}
mStatusBarView.setBouncerShowing(mBouncerShowing);
if (oldStatusBarView != null) {
float fraction = oldStatusBarView.getExpansionFraction();
boolean expanded = oldStatusBarView.isExpanded();
mStatusBarView.panelExpansionChanged(fraction, expanded);
}
// Ensure we re-propagate panel expansion values to the panel controller and
// any listeners it may have, such as PanelBar. This will also ensure we
// re-display the notification panel if necessary (for example, if
// a heads-up notification was being displayed and should continue being
// displayed).
mNotificationPanelViewController.updatePanelExpansionAndVisibility();
setBouncerShowingForStatusBarComponents(mBouncerShowing);
HeadsUpAppearanceController oldController = mHeadsUpAppearanceController;
if (mHeadsUpAppearanceController != null) {
@@ -3531,7 +3524,7 @@ public class StatusBar extends SystemUI implements
mBouncerShowing = bouncerShowing;
mKeyguardBypassController.setBouncerShowing(bouncerShowing);
mPulseExpansionHandler.setBouncerShowing(bouncerShowing);
if (mStatusBarView != null) mStatusBarView.setBouncerShowing(bouncerShowing);
setBouncerShowingForStatusBarComponents(bouncerShowing);
updateHideIconsForBouncer(true /* animate */);
mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */);
updateScrimController();
@@ -3540,6 +3533,23 @@ public class StatusBar extends SystemUI implements
}
}
/**
* Propagate the bouncer state to status bar components.
*
* Separate from {@link #setBouncerShowing} because we sometimes re-create the status bar and
* should update only the status bar components.
*/
private void setBouncerShowingForStatusBarComponents(boolean bouncerShowing) {
int importance = bouncerShowing
? IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
: IMPORTANT_FOR_ACCESSIBILITY_AUTO;
if (mPhoneStatusBarViewController != null) {
mPhoneStatusBarViewController.setImportantForAccessibility(importance);
}
mNotificationPanelViewController.setImportantForAccessibility(importance);
mNotificationPanelViewController.setBouncerShowing(bouncerShowing);
}
/**
* Collapses the notification shade if it is tracking or expanded.
*/
@@ -4212,10 +4222,9 @@ public class StatusBar extends SystemUI implements
}
private void sendInitialExpansionAmount(ExpansionChangedListener expansionChangedListener) {
if (mStatusBarView != null) {
expansionChangedListener.onExpansionChanged(mStatusBarView.getExpansionFraction(),
mStatusBarView.isExpanded());
}
expansionChangedListener.onExpansionChanged(
mNotificationPanelViewController.getExpandedFraction(),
mNotificationPanelViewController.isExpanded());
}
public void removeExpansionChangedListener(@NonNull ExpansionChangedListener listener) {