Merge "[Status Bar Refactor] 1/N: Define a singleton PanelExpansionStateManager and pipe existing panel expansion callbacks through it." into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
cec069482f
@@ -20,11 +20,14 @@ import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.ViewRootImpl;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.statusbar.phone.BiometricUnlockController;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
|
||||
/**
|
||||
* Interface to control Keyguard View. It should be implemented by KeyguardViewManagers, which
|
||||
@@ -184,14 +187,10 @@ public interface KeyguardViewController {
|
||||
|
||||
/**
|
||||
* Registers the StatusBar to which this Keyguard View is mounted.
|
||||
* @param statusBar
|
||||
* @param notificationPanelViewController
|
||||
* @param biometricUnlockController
|
||||
* @param notificationContainer
|
||||
* @param bypassController
|
||||
*/
|
||||
void registerStatusBar(StatusBar statusBar,
|
||||
NotificationPanelViewController notificationPanelViewController,
|
||||
@Nullable PanelExpansionStateManager panelExpansionStateManager,
|
||||
BiometricUnlockController biometricUnlockController,
|
||||
View notificationContainer,
|
||||
KeyguardBypassController bypassController);
|
||||
|
||||
@@ -82,6 +82,8 @@ import android.view.WindowManagerPolicyConstants;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.internal.jank.InteractionJankMonitor;
|
||||
import com.android.internal.jank.InteractionJankMonitor.Configuration;
|
||||
import com.android.internal.policy.IKeyguardDismissCallback;
|
||||
@@ -117,6 +119,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||
import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation;
|
||||
@@ -2654,10 +2657,16 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
|
||||
*/
|
||||
public KeyguardViewController registerStatusBar(StatusBar statusBar,
|
||||
NotificationPanelViewController panelView,
|
||||
@Nullable PanelExpansionStateManager panelExpansionStateManager,
|
||||
BiometricUnlockController biometricUnlockController,
|
||||
View notificationContainer, KeyguardBypassController bypassController) {
|
||||
mKeyguardViewControllerLazy.get().registerStatusBar(statusBar, panelView,
|
||||
biometricUnlockController, notificationContainer, bypassController);
|
||||
mKeyguardViewControllerLazy.get().registerStatusBar(
|
||||
statusBar,
|
||||
panelView,
|
||||
panelExpansionStateManager,
|
||||
biometricUnlockController,
|
||||
notificationContainer,
|
||||
bypassController);
|
||||
return mKeyguardViewControllerLazy.get();
|
||||
}
|
||||
|
||||
|
||||
@@ -38,8 +38,8 @@ import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||
import com.android.systemui.statusbar.phone.BiometricUnlockController
|
||||
import com.android.systemui.statusbar.phone.DozeParameters
|
||||
import com.android.systemui.statusbar.phone.PanelExpansionListener
|
||||
import com.android.systemui.statusbar.phone.ScrimController
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController
|
||||
import com.android.systemui.util.WallpaperController
|
||||
import java.io.FileDescriptor
|
||||
@@ -329,10 +329,10 @@ class NotificationShadeDepthController @Inject constructor(
|
||||
/**
|
||||
* Update blurs when pulling down the shade
|
||||
*/
|
||||
override fun onPanelExpansionChanged(rawExpansion: Float, tracking: Boolean) {
|
||||
override fun onPanelExpansionChanged(rawFraction: Float, tracking: Boolean) {
|
||||
val timestamp = SystemClock.elapsedRealtimeNanos()
|
||||
val expansion = MathUtils.saturate(
|
||||
(rawExpansion - panelPullDownMinFraction) / (1f - panelPullDownMinFraction))
|
||||
(rawFraction - panelPullDownMinFraction) / (1f - panelPullDownMinFraction))
|
||||
|
||||
if (shadeExpansion == expansion && prevTracking == tracking) {
|
||||
prevTimestamp = timestamp
|
||||
|
||||
@@ -27,8 +27,8 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll
|
||||
import com.android.systemui.statusbar.notification.stack.StackStateAnimator
|
||||
import com.android.systemui.statusbar.phone.DozeParameters
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController
|
||||
import com.android.systemui.statusbar.phone.PanelExpansionListener
|
||||
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener
|
||||
import com.android.systemui.statusbar.policy.HeadsUpManager
|
||||
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener
|
||||
import javax.inject.Inject
|
||||
@@ -294,8 +294,8 @@ class NotificationWakeUpCoordinator @Inject constructor(
|
||||
this.state = newState
|
||||
}
|
||||
|
||||
override fun onPanelExpansionChanged(expansion: Float, tracking: Boolean) {
|
||||
val collapsedEnough = expansion <= 0.9f
|
||||
override fun onPanelExpansionChanged(fraction: Float, tracking: Boolean) {
|
||||
val collapsedEnough = fraction <= 0.9f
|
||||
if (collapsedEnough != this.collapsedEnoughToHide) {
|
||||
val couldShowPulsingHuns = canShowPulsingHuns
|
||||
this.collapsedEnoughToHide = collapsedEnough
|
||||
|
||||
@@ -169,6 +169,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll
|
||||
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
|
||||
import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent;
|
||||
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardQsUserSwitchController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
@@ -686,6 +687,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
SplitShadeHeaderController splitShadeHeaderController,
|
||||
UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
|
||||
LockscreenGestureLogger lockscreenGestureLogger,
|
||||
PanelExpansionStateManager panelExpansionStateManager,
|
||||
NotificationRemoteInputManager remoteInputManager,
|
||||
ControlsComponent controlsComponent) {
|
||||
super(view,
|
||||
@@ -699,6 +701,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
flingAnimationUtilsBuilder.get(),
|
||||
statusBarTouchableRegionManager,
|
||||
lockscreenGestureLogger,
|
||||
panelExpansionStateManager,
|
||||
ambientState);
|
||||
mView = view;
|
||||
mVibratorHelper = vibratorHelper;
|
||||
@@ -2205,10 +2208,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
mStatusBar.executeRunnableDismissingKeyguard(null, null /* cancelAction */,
|
||||
false /* dismissShade */, true /* afterKeyguardGone */, false /* deferred */);
|
||||
}
|
||||
for (int i = 0; i < mExpansionListeners.size(); i++) {
|
||||
mExpansionListeners.get(i).onQsExpansionChanged(
|
||||
mQsMaxExpansionHeight != 0 ? mQsExpansionHeight / mQsMaxExpansionHeight : 0);
|
||||
}
|
||||
if (DEBUG) {
|
||||
mView.invalidate();
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
|
||||
@@ -105,6 +106,7 @@ public class NotificationShadeWindowViewController {
|
||||
private boolean mExpandingBelowNotch;
|
||||
private final DockManager mDockManager;
|
||||
private final NotificationPanelViewController mNotificationPanelViewController;
|
||||
private final PanelExpansionStateManager mPanelExpansionStateManager;
|
||||
private final StatusBarWindowView mStatusBarWindowView;
|
||||
|
||||
// Used for determining view / touch intersection
|
||||
@@ -134,6 +136,7 @@ public class NotificationShadeWindowViewController {
|
||||
NotificationShadeDepthController depthController,
|
||||
NotificationShadeWindowView notificationShadeWindowView,
|
||||
NotificationPanelViewController notificationPanelViewController,
|
||||
PanelExpansionStateManager panelExpansionStateManager,
|
||||
StatusBarWindowView statusBarWindowView,
|
||||
NotificationStackScrollLayoutController notificationStackScrollLayoutController,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||
@@ -157,6 +160,7 @@ public class NotificationShadeWindowViewController {
|
||||
mShadeController = shadeController;
|
||||
mDockManager = dockManager;
|
||||
mNotificationPanelViewController = notificationPanelViewController;
|
||||
mPanelExpansionStateManager = panelExpansionStateManager;
|
||||
mDepthController = depthController;
|
||||
mStatusBarWindowView = statusBarWindowView;
|
||||
mNotificationStackScrollLayoutController = notificationStackScrollLayoutController;
|
||||
@@ -442,7 +446,7 @@ public class NotificationShadeWindowViewController {
|
||||
setDragDownHelper(mLockscreenShadeTransitionController.getTouchHelper());
|
||||
|
||||
mDepthController.setRoot(mView);
|
||||
mNotificationPanelViewController.addExpansionListener(mDepthController);
|
||||
mPanelExpansionStateManager.addListener(mDepthController);
|
||||
}
|
||||
|
||||
public NotificationShadeWindowView getView() {
|
||||
|
||||
@@ -59,12 +59,12 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.VibratorHelper;
|
||||
import com.android.systemui.statusbar.notification.stack.AmbientState;
|
||||
import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.wm.shell.animation.FlingAnimationUtils;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public abstract class PanelViewController {
|
||||
public static final boolean DEBUG = PanelBar.DEBUG;
|
||||
@@ -86,7 +86,6 @@ public abstract class PanelViewController {
|
||||
private boolean mVibrateOnOpening;
|
||||
protected boolean mIsLaunchAnimationRunning;
|
||||
private int mFixedDuration = NO_FIXED_DURATION;
|
||||
protected ArrayList<PanelExpansionListener> mExpansionListeners = new ArrayList<>();
|
||||
protected float mOverExpansion;
|
||||
|
||||
/**
|
||||
@@ -185,6 +184,7 @@ public abstract class PanelViewController {
|
||||
protected final SysuiStatusBarStateController mStatusBarStateController;
|
||||
protected final AmbientState mAmbientState;
|
||||
protected final LockscreenGestureLogger mLockscreenGestureLogger;
|
||||
private final PanelExpansionStateManager mPanelExpansionStateManager;
|
||||
private final TouchHandler mTouchHandler;
|
||||
|
||||
protected abstract void onExpandingFinished();
|
||||
@@ -211,20 +211,25 @@ public abstract class PanelViewController {
|
||||
return mAmbientState;
|
||||
}
|
||||
|
||||
public PanelViewController(PanelView view,
|
||||
FalsingManager falsingManager, DozeLog dozeLog,
|
||||
public PanelViewController(
|
||||
PanelView view,
|
||||
FalsingManager falsingManager,
|
||||
DozeLog dozeLog,
|
||||
KeyguardStateController keyguardStateController,
|
||||
SysuiStatusBarStateController statusBarStateController, VibratorHelper vibratorHelper,
|
||||
SysuiStatusBarStateController statusBarStateController,
|
||||
VibratorHelper vibratorHelper,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||
LatencyTracker latencyTracker,
|
||||
FlingAnimationUtils.Builder flingAnimationUtilsBuilder,
|
||||
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
|
||||
LockscreenGestureLogger lockscreenGestureLogger,
|
||||
PanelExpansionStateManager panelExpansionStateManager,
|
||||
AmbientState ambientState) {
|
||||
mAmbientState = ambientState;
|
||||
mView = view;
|
||||
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||
mLockscreenGestureLogger = lockscreenGestureLogger;
|
||||
mPanelExpansionStateManager = panelExpansionStateManager;
|
||||
mTouchHandler = createTouchHandler();
|
||||
mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
|
||||
@Override
|
||||
@@ -1088,9 +1093,7 @@ public abstract class PanelViewController {
|
||||
mBar.panelExpansionChanged(mExpandedFraction, isExpanded());
|
||||
}
|
||||
updateVisibility();
|
||||
for (int i = 0; i < mExpansionListeners.size(); i++) {
|
||||
mExpansionListeners.get(i).onPanelExpansionChanged(mExpandedFraction, mTracking);
|
||||
}
|
||||
mPanelExpansionStateManager.onPanelExpansionChanged(mExpandedFraction, mTracking);
|
||||
}
|
||||
|
||||
public boolean isExpanded() {
|
||||
@@ -1102,10 +1105,6 @@ public abstract class PanelViewController {
|
||||
&& !mIsSpringBackAnimation;
|
||||
}
|
||||
|
||||
public void addExpansionListener(PanelExpansionListener panelExpansionListener) {
|
||||
mExpansionListeners.add(panelExpansionListener);
|
||||
}
|
||||
|
||||
protected abstract boolean isPanelVisibleBecauseOfHeadsUp();
|
||||
|
||||
/**
|
||||
|
||||
@@ -219,6 +219,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll
|
||||
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
|
||||
import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule;
|
||||
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
@@ -541,6 +542,7 @@ public class StatusBar extends SystemUI implements
|
||||
private final NotificationGutsManager mGutsManager;
|
||||
private final NotificationLogger mNotificationLogger;
|
||||
private final NotificationViewHierarchyManager mViewHierarchyManager;
|
||||
private final PanelExpansionStateManager mPanelExpansionStateManager;
|
||||
private final KeyguardViewMediator mKeyguardViewMediator;
|
||||
protected final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
|
||||
private final BrightnessSliderController.Factory mBrightnessSliderFactory;
|
||||
@@ -726,6 +728,7 @@ public class StatusBar extends SystemUI implements
|
||||
NotificationLogger notificationLogger,
|
||||
NotificationInterruptStateProvider notificationInterruptStateProvider,
|
||||
NotificationViewHierarchyManager notificationViewHierarchyManager,
|
||||
PanelExpansionStateManager panelExpansionStateManager,
|
||||
KeyguardViewMediator keyguardViewMediator,
|
||||
DisplayMetrics displayMetrics,
|
||||
MetricsLogger metricsLogger,
|
||||
@@ -832,6 +835,7 @@ public class StatusBar extends SystemUI implements
|
||||
mNotificationLogger = notificationLogger;
|
||||
mNotificationInterruptStateProvider = notificationInterruptStateProvider;
|
||||
mViewHierarchyManager = notificationViewHierarchyManager;
|
||||
mPanelExpansionStateManager = panelExpansionStateManager;
|
||||
mKeyguardViewMediator = keyguardViewMediator;
|
||||
mDisplayMetrics = displayMetrics;
|
||||
mMetricsLogger = metricsLogger;
|
||||
@@ -1158,8 +1162,8 @@ public class StatusBar extends SystemUI implements
|
||||
mNotificationLogger.setUpWithContainer(notifListContainer);
|
||||
|
||||
mNotificationIconAreaController.setupShelf(mNotificationShelfController);
|
||||
mNotificationPanelViewController.addExpansionListener(mWakeUpCoordinator);
|
||||
mNotificationPanelViewController.addExpansionListener(
|
||||
mPanelExpansionStateManager.addListener(mWakeUpCoordinator);
|
||||
mPanelExpansionStateManager.addListener(
|
||||
this::dispatchPanelExpansionForKeyguardDismiss);
|
||||
|
||||
mUserSwitcherController.init(mNotificationShadeWindowView);
|
||||
@@ -1669,8 +1673,11 @@ public class StatusBar extends SystemUI implements
|
||||
});
|
||||
mStatusBarKeyguardViewManager.registerStatusBar(
|
||||
/* statusBar= */ this,
|
||||
mNotificationPanelViewController, mBiometricUnlockController,
|
||||
mStackScroller, mKeyguardBypassController);
|
||||
mNotificationPanelViewController,
|
||||
mPanelExpansionStateManager,
|
||||
mBiometricUnlockController,
|
||||
mStackScroller,
|
||||
mKeyguardBypassController);
|
||||
mKeyguardIndicationController
|
||||
.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
|
||||
mBiometricUnlockController.setKeyguardViewController(mStatusBarKeyguardViewManager);
|
||||
|
||||
@@ -63,6 +63,8 @@ import com.android.systemui.statusbar.RemoteInputController;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.notification.ViewGroupFadeHelper;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBouncer.BouncerExpansionCallback;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
|
||||
@@ -266,6 +268,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
||||
@Override
|
||||
public void registerStatusBar(StatusBar statusBar,
|
||||
NotificationPanelViewController notificationPanelViewController,
|
||||
PanelExpansionStateManager panelExpansionStateManager,
|
||||
BiometricUnlockController biometricUnlockController,
|
||||
View notificationContainer,
|
||||
KeyguardBypassController bypassController) {
|
||||
@@ -275,7 +278,9 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
||||
ViewGroup container = mStatusBar.getBouncerContainer();
|
||||
mBouncer = mKeyguardBouncerFactory.create(container, mExpansionCallback);
|
||||
mNotificationPanelViewController = notificationPanelViewController;
|
||||
notificationPanelViewController.addExpansionListener(this);
|
||||
if (panelExpansionStateManager != null) {
|
||||
panelExpansionStateManager.addListener(this);
|
||||
}
|
||||
mBypassController = bypassController;
|
||||
mNotificationContainer = notificationContainer;
|
||||
mKeyguardMessageAreaController = mKeyguardMessageAreaFactory.create(
|
||||
@@ -323,7 +328,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPanelExpansionChanged(float expansion, boolean tracking) {
|
||||
public void onPanelExpansionChanged(float fraction, boolean tracking) {
|
||||
// We don't want to translate the bounce when:
|
||||
// • Keyguard is occluded, because we're in a FLAG_SHOW_WHEN_LOCKED activity and need to
|
||||
// conserve the original animation.
|
||||
@@ -336,14 +341,14 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
||||
mBouncer.setExpansion(KeyguardBouncer.EXPANSION_VISIBLE);
|
||||
} else if (mShowing) {
|
||||
if (!isWakeAndUnlocking() && !mStatusBar.isInLaunchTransition()) {
|
||||
mBouncer.setExpansion(expansion);
|
||||
mBouncer.setExpansion(fraction);
|
||||
}
|
||||
if (expansion != KeyguardBouncer.EXPANSION_HIDDEN && tracking
|
||||
if (fraction != KeyguardBouncer.EXPANSION_HIDDEN && tracking
|
||||
&& !mKeyguardStateController.canDismissLockScreen()
|
||||
&& !mBouncer.isShowing() && !mBouncer.isAnimatingAway()) {
|
||||
mBouncer.show(false /* resetSecuritySelection */, false /* scrimmed */);
|
||||
}
|
||||
} else if (mPulsing && expansion == KeyguardBouncer.EXPANSION_VISIBLE) {
|
||||
} else if (mPulsing && fraction == KeyguardBouncer.EXPANSION_VISIBLE) {
|
||||
// Panel expanded while pulsing but didn't translate the bouncer (because we are
|
||||
// unlocked.) Let's simply wake-up to dismiss the lock screen.
|
||||
mStatusBar.wakeUpIfDozing(SystemClock.uptimeMillis(), mStatusBar.getBouncerContainer(),
|
||||
|
||||
@@ -102,6 +102,7 @@ import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
|
||||
import com.android.systemui.statusbar.phone.StatusBarWindowView;
|
||||
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
|
||||
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
@@ -164,6 +165,7 @@ public interface StatusBarPhoneModule {
|
||||
NotificationLogger notificationLogger,
|
||||
NotificationInterruptStateProvider notificationInterruptStateProvider,
|
||||
NotificationViewHierarchyManager notificationViewHierarchyManager,
|
||||
PanelExpansionStateManager panelExpansionStateManager,
|
||||
KeyguardViewMediator keyguardViewMediator,
|
||||
DisplayMetrics displayMetrics,
|
||||
MetricsLogger metricsLogger,
|
||||
@@ -268,6 +270,7 @@ public interface StatusBarPhoneModule {
|
||||
notificationLogger,
|
||||
notificationInterruptStateProvider,
|
||||
notificationViewHierarchyManager,
|
||||
panelExpansionStateManager,
|
||||
keyguardViewMediator,
|
||||
displayMetrics,
|
||||
metricsLogger,
|
||||
|
||||
@@ -11,28 +11,20 @@
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
package com.android.systemui.statusbar.phone.panelstate;
|
||||
|
||||
/**
|
||||
* Panel and QS expansion callbacks.
|
||||
*/
|
||||
/** A listener interface to be notified of expansion events for the notification panel. */
|
||||
public interface PanelExpansionListener {
|
||||
/**
|
||||
* Invoked whenever the notification panel expansion changes, at every animation frame.
|
||||
* This is the main expansion that happens when the user is swiping up to dismiss the
|
||||
* lock screen.
|
||||
* lock screen and swiping to pull down the notification shade.
|
||||
*
|
||||
* @param expansion 0 when collapsed, 1 when expanded.
|
||||
* @param fraction 0 when collapsed, 1 when fully expanded.
|
||||
* @param tracking {@code true} when the user is actively dragging the panel.
|
||||
*/
|
||||
void onPanelExpansionChanged(float expansion, boolean tracking);
|
||||
|
||||
/**
|
||||
* Invoked whenever the QS expansion changes, at every animation frame.
|
||||
* @param expansion 0 when collapsed, 1 when expanded.
|
||||
*/
|
||||
default void onQsExpansionChanged(float expansion) {};
|
||||
void onPanelExpansionChanged(float fraction, boolean tracking);
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.statusbar.phone.panelstate
|
||||
|
||||
import androidx.annotation.FloatRange
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* A class responsible for managing the notification panel's current state.
|
||||
*
|
||||
* TODO(b/200063118): Move [PanelBar.panelExpansionChanged] logic to this class and make this class
|
||||
* the one source of truth for the state of panel expansion.
|
||||
*/
|
||||
@SysUISingleton
|
||||
class PanelExpansionStateManager @Inject constructor() {
|
||||
|
||||
private val listeners: MutableList<PanelExpansionListener> = mutableListOf()
|
||||
|
||||
/** Adds a listener that will be notified about panel events. */
|
||||
fun addListener(listener: PanelExpansionListener) {
|
||||
listeners.add(listener)
|
||||
}
|
||||
|
||||
/** Called when the panel expansion has changed. Notifies all listeners of change. */
|
||||
fun onPanelExpansionChanged(
|
||||
@FloatRange(from = 0.0, to = 1.0) fraction: Float,
|
||||
tracking: Boolean
|
||||
) {
|
||||
listeners.forEach { it.onPanelExpansionChanged(fraction, tracking) }
|
||||
}
|
||||
}
|
||||
@@ -121,6 +121,7 @@ import com.android.systemui.statusbar.notification.stack.AmbientState;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationRoundnessManager;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.util.concurrency.FakeExecutor;
|
||||
@@ -444,6 +445,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
mSplitShadeHeaderController,
|
||||
mUnlockedScreenOffAnimationController,
|
||||
mLockscreenGestureLogger,
|
||||
new PanelExpansionStateManager(),
|
||||
mNotificationRemoteInputManager,
|
||||
mControlsComponent);
|
||||
mNotificationPanelViewController.initDependencies(
|
||||
|
||||
@@ -52,6 +52,7 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
|
||||
@@ -135,6 +136,7 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase {
|
||||
mNotificationShadeDepthController,
|
||||
mView,
|
||||
mNotificationPanelViewController,
|
||||
new PanelExpansionStateManager(),
|
||||
mStatusBarWindowView,
|
||||
mNotificationStackScrollLayoutController,
|
||||
mStatusBarKeyguardViewManager,
|
||||
|
||||
@@ -51,6 +51,7 @@ import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
|
||||
import com.android.systemui.statusbar.NotificationMediaManager;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
|
||||
@@ -137,9 +138,13 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
||||
mUnlockedScreenOffAnimationController,
|
||||
mKeyguardMessageAreaFactory,
|
||||
mShadeController);
|
||||
mStatusBarKeyguardViewManager.registerStatusBar(mStatusBar,
|
||||
mNotificationPanelView, mBiometrucUnlockController,
|
||||
mNotificationContainer, mBypassController);
|
||||
mStatusBarKeyguardViewManager.registerStatusBar(
|
||||
mStatusBar,
|
||||
mNotificationPanelView,
|
||||
new PanelExpansionStateManager(),
|
||||
mBiometrucUnlockController,
|
||||
mNotificationContainer,
|
||||
mBypassController);
|
||||
mStatusBarKeyguardViewManager.show(null);
|
||||
}
|
||||
|
||||
|
||||
@@ -133,6 +133,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
|
||||
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
|
||||
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
@@ -385,6 +386,7 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
notificationLogger,
|
||||
mNotificationInterruptStateProvider,
|
||||
mNotificationViewHierarchyManager,
|
||||
new PanelExpansionStateManager(),
|
||||
mKeyguardViewMediator,
|
||||
new DisplayMetrics(),
|
||||
mMetricsLogger,
|
||||
@@ -464,9 +466,13 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
mock(DumpManager.class),
|
||||
mActivityLaunchAnimator,
|
||||
mDialogLaunchAnimator);
|
||||
when(mKeyguardViewMediator.registerStatusBar(any(StatusBar.class),
|
||||
any(NotificationPanelViewController.class), any(BiometricUnlockController.class),
|
||||
any(ViewGroup.class), any(KeyguardBypassController.class)))
|
||||
when(mKeyguardViewMediator.registerStatusBar(
|
||||
any(StatusBar.class),
|
||||
any(NotificationPanelViewController.class),
|
||||
any(PanelExpansionStateManager.class),
|
||||
any(BiometricUnlockController.class),
|
||||
any(ViewGroup.class),
|
||||
any(KeyguardBypassController.class)))
|
||||
.thenReturn(mStatusBarKeyguardViewManager);
|
||||
|
||||
when(mKeyguardViewMediator.getViewMediatorCallback()).thenReturn(
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.statusbar.phone.panelstate
|
||||
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
@SmallTest
|
||||
class PanelExpansionStateManagerTest : SysuiTestCase() {
|
||||
|
||||
private lateinit var panelExpansionStateManager: PanelExpansionStateManager
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
panelExpansionStateManager = PanelExpansionStateManager()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun onPanelExpansionChanged_listenersNotified() {
|
||||
val listener = TestPanelExpansionListener()
|
||||
panelExpansionStateManager.addListener(listener)
|
||||
val fraction = 0.6f
|
||||
val tracking = true
|
||||
|
||||
panelExpansionStateManager.onPanelExpansionChanged(fraction, tracking)
|
||||
|
||||
assertThat(listener.fraction).isEqualTo(fraction)
|
||||
assertThat(listener.tracking).isEqualTo(tracking)
|
||||
}
|
||||
|
||||
class TestPanelExpansionListener : PanelExpansionListener {
|
||||
var fraction: Float = 0f
|
||||
var tracking: Boolean = false
|
||||
|
||||
override fun onPanelExpansionChanged(
|
||||
fraction: Float,
|
||||
tracking: Boolean
|
||||
) {
|
||||
this.fraction = fraction
|
||||
this.tracking = tracking
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user