Loading packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaHierarchyManager.kt +5 −4 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ import com.android.systemui.dreams.DreamOverlayStateController import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.media.dream.MediaDreamComplication import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.shade.NotifPanelEvents import com.android.systemui.shade.ShadeStateEvents import com.android.systemui.shade.ShadeStateEvents.ShadeStateEventsListener import com.android.systemui.statusbar.CrossFadeHelper import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController Loading Loading @@ -96,7 +97,7 @@ constructor( private val dreamOverlayStateController: DreamOverlayStateController, configurationController: ConfigurationController, wakefulnessLifecycle: WakefulnessLifecycle, panelEventsEvents: NotifPanelEvents, panelEventsEvents: ShadeStateEvents, private val secureSettings: SecureSettings, @Main private val handler: Handler, ) { Loading Loading @@ -534,8 +535,8 @@ constructor( mediaHosts.forEach { it?.updateViewVisibility() } } panelEventsEvents.registerListener( object : NotifPanelEvents.Listener { panelEventsEvents.addShadeStateEventsListener( object : ShadeStateEventsListener { override fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) { skipQqsOnExpansion = isExpandImmediateEnabled updateDesiredLocation() Loading packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +3 −46 Original line number Diff line number Diff line Loading @@ -135,7 +135,6 @@ import com.android.systemui.biometrics.AuthController; import com.android.systemui.camera.CameraGestureHelper; import com.android.systemui.classifier.Classifier; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.DisplayId; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.doze.DozeLog; Loading Loading @@ -231,7 +230,6 @@ import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.unfold.SysUIUnfoldComponent; import com.android.systemui.util.Compile; import com.android.systemui.util.LargeScreenUtils; import com.android.systemui.util.ListenerSet; import com.android.systemui.util.Utils; import com.android.systemui.util.time.SystemClock; import com.android.wm.shell.animation.FlingAnimationUtils; Loading Loading @@ -372,7 +370,6 @@ public final class NotificationPanelViewController { private final TapAgainViewController mTapAgainViewController; private final LargeScreenShadeHeaderController mLargeScreenShadeHeaderController; private final RecordingController mRecordingController; private final PanelEventsEmitter mPanelEventsEmitter; private final boolean mVibrateOnOpening; private final VelocityTracker mVelocityTracker = VelocityTracker.obtain(); private final FlingAnimationUtils mFlingAnimationUtilsClosing; Loading Loading @@ -880,7 +877,6 @@ public final class NotificationPanelViewController { Provider<KeyguardBottomAreaViewController> keyguardBottomAreaViewControllerProvider, KeyguardUnlockAnimationController keyguardUnlockAnimationController, NotificationListContainer notificationListContainer, PanelEventsEmitter panelEventsEmitter, NotificationStackSizeCalculator notificationStackSizeCalculator, UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, ShadeTransitionController shadeTransitionController, Loading Loading @@ -993,7 +989,6 @@ public final class NotificationPanelViewController { mMediaDataManager = mediaDataManager; mTapAgainViewController = tapAgainViewController; mSysUiState = sysUiState; mPanelEventsEmitter = panelEventsEmitter; pulseExpansionHandler.setPulseExpandAbortListener(() -> { if (mQs != null) { mQs.animateHeaderSlidingOut(); Loading Loading @@ -1948,7 +1943,7 @@ public final class NotificationPanelViewController { private void setQsExpandImmediate(boolean expandImmediate) { if (expandImmediate != mQsExpandImmediate) { mQsExpandImmediate = expandImmediate; mPanelEventsEmitter.notifyExpandImmediateChange(expandImmediate); mShadeExpansionStateManager.notifyExpandImmediateChange(expandImmediate); } } Loading Loading @@ -3889,7 +3884,7 @@ public final class NotificationPanelViewController { boolean wasRunning = mIsLaunchAnimationRunning; mIsLaunchAnimationRunning = running; if (wasRunning != mIsLaunchAnimationRunning) { mPanelEventsEmitter.notifyLaunchingActivityChanged(running); mShadeExpansionStateManager.notifyLaunchingActivityChanged(running); } } Loading @@ -3898,7 +3893,7 @@ public final class NotificationPanelViewController { boolean wasClosing = isClosing(); mClosing = isClosing; if (wasClosing != isClosing) { mPanelEventsEmitter.notifyPanelCollapsingChanged(isClosing); mShadeExpansionStateManager.notifyPanelCollapsingChanged(isClosing); } mAmbientState.setIsClosing(isClosing); } Loading Loading @@ -5921,44 +5916,6 @@ public final class NotificationPanelViewController { } } @SysUISingleton static class PanelEventsEmitter implements NotifPanelEvents { private final ListenerSet<Listener> mListeners = new ListenerSet<>(); @Inject PanelEventsEmitter() { } @Override public void registerListener(@androidx.annotation.NonNull @NonNull Listener listener) { mListeners.addIfAbsent(listener); } @Override public void unregisterListener(@androidx.annotation.NonNull @NonNull Listener listener) { mListeners.remove(listener); } private void notifyLaunchingActivityChanged(boolean isLaunchingActivity) { for (Listener cb : mListeners) { cb.onLaunchingActivityChanged(isLaunchingActivity); } } private void notifyPanelCollapsingChanged(boolean isCollapsing) { for (NotifPanelEvents.Listener cb : mListeners) { cb.onPanelCollapsingChanged(isCollapsing); } } private void notifyExpandImmediateChange(boolean expandImmediateEnabled) { for (NotifPanelEvents.Listener cb : mListeners) { cb.onExpandImmediateChanged(expandImmediateEnabled); } } } /** Handles MotionEvents for the Shade. */ public final class TouchHandler implements View.OnTouchListener { private long mLastTouchDownTime = -1L; Loading packages/SystemUI/src/com/android/systemui/shade/NotifPanelEventsModule.java→packages/SystemUI/src/com/android/systemui/shade/ShadeEventsModule.java +3 −4 Original line number Diff line number Diff line Loading @@ -21,10 +21,9 @@ import com.android.systemui.dagger.SysUISingleton; import dagger.Binds; import dagger.Module; /** Provides a {@link NotifPanelEvents} in {@link SysUISingleton} scope. */ /** Provides a {@link ShadeStateEvents} in {@link SysUISingleton} scope. */ @Module public abstract class NotifPanelEventsModule { public abstract class ShadeEventsModule { @Binds abstract NotifPanelEvents bindPanelEvents( NotificationPanelViewController.PanelEventsEmitter impl); abstract ShadeStateEvents bindShadeEvents(ShadeExpansionStateManager impl); } packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt +29 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.IntDef import android.util.Log import androidx.annotation.FloatRange import com.android.systemui.dagger.SysUISingleton import com.android.systemui.shade.ShadeStateEvents.ShadeStateEventsListener import com.android.systemui.util.Compile import java.util.concurrent.CopyOnWriteArrayList import javax.inject.Inject Loading @@ -30,11 +31,12 @@ import javax.inject.Inject * TODO(b/200063118): Make this class the one source of truth for the state of panel expansion. */ @SysUISingleton class ShadeExpansionStateManager @Inject constructor() { class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents { private val expansionListeners = CopyOnWriteArrayList<ShadeExpansionListener>() private val qsExpansionListeners = CopyOnWriteArrayList<ShadeQsExpansionListener>() private val stateListeners = CopyOnWriteArrayList<ShadeStateListener>() private val shadeStateEventsListeners = CopyOnWriteArrayList<ShadeStateEventsListener>() @PanelState private var state: Int = STATE_CLOSED @FloatRange(from = 0.0, to = 1.0) private var fraction: Float = 0f Loading Loading @@ -79,6 +81,14 @@ class ShadeExpansionStateManager @Inject constructor() { stateListeners.remove(listener) } override fun addShadeStateEventsListener(listener: ShadeStateEventsListener) { shadeStateEventsListeners.addIfAbsent(listener) } override fun removeShadeStateEventsListener(listener: ShadeStateEventsListener) { shadeStateEventsListeners.remove(listener) } /** Returns true if the panel is currently closed and false otherwise. */ fun isClosed(): Boolean = state == STATE_CLOSED Loading Loading @@ -162,6 +172,24 @@ class ShadeExpansionStateManager @Inject constructor() { stateListeners.forEach { it.onPanelStateChanged(state) } } fun notifyLaunchingActivityChanged(isLaunchingActivity: Boolean) { for (cb in shadeStateEventsListeners) { cb.onLaunchingActivityChanged(isLaunchingActivity) } } fun notifyPanelCollapsingChanged(isCollapsing: Boolean) { for (cb in shadeStateEventsListeners) { cb.onPanelCollapsingChanged(isCollapsing) } } fun notifyExpandImmediateChange(expandImmediateEnabled: Boolean) { for (cb in shadeStateEventsListeners) { cb.onExpandImmediateChanged(expandImmediateEnabled) } } private fun debugLog(msg: String) { if (!DEBUG) return Log.v(TAG, msg) Loading packages/SystemUI/src/com/android/systemui/shade/NotifPanelEvents.kt→packages/SystemUI/src/com/android/systemui/shade/ShadeStateEvents.kt +10 −13 Original line number Diff line number Diff line Loading @@ -17,26 +17,24 @@ package com.android.systemui.shade /** Provides certain notification panel events. */ interface NotifPanelEvents { interface ShadeStateEvents { /** Registers callbacks to be invoked when notification panel events occur. */ fun registerListener(listener: Listener) fun addShadeStateEventsListener(listener: ShadeStateEventsListener) /** Unregisters callbacks previously registered via [registerListener] */ fun unregisterListener(listener: Listener) /** Unregisters callbacks previously registered via [addShadeStateEventsListener] */ fun removeShadeStateEventsListener(listener: ShadeStateEventsListener) /** Callbacks for certain notification panel events. */ interface Listener { interface ShadeStateEventsListener { /** Invoked when the notification panel starts or stops collapsing. */ @JvmDefault fun onPanelCollapsingChanged(isCollapsing: Boolean) {} @JvmDefault fun onPanelCollapsingChanged(isCollapsing: Boolean) {} /** * Invoked when the notification panel starts or stops launching an [android.app.Activity]. */ @JvmDefault fun onLaunchingActivityChanged(isLaunchingActivity: Boolean) {} @JvmDefault fun onLaunchingActivityChanged(isLaunchingActivity: Boolean) {} /** * Invoked when the "expand immediate" attribute changes. Loading @@ -47,7 +45,6 @@ interface NotifPanelEvents { * Another example is when full QS is showing, and we swipe up from the bottom. Instead of * going to QQS, the panel fully collapses. */ @JvmDefault fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) {} @JvmDefault fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) {} } } Loading
packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaHierarchyManager.kt +5 −4 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ import com.android.systemui.dreams.DreamOverlayStateController import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.media.dream.MediaDreamComplication import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.shade.NotifPanelEvents import com.android.systemui.shade.ShadeStateEvents import com.android.systemui.shade.ShadeStateEvents.ShadeStateEventsListener import com.android.systemui.statusbar.CrossFadeHelper import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController Loading Loading @@ -96,7 +97,7 @@ constructor( private val dreamOverlayStateController: DreamOverlayStateController, configurationController: ConfigurationController, wakefulnessLifecycle: WakefulnessLifecycle, panelEventsEvents: NotifPanelEvents, panelEventsEvents: ShadeStateEvents, private val secureSettings: SecureSettings, @Main private val handler: Handler, ) { Loading Loading @@ -534,8 +535,8 @@ constructor( mediaHosts.forEach { it?.updateViewVisibility() } } panelEventsEvents.registerListener( object : NotifPanelEvents.Listener { panelEventsEvents.addShadeStateEventsListener( object : ShadeStateEventsListener { override fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) { skipQqsOnExpansion = isExpandImmediateEnabled updateDesiredLocation() Loading
packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +3 −46 Original line number Diff line number Diff line Loading @@ -135,7 +135,6 @@ import com.android.systemui.biometrics.AuthController; import com.android.systemui.camera.CameraGestureHelper; import com.android.systemui.classifier.Classifier; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.DisplayId; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.doze.DozeLog; Loading Loading @@ -231,7 +230,6 @@ import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.unfold.SysUIUnfoldComponent; import com.android.systemui.util.Compile; import com.android.systemui.util.LargeScreenUtils; import com.android.systemui.util.ListenerSet; import com.android.systemui.util.Utils; import com.android.systemui.util.time.SystemClock; import com.android.wm.shell.animation.FlingAnimationUtils; Loading Loading @@ -372,7 +370,6 @@ public final class NotificationPanelViewController { private final TapAgainViewController mTapAgainViewController; private final LargeScreenShadeHeaderController mLargeScreenShadeHeaderController; private final RecordingController mRecordingController; private final PanelEventsEmitter mPanelEventsEmitter; private final boolean mVibrateOnOpening; private final VelocityTracker mVelocityTracker = VelocityTracker.obtain(); private final FlingAnimationUtils mFlingAnimationUtilsClosing; Loading Loading @@ -880,7 +877,6 @@ public final class NotificationPanelViewController { Provider<KeyguardBottomAreaViewController> keyguardBottomAreaViewControllerProvider, KeyguardUnlockAnimationController keyguardUnlockAnimationController, NotificationListContainer notificationListContainer, PanelEventsEmitter panelEventsEmitter, NotificationStackSizeCalculator notificationStackSizeCalculator, UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, ShadeTransitionController shadeTransitionController, Loading Loading @@ -993,7 +989,6 @@ public final class NotificationPanelViewController { mMediaDataManager = mediaDataManager; mTapAgainViewController = tapAgainViewController; mSysUiState = sysUiState; mPanelEventsEmitter = panelEventsEmitter; pulseExpansionHandler.setPulseExpandAbortListener(() -> { if (mQs != null) { mQs.animateHeaderSlidingOut(); Loading Loading @@ -1948,7 +1943,7 @@ public final class NotificationPanelViewController { private void setQsExpandImmediate(boolean expandImmediate) { if (expandImmediate != mQsExpandImmediate) { mQsExpandImmediate = expandImmediate; mPanelEventsEmitter.notifyExpandImmediateChange(expandImmediate); mShadeExpansionStateManager.notifyExpandImmediateChange(expandImmediate); } } Loading Loading @@ -3889,7 +3884,7 @@ public final class NotificationPanelViewController { boolean wasRunning = mIsLaunchAnimationRunning; mIsLaunchAnimationRunning = running; if (wasRunning != mIsLaunchAnimationRunning) { mPanelEventsEmitter.notifyLaunchingActivityChanged(running); mShadeExpansionStateManager.notifyLaunchingActivityChanged(running); } } Loading @@ -3898,7 +3893,7 @@ public final class NotificationPanelViewController { boolean wasClosing = isClosing(); mClosing = isClosing; if (wasClosing != isClosing) { mPanelEventsEmitter.notifyPanelCollapsingChanged(isClosing); mShadeExpansionStateManager.notifyPanelCollapsingChanged(isClosing); } mAmbientState.setIsClosing(isClosing); } Loading Loading @@ -5921,44 +5916,6 @@ public final class NotificationPanelViewController { } } @SysUISingleton static class PanelEventsEmitter implements NotifPanelEvents { private final ListenerSet<Listener> mListeners = new ListenerSet<>(); @Inject PanelEventsEmitter() { } @Override public void registerListener(@androidx.annotation.NonNull @NonNull Listener listener) { mListeners.addIfAbsent(listener); } @Override public void unregisterListener(@androidx.annotation.NonNull @NonNull Listener listener) { mListeners.remove(listener); } private void notifyLaunchingActivityChanged(boolean isLaunchingActivity) { for (Listener cb : mListeners) { cb.onLaunchingActivityChanged(isLaunchingActivity); } } private void notifyPanelCollapsingChanged(boolean isCollapsing) { for (NotifPanelEvents.Listener cb : mListeners) { cb.onPanelCollapsingChanged(isCollapsing); } } private void notifyExpandImmediateChange(boolean expandImmediateEnabled) { for (NotifPanelEvents.Listener cb : mListeners) { cb.onExpandImmediateChanged(expandImmediateEnabled); } } } /** Handles MotionEvents for the Shade. */ public final class TouchHandler implements View.OnTouchListener { private long mLastTouchDownTime = -1L; Loading
packages/SystemUI/src/com/android/systemui/shade/NotifPanelEventsModule.java→packages/SystemUI/src/com/android/systemui/shade/ShadeEventsModule.java +3 −4 Original line number Diff line number Diff line Loading @@ -21,10 +21,9 @@ import com.android.systemui.dagger.SysUISingleton; import dagger.Binds; import dagger.Module; /** Provides a {@link NotifPanelEvents} in {@link SysUISingleton} scope. */ /** Provides a {@link ShadeStateEvents} in {@link SysUISingleton} scope. */ @Module public abstract class NotifPanelEventsModule { public abstract class ShadeEventsModule { @Binds abstract NotifPanelEvents bindPanelEvents( NotificationPanelViewController.PanelEventsEmitter impl); abstract ShadeStateEvents bindShadeEvents(ShadeExpansionStateManager impl); }
packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt +29 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.IntDef import android.util.Log import androidx.annotation.FloatRange import com.android.systemui.dagger.SysUISingleton import com.android.systemui.shade.ShadeStateEvents.ShadeStateEventsListener import com.android.systemui.util.Compile import java.util.concurrent.CopyOnWriteArrayList import javax.inject.Inject Loading @@ -30,11 +31,12 @@ import javax.inject.Inject * TODO(b/200063118): Make this class the one source of truth for the state of panel expansion. */ @SysUISingleton class ShadeExpansionStateManager @Inject constructor() { class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents { private val expansionListeners = CopyOnWriteArrayList<ShadeExpansionListener>() private val qsExpansionListeners = CopyOnWriteArrayList<ShadeQsExpansionListener>() private val stateListeners = CopyOnWriteArrayList<ShadeStateListener>() private val shadeStateEventsListeners = CopyOnWriteArrayList<ShadeStateEventsListener>() @PanelState private var state: Int = STATE_CLOSED @FloatRange(from = 0.0, to = 1.0) private var fraction: Float = 0f Loading Loading @@ -79,6 +81,14 @@ class ShadeExpansionStateManager @Inject constructor() { stateListeners.remove(listener) } override fun addShadeStateEventsListener(listener: ShadeStateEventsListener) { shadeStateEventsListeners.addIfAbsent(listener) } override fun removeShadeStateEventsListener(listener: ShadeStateEventsListener) { shadeStateEventsListeners.remove(listener) } /** Returns true if the panel is currently closed and false otherwise. */ fun isClosed(): Boolean = state == STATE_CLOSED Loading Loading @@ -162,6 +172,24 @@ class ShadeExpansionStateManager @Inject constructor() { stateListeners.forEach { it.onPanelStateChanged(state) } } fun notifyLaunchingActivityChanged(isLaunchingActivity: Boolean) { for (cb in shadeStateEventsListeners) { cb.onLaunchingActivityChanged(isLaunchingActivity) } } fun notifyPanelCollapsingChanged(isCollapsing: Boolean) { for (cb in shadeStateEventsListeners) { cb.onPanelCollapsingChanged(isCollapsing) } } fun notifyExpandImmediateChange(expandImmediateEnabled: Boolean) { for (cb in shadeStateEventsListeners) { cb.onExpandImmediateChanged(expandImmediateEnabled) } } private fun debugLog(msg: String) { if (!DEBUG) return Log.v(TAG, msg) Loading
packages/SystemUI/src/com/android/systemui/shade/NotifPanelEvents.kt→packages/SystemUI/src/com/android/systemui/shade/ShadeStateEvents.kt +10 −13 Original line number Diff line number Diff line Loading @@ -17,26 +17,24 @@ package com.android.systemui.shade /** Provides certain notification panel events. */ interface NotifPanelEvents { interface ShadeStateEvents { /** Registers callbacks to be invoked when notification panel events occur. */ fun registerListener(listener: Listener) fun addShadeStateEventsListener(listener: ShadeStateEventsListener) /** Unregisters callbacks previously registered via [registerListener] */ fun unregisterListener(listener: Listener) /** Unregisters callbacks previously registered via [addShadeStateEventsListener] */ fun removeShadeStateEventsListener(listener: ShadeStateEventsListener) /** Callbacks for certain notification panel events. */ interface Listener { interface ShadeStateEventsListener { /** Invoked when the notification panel starts or stops collapsing. */ @JvmDefault fun onPanelCollapsingChanged(isCollapsing: Boolean) {} @JvmDefault fun onPanelCollapsingChanged(isCollapsing: Boolean) {} /** * Invoked when the notification panel starts or stops launching an [android.app.Activity]. */ @JvmDefault fun onLaunchingActivityChanged(isLaunchingActivity: Boolean) {} @JvmDefault fun onLaunchingActivityChanged(isLaunchingActivity: Boolean) {} /** * Invoked when the "expand immediate" attribute changes. Loading @@ -47,7 +45,6 @@ interface NotifPanelEvents { * Another example is when full QS is showing, and we swipe up from the bottom. Instead of * going to QQS, the panel fully collapses. */ @JvmDefault fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) {} @JvmDefault fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) {} } }