Merge "Merge PanelEventsEmitter into ShadeExpansionStateManager" into tm-qpr-dev am: f8b00cb578

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

Change-Id: Id665a04c3437b79c48916e1c33076394f73b7144
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Justin Weir
2022-10-27 16:06:22 +00:00
committed by Automerger Merge Worker
11 changed files with 69 additions and 125 deletions

View File

@@ -43,7 +43,8 @@ import com.android.systemui.dreams.DreamOverlayStateController
import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.media.dream.MediaDreamComplication import com.android.systemui.media.dream.MediaDreamComplication
import com.android.systemui.plugins.statusbar.StatusBarStateController 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.CrossFadeHelper
import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.SysuiStatusBarStateController
@@ -96,7 +97,7 @@ constructor(
private val dreamOverlayStateController: DreamOverlayStateController, private val dreamOverlayStateController: DreamOverlayStateController,
configurationController: ConfigurationController, configurationController: ConfigurationController,
wakefulnessLifecycle: WakefulnessLifecycle, wakefulnessLifecycle: WakefulnessLifecycle,
panelEventsEvents: NotifPanelEvents, panelEventsEvents: ShadeStateEvents,
private val secureSettings: SecureSettings, private val secureSettings: SecureSettings,
@Main private val handler: Handler, @Main private val handler: Handler,
) { ) {
@@ -534,8 +535,8 @@ constructor(
mediaHosts.forEach { it?.updateViewVisibility() } mediaHosts.forEach { it?.updateViewVisibility() }
} }
panelEventsEvents.registerListener( panelEventsEvents.addShadeStateEventsListener(
object : NotifPanelEvents.Listener { object : ShadeStateEventsListener {
override fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) { override fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) {
skipQqsOnExpansion = isExpandImmediateEnabled skipQqsOnExpansion = isExpandImmediateEnabled
updateDesiredLocation() updateDesiredLocation()

View File

@@ -135,7 +135,6 @@ import com.android.systemui.biometrics.AuthController;
import com.android.systemui.camera.CameraGestureHelper; import com.android.systemui.camera.CameraGestureHelper;
import com.android.systemui.classifier.Classifier; import com.android.systemui.classifier.Classifier;
import com.android.systemui.classifier.FalsingCollector; 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.DisplayId;
import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.doze.DozeLog; import com.android.systemui.doze.DozeLog;
@@ -231,7 +230,6 @@ import com.android.systemui.statusbar.window.StatusBarWindowStateController;
import com.android.systemui.unfold.SysUIUnfoldComponent; import com.android.systemui.unfold.SysUIUnfoldComponent;
import com.android.systemui.util.Compile; import com.android.systemui.util.Compile;
import com.android.systemui.util.LargeScreenUtils; import com.android.systemui.util.LargeScreenUtils;
import com.android.systemui.util.ListenerSet;
import com.android.systemui.util.Utils; import com.android.systemui.util.Utils;
import com.android.systemui.util.time.SystemClock; import com.android.systemui.util.time.SystemClock;
import com.android.wm.shell.animation.FlingAnimationUtils; import com.android.wm.shell.animation.FlingAnimationUtils;
@@ -372,7 +370,6 @@ public final class NotificationPanelViewController {
private final TapAgainViewController mTapAgainViewController; private final TapAgainViewController mTapAgainViewController;
private final LargeScreenShadeHeaderController mLargeScreenShadeHeaderController; private final LargeScreenShadeHeaderController mLargeScreenShadeHeaderController;
private final RecordingController mRecordingController; private final RecordingController mRecordingController;
private final PanelEventsEmitter mPanelEventsEmitter;
private final boolean mVibrateOnOpening; private final boolean mVibrateOnOpening;
private final VelocityTracker mVelocityTracker = VelocityTracker.obtain(); private final VelocityTracker mVelocityTracker = VelocityTracker.obtain();
private final FlingAnimationUtils mFlingAnimationUtilsClosing; private final FlingAnimationUtils mFlingAnimationUtilsClosing;
@@ -880,7 +877,6 @@ public final class NotificationPanelViewController {
Provider<KeyguardBottomAreaViewController> keyguardBottomAreaViewControllerProvider, Provider<KeyguardBottomAreaViewController> keyguardBottomAreaViewControllerProvider,
KeyguardUnlockAnimationController keyguardUnlockAnimationController, KeyguardUnlockAnimationController keyguardUnlockAnimationController,
NotificationListContainer notificationListContainer, NotificationListContainer notificationListContainer,
PanelEventsEmitter panelEventsEmitter,
NotificationStackSizeCalculator notificationStackSizeCalculator, NotificationStackSizeCalculator notificationStackSizeCalculator,
UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
ShadeTransitionController shadeTransitionController, ShadeTransitionController shadeTransitionController,
@@ -993,7 +989,6 @@ public final class NotificationPanelViewController {
mMediaDataManager = mediaDataManager; mMediaDataManager = mediaDataManager;
mTapAgainViewController = tapAgainViewController; mTapAgainViewController = tapAgainViewController;
mSysUiState = sysUiState; mSysUiState = sysUiState;
mPanelEventsEmitter = panelEventsEmitter;
pulseExpansionHandler.setPulseExpandAbortListener(() -> { pulseExpansionHandler.setPulseExpandAbortListener(() -> {
if (mQs != null) { if (mQs != null) {
mQs.animateHeaderSlidingOut(); mQs.animateHeaderSlidingOut();
@@ -1948,7 +1943,7 @@ public final class NotificationPanelViewController {
private void setQsExpandImmediate(boolean expandImmediate) { private void setQsExpandImmediate(boolean expandImmediate) {
if (expandImmediate != mQsExpandImmediate) { if (expandImmediate != mQsExpandImmediate) {
mQsExpandImmediate = expandImmediate; mQsExpandImmediate = expandImmediate;
mPanelEventsEmitter.notifyExpandImmediateChange(expandImmediate); mShadeExpansionStateManager.notifyExpandImmediateChange(expandImmediate);
} }
} }
@@ -3889,7 +3884,7 @@ public final class NotificationPanelViewController {
boolean wasRunning = mIsLaunchAnimationRunning; boolean wasRunning = mIsLaunchAnimationRunning;
mIsLaunchAnimationRunning = running; mIsLaunchAnimationRunning = running;
if (wasRunning != mIsLaunchAnimationRunning) { if (wasRunning != mIsLaunchAnimationRunning) {
mPanelEventsEmitter.notifyLaunchingActivityChanged(running); mShadeExpansionStateManager.notifyLaunchingActivityChanged(running);
} }
} }
@@ -3898,7 +3893,7 @@ public final class NotificationPanelViewController {
boolean wasClosing = isClosing(); boolean wasClosing = isClosing();
mClosing = isClosing; mClosing = isClosing;
if (wasClosing != isClosing) { if (wasClosing != isClosing) {
mPanelEventsEmitter.notifyPanelCollapsingChanged(isClosing); mShadeExpansionStateManager.notifyPanelCollapsingChanged(isClosing);
} }
mAmbientState.setIsClosing(isClosing); mAmbientState.setIsClosing(isClosing);
} }
@@ -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. */ /** Handles MotionEvents for the Shade. */
public final class TouchHandler implements View.OnTouchListener { public final class TouchHandler implements View.OnTouchListener {
private long mLastTouchDownTime = -1L; private long mLastTouchDownTime = -1L;

View File

@@ -21,10 +21,9 @@ import com.android.systemui.dagger.SysUISingleton;
import dagger.Binds; import dagger.Binds;
import dagger.Module; import dagger.Module;
/** Provides a {@link NotifPanelEvents} in {@link SysUISingleton} scope. */ /** Provides a {@link ShadeStateEvents} in {@link SysUISingleton} scope. */
@Module @Module
public abstract class NotifPanelEventsModule { public abstract class ShadeEventsModule {
@Binds @Binds
abstract NotifPanelEvents bindPanelEvents( abstract ShadeStateEvents bindShadeEvents(ShadeExpansionStateManager impl);
NotificationPanelViewController.PanelEventsEmitter impl);
} }

View File

@@ -20,6 +20,7 @@ import android.annotation.IntDef
import android.util.Log import android.util.Log
import androidx.annotation.FloatRange import androidx.annotation.FloatRange
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.shade.ShadeStateEvents.ShadeStateEventsListener
import com.android.systemui.util.Compile import com.android.systemui.util.Compile
import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.CopyOnWriteArrayList
import javax.inject.Inject import javax.inject.Inject
@@ -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. * TODO(b/200063118): Make this class the one source of truth for the state of panel expansion.
*/ */
@SysUISingleton @SysUISingleton
class ShadeExpansionStateManager @Inject constructor() { class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents {
private val expansionListeners = CopyOnWriteArrayList<ShadeExpansionListener>() private val expansionListeners = CopyOnWriteArrayList<ShadeExpansionListener>()
private val qsExpansionListeners = CopyOnWriteArrayList<ShadeQsExpansionListener>() private val qsExpansionListeners = CopyOnWriteArrayList<ShadeQsExpansionListener>()
private val stateListeners = CopyOnWriteArrayList<ShadeStateListener>() private val stateListeners = CopyOnWriteArrayList<ShadeStateListener>()
private val shadeStateEventsListeners = CopyOnWriteArrayList<ShadeStateEventsListener>()
@PanelState private var state: Int = STATE_CLOSED @PanelState private var state: Int = STATE_CLOSED
@FloatRange(from = 0.0, to = 1.0) private var fraction: Float = 0f @FloatRange(from = 0.0, to = 1.0) private var fraction: Float = 0f
@@ -79,6 +81,14 @@ class ShadeExpansionStateManager @Inject constructor() {
stateListeners.remove(listener) 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. */ /** Returns true if the panel is currently closed and false otherwise. */
fun isClosed(): Boolean = state == STATE_CLOSED fun isClosed(): Boolean = state == STATE_CLOSED
@@ -162,6 +172,24 @@ class ShadeExpansionStateManager @Inject constructor() {
stateListeners.forEach { it.onPanelStateChanged(state) } 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) { private fun debugLog(msg: String) {
if (!DEBUG) return if (!DEBUG) return
Log.v(TAG, msg) Log.v(TAG, msg)

View File

@@ -16,27 +16,25 @@
package com.android.systemui.shade package com.android.systemui.shade
/** Provides certain notification panel events. */ /** Provides certain notification panel events. */
interface NotifPanelEvents { interface ShadeStateEvents {
/** Registers callbacks to be invoked when notification panel events occur. */ /** Registers callbacks to be invoked when notification panel events occur. */
fun registerListener(listener: Listener) fun addShadeStateEventsListener(listener: ShadeStateEventsListener)
/** Unregisters callbacks previously registered via [registerListener] */ /** Unregisters callbacks previously registered via [addShadeStateEventsListener] */
fun unregisterListener(listener: Listener) fun removeShadeStateEventsListener(listener: ShadeStateEventsListener)
/** Callbacks for certain notification panel events. */ /** Callbacks for certain notification panel events. */
interface Listener { interface ShadeStateEventsListener {
/** Invoked when the notification panel starts or stops collapsing. */ /** Invoked when the notification panel starts or stops collapsing. */
@JvmDefault @JvmDefault fun onPanelCollapsingChanged(isCollapsing: Boolean) {}
fun onPanelCollapsingChanged(isCollapsing: Boolean) {}
/** /**
* Invoked when the notification panel starts or stops launching an [android.app.Activity]. * Invoked when the notification panel starts or stops launching an [android.app.Activity].
*/ */
@JvmDefault @JvmDefault fun onLaunchingActivityChanged(isLaunchingActivity: Boolean) {}
fun onLaunchingActivityChanged(isLaunchingActivity: Boolean) {}
/** /**
* Invoked when the "expand immediate" attribute changes. * Invoked when the "expand immediate" attribute changes.
@@ -47,7 +45,6 @@ interface NotifPanelEvents {
* Another example is when full QS is showing, and we swipe up from the bottom. Instead of * Another example is when full QS is showing, and we swipe up from the bottom. Instead of
* going to QQS, the panel fully collapses. * going to QQS, the panel fully collapses.
*/ */
@JvmDefault @JvmDefault fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) {}
fun onExpandImmediateChanged(isExpandImmediateEnabled: Boolean) {}
} }
} }

View File

@@ -28,7 +28,7 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shade.NotifPanelEvents; import com.android.systemui.shade.ShadeStateEvents;
import com.android.systemui.statusbar.notification.collection.GroupEntry; import com.android.systemui.statusbar.notification.collection.GroupEntry;
import com.android.systemui.statusbar.notification.collection.ListEntry; import com.android.systemui.statusbar.notification.collection.ListEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline; import com.android.systemui.statusbar.notification.collection.NotifPipeline;
@@ -55,12 +55,12 @@ import javax.inject.Inject;
// TODO(b/204468557): Move to @CoordinatorScope // TODO(b/204468557): Move to @CoordinatorScope
@SysUISingleton @SysUISingleton
public class VisualStabilityCoordinator implements Coordinator, Dumpable, public class VisualStabilityCoordinator implements Coordinator, Dumpable,
NotifPanelEvents.Listener { ShadeStateEvents.ShadeStateEventsListener {
public static final String TAG = "VisualStability"; public static final String TAG = "VisualStability";
public static final boolean DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.VERBOSE); public static final boolean DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.VERBOSE);
private final DelayableExecutor mDelayableExecutor; private final DelayableExecutor mDelayableExecutor;
private final HeadsUpManager mHeadsUpManager; private final HeadsUpManager mHeadsUpManager;
private final NotifPanelEvents mNotifPanelEvents; private final ShadeStateEvents mShadeStateEvents;
private final StatusBarStateController mStatusBarStateController; private final StatusBarStateController mStatusBarStateController;
private final VisualStabilityProvider mVisualStabilityProvider; private final VisualStabilityProvider mVisualStabilityProvider;
private final WakefulnessLifecycle mWakefulnessLifecycle; private final WakefulnessLifecycle mWakefulnessLifecycle;
@@ -92,7 +92,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable,
DelayableExecutor delayableExecutor, DelayableExecutor delayableExecutor,
DumpManager dumpManager, DumpManager dumpManager,
HeadsUpManager headsUpManager, HeadsUpManager headsUpManager,
NotifPanelEvents notifPanelEvents, ShadeStateEvents shadeStateEvents,
StatusBarStateController statusBarStateController, StatusBarStateController statusBarStateController,
VisualStabilityProvider visualStabilityProvider, VisualStabilityProvider visualStabilityProvider,
WakefulnessLifecycle wakefulnessLifecycle) { WakefulnessLifecycle wakefulnessLifecycle) {
@@ -101,7 +101,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable,
mWakefulnessLifecycle = wakefulnessLifecycle; mWakefulnessLifecycle = wakefulnessLifecycle;
mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController;
mDelayableExecutor = delayableExecutor; mDelayableExecutor = delayableExecutor;
mNotifPanelEvents = notifPanelEvents; mShadeStateEvents = shadeStateEvents;
dumpManager.registerDumpable(this); dumpManager.registerDumpable(this);
} }
@@ -114,7 +114,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable,
mStatusBarStateController.addCallback(mStatusBarStateControllerListener); mStatusBarStateController.addCallback(mStatusBarStateControllerListener);
mPulsing = mStatusBarStateController.isPulsing(); mPulsing = mStatusBarStateController.isPulsing();
mNotifPanelEvents.registerListener(this); mShadeStateEvents.addShadeStateEventsListener(this);
pipeline.setVisualStabilityManager(mNotifStabilityManager); pipeline.setVisualStabilityManager(mNotifStabilityManager);
} }

View File

@@ -32,8 +32,8 @@ import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.people.widget.PeopleSpaceWidgetManager; import com.android.systemui.people.widget.PeopleSpaceWidgetManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.UserContextProvider; import com.android.systemui.settings.UserContextProvider;
import com.android.systemui.shade.NotifPanelEventsModule;
import com.android.systemui.shade.ShadeController; import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeEventsModule;
import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.notification.AssistantFeedbackController; import com.android.systemui.statusbar.notification.AssistantFeedbackController;
import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl; import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl;
@@ -93,7 +93,7 @@ import dagger.Provides;
@Module(includes = { @Module(includes = {
CoordinatorsModule.class, CoordinatorsModule.class,
KeyguardNotificationVisibilityProviderModule.class, KeyguardNotificationVisibilityProviderModule.class,
NotifPanelEventsModule.class, ShadeEventsModule.class,
NotifPipelineChoreographerModule.class, NotifPipelineChoreographerModule.class,
NotificationSectionHeadersModule.class, NotificationSectionHeadersModule.class,
}) })

View File

@@ -31,7 +31,7 @@ import com.android.systemui.dreams.DreamOverlayStateController
import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.media.dream.MediaDreamComplication import com.android.systemui.media.dream.MediaDreamComplication
import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.testing.FakeNotifPanelEvents import com.android.systemui.shade.ShadeExpansionStateManager
import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.SysuiStatusBarStateController
import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.phone.KeyguardBypassController
@@ -89,7 +89,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
private lateinit var mediaHierarchyManager: MediaHierarchyManager private lateinit var mediaHierarchyManager: MediaHierarchyManager
private lateinit var mediaFrame: ViewGroup private lateinit var mediaFrame: ViewGroup
private val configurationController = FakeConfigurationController() private val configurationController = FakeConfigurationController()
private val notifPanelEvents = FakeNotifPanelEvents() private val notifPanelEvents = ShadeExpansionStateManager()
private val settings = FakeSettings() private val settings = FakeSettings()
private lateinit var testableLooper: TestableLooper private lateinit var testableLooper: TestableLooper
private lateinit var fakeHandler: FakeHandler private lateinit var fakeHandler: FakeHandler
@@ -346,7 +346,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
@Test @Test
fun isCurrentlyInGuidedTransformation_hostsVisible_expandImmediateEnabled_returnsFalse() { fun isCurrentlyInGuidedTransformation_hostsVisible_expandImmediateEnabled_returnsFalse() {
notifPanelEvents.changeExpandImmediate(expandImmediate = true) notifPanelEvents.notifyExpandImmediateChange(true)
goToLockscreen() goToLockscreen()
enterGuidedTransformation() enterGuidedTransformation()
whenever(lockHost.visible).thenReturn(true) whenever(lockHost.visible).thenReturn(true)

View File

@@ -438,8 +438,6 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
when(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState); when(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState);
mMainHandler = new Handler(Looper.getMainLooper()); mMainHandler = new Handler(Looper.getMainLooper());
NotificationPanelViewController.PanelEventsEmitter panelEventsEmitter =
new NotificationPanelViewController.PanelEventsEmitter();
mNotificationPanelViewController = new NotificationPanelViewController( mNotificationPanelViewController = new NotificationPanelViewController(
mView, mView,
@@ -495,7 +493,6 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
() -> mKeyguardBottomAreaViewController, () -> mKeyguardBottomAreaViewController,
mKeyguardUnlockAnimationController, mKeyguardUnlockAnimationController,
mNotificationListContainer, mNotificationListContainer,
panelEventsEmitter,
mNotificationStackSizeCalculator, mNotificationStackSizeCalculator,
mUnlockedScreenOffAnimationController, mUnlockedScreenOffAnimationController,
mShadeTransitionController, mShadeTransitionController,

View File

@@ -1,37 +0,0 @@
/*
* Copyright (C) 2022 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.shade.testing
import com.android.systemui.shade.NotifPanelEvents
/** Fake implementation of [NotifPanelEvents] for testing. */
class FakeNotifPanelEvents : NotifPanelEvents {
private val listeners = mutableListOf<NotifPanelEvents.Listener>()
override fun registerListener(listener: NotifPanelEvents.Listener) {
listeners.add(listener)
}
override fun unregisterListener(listener: NotifPanelEvents.Listener) {
listeners.remove(listener)
}
fun changeExpandImmediate(expandImmediate: Boolean) {
listeners.forEach { it.onExpandImmediateChanged(expandImmediate) }
}
}

View File

@@ -36,7 +36,8 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.statusbar.StatusBarStateController; 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.notification.collection.GroupEntry; import com.android.systemui.statusbar.notification.collection.GroupEntry;
import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder; import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder;
import com.android.systemui.statusbar.notification.collection.NotifPipeline; import com.android.systemui.statusbar.notification.collection.NotifPipeline;
@@ -71,12 +72,12 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
@Mock private StatusBarStateController mStatusBarStateController; @Mock private StatusBarStateController mStatusBarStateController;
@Mock private Pluggable.PluggableListener<NotifStabilityManager> mInvalidateListener; @Mock private Pluggable.PluggableListener<NotifStabilityManager> mInvalidateListener;
@Mock private HeadsUpManager mHeadsUpManager; @Mock private HeadsUpManager mHeadsUpManager;
@Mock private NotifPanelEvents mNotifPanelEvents; @Mock private ShadeStateEvents mShadeStateEvents;
@Mock private VisualStabilityProvider mVisualStabilityProvider; @Mock private VisualStabilityProvider mVisualStabilityProvider;
@Captor private ArgumentCaptor<WakefulnessLifecycle.Observer> mWakefulnessObserverCaptor; @Captor private ArgumentCaptor<WakefulnessLifecycle.Observer> mWakefulnessObserverCaptor;
@Captor private ArgumentCaptor<StatusBarStateController.StateListener> mSBStateListenerCaptor; @Captor private ArgumentCaptor<StatusBarStateController.StateListener> mSBStateListenerCaptor;
@Captor private ArgumentCaptor<NotifPanelEvents.Listener> mNotifPanelEventsCallbackCaptor; @Captor private ArgumentCaptor<ShadeStateEventsListener> mNotifPanelEventsCallbackCaptor;
@Captor private ArgumentCaptor<NotifStabilityManager> mNotifStabilityManagerCaptor; @Captor private ArgumentCaptor<NotifStabilityManager> mNotifStabilityManagerCaptor;
private FakeSystemClock mFakeSystemClock = new FakeSystemClock(); private FakeSystemClock mFakeSystemClock = new FakeSystemClock();
@@ -84,7 +85,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
private WakefulnessLifecycle.Observer mWakefulnessObserver; private WakefulnessLifecycle.Observer mWakefulnessObserver;
private StatusBarStateController.StateListener mStatusBarStateListener; private StatusBarStateController.StateListener mStatusBarStateListener;
private NotifPanelEvents.Listener mNotifPanelEventsCallback; private ShadeStateEvents.ShadeStateEventsListener mNotifPanelEventsCallback;
private NotifStabilityManager mNotifStabilityManager; private NotifStabilityManager mNotifStabilityManager;
private NotificationEntry mEntry; private NotificationEntry mEntry;
private GroupEntry mGroupEntry; private GroupEntry mGroupEntry;
@@ -97,7 +98,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
mFakeExecutor, mFakeExecutor,
mDumpManager, mDumpManager,
mHeadsUpManager, mHeadsUpManager,
mNotifPanelEvents, mShadeStateEvents,
mStatusBarStateController, mStatusBarStateController,
mVisualStabilityProvider, mVisualStabilityProvider,
mWakefulnessLifecycle); mWakefulnessLifecycle);
@@ -111,7 +112,8 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
verify(mStatusBarStateController).addCallback(mSBStateListenerCaptor.capture()); verify(mStatusBarStateController).addCallback(mSBStateListenerCaptor.capture());
mStatusBarStateListener = mSBStateListenerCaptor.getValue(); mStatusBarStateListener = mSBStateListenerCaptor.getValue();
verify(mNotifPanelEvents).registerListener(mNotifPanelEventsCallbackCaptor.capture()); verify(mShadeStateEvents).addShadeStateEventsListener(
mNotifPanelEventsCallbackCaptor.capture());
mNotifPanelEventsCallback = mNotifPanelEventsCallbackCaptor.getValue(); mNotifPanelEventsCallback = mNotifPanelEventsCallbackCaptor.getValue();
verify(mNotifPipeline).setVisualStabilityManager(mNotifStabilityManagerCaptor.capture()); verify(mNotifPipeline).setVisualStabilityManager(mNotifStabilityManagerCaptor.capture());