diff options
21 files changed, 147 insertions, 298 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index cc59f8750b56..8dc97c0f797c 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -2629,6 +2629,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump if (isPanelExpanded() != isExpanded) { setExpandedOrAwaitingInputTransfer(isExpanded); updateSystemUiStateFlags(); + mShadeExpansionStateManager.onShadeExpansionFullyChanged(isExpanded); if (!isExpanded) { mQsController.closeQsCustomizer(); } diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt index 533927d5bf0a..0554c5855d61 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt @@ -36,6 +36,7 @@ import javax.inject.Inject class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents { private val expansionListeners = CopyOnWriteArrayList<ShadeExpansionListener>() + private val fullExpansionListeners = CopyOnWriteArrayList<ShadeFullExpansionListener>() private val qsExpansionListeners = CopyOnWriteArrayList<ShadeQsExpansionListener>() private val qsExpansionFractionListeners = CopyOnWriteArrayList<ShadeQsExpansionFractionListener>() @@ -66,6 +67,15 @@ class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents { expansionListeners.remove(listener) } + fun addFullExpansionListener(listener: ShadeFullExpansionListener) { + fullExpansionListeners.add(listener) + listener.onShadeExpansionFullyChanged(qsExpanded) + } + + fun removeFullExpansionListener(listener: ShadeFullExpansionListener) { + fullExpansionListeners.remove(listener) + } + fun addQsExpansionListener(listener: ShadeQsExpansionListener) { qsExpansionListeners.add(listener) listener.onQsExpansionChanged(qsExpanded) @@ -89,6 +99,11 @@ class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents { stateListeners.add(listener) } + /** Removes a state listener. */ + fun removeStateListener(listener: ShadeStateListener) { + stateListeners.remove(listener) + } + override fun addShadeStateEventsListener(listener: ShadeStateEventsListener) { shadeStateEventsListeners.addIfAbsent(listener) } @@ -181,6 +196,13 @@ class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents { } } + fun onShadeExpansionFullyChanged(isExpanded: Boolean) { + this.expanded = isExpanded + + debugLog("expanded=$isExpanded") + fullExpansionListeners.forEach { it.onShadeExpansionFullyChanged(isExpanded) } + } + /** Updates the panel state if necessary. */ fun updateState(@PanelState state: Int) { debugLog( diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeFullExpansionListener.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeFullExpansionListener.kt new file mode 100644 index 000000000000..6d13e1972255 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeFullExpansionListener.kt @@ -0,0 +1,23 @@ +/* + * 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 + +/** A listener interface to be notified of expansion events for the notification shade. */ +fun interface ShadeFullExpansionListener { + /** Invoked whenever the shade expansion changes, when it is fully collapsed or expanded */ + fun onShadeExpansionFullyChanged(isExpanded: Boolean) +} diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt index f043c717f923..2f684762a13a 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt @@ -148,13 +148,12 @@ constructor( * * TODO(b/300258424) remove all but the first sentence of this comment */ - val isAnyExpanded: StateFlow<Boolean> = + val isAnyExpanded: Flow<Boolean> = if (sceneContainerFlags.isEnabled()) { - anyExpansion.map { it > 0f }.distinctUntilChanged() - } else { - repository.legacyExpandedOrAwaitingInputTransfer - } - .stateIn(scope, SharingStarted.Eagerly, false) + anyExpansion.map { it > 0f }.distinctUntilChanged() + } else { + repository.legacyExpandedOrAwaitingInputTransfer + } /** * Whether the user is expanding or collapsing the shade with user input. This will be true even @@ -185,7 +184,7 @@ constructor( * but a transition they initiated is still animating. */ val isUserInteracting: Flow<Boolean> = - combine(isUserInteractingWithShade, isUserInteractingWithQs) { shade, qs -> shade || qs } + combine(isUserInteractingWithShade, isUserInteractingWithShade) { shade, qs -> shade || qs } .distinctUntilChanged() /** Are touches allowed on the notification panel? */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java index f7dc26104311..61ebcc0c99d1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java @@ -48,12 +48,11 @@ import androidx.annotation.Nullable; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; -import com.android.systemui.CoreStartable; import com.android.systemui.Dumpable; +import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.power.domain.interactor.PowerInteractor; import com.android.systemui.res.R; -import com.android.systemui.shade.domain.interactor.ShadeInteractor; import com.android.systemui.statusbar.dagger.CentralSurfacesDependenciesModule; import com.android.systemui.statusbar.notification.NotifPipelineFlags; import com.android.systemui.statusbar.notification.RemoteInputControllerLogger; @@ -66,7 +65,6 @@ import com.android.systemui.statusbar.policy.RemoteInputUriController; import com.android.systemui.statusbar.policy.RemoteInputView; import com.android.systemui.util.DumpUtilsKt; import com.android.systemui.util.ListenerSet; -import com.android.systemui.util.kotlin.JavaAdapter; import java.io.PrintWriter; import java.util.ArrayList; @@ -80,7 +78,7 @@ import java.util.function.Consumer; * interaction, keeping track of notifications to remove when NotificationPresenter is collapsed, * and handling clicks on remote views. */ -public class NotificationRemoteInputManager implements CoreStartable { +public class NotificationRemoteInputManager implements Dumpable { public static final boolean ENABLE_REMOTE_INPUT = SystemProperties.getBoolean("debug.enable_remote_input", true); public static boolean FORCE_REMOTE_INPUT_HISTORY = @@ -96,8 +94,6 @@ public class NotificationRemoteInputManager implements CoreStartable { private final NotificationVisibilityProvider mVisibilityProvider; private final PowerInteractor mPowerInteractor; private final ActionClickLogger mLogger; - private final JavaAdapter mJavaAdapter; - private final ShadeInteractor mShadeInteractor; protected final Context mContext; protected final NotifPipelineFlags mNotifPipelineFlags; private final UserManager mUserManager; @@ -265,8 +261,7 @@ public class NotificationRemoteInputManager implements CoreStartable { RemoteInputControllerLogger remoteInputControllerLogger, NotificationClickNotifier clickNotifier, ActionClickLogger logger, - JavaAdapter javaAdapter, - ShadeInteractor shadeInteractor) { + DumpManager dumpManager) { mContext = context; mNotifPipelineFlags = notifPipelineFlags; mLockscreenUserManager = lockscreenUserManager; @@ -274,8 +269,6 @@ public class NotificationRemoteInputManager implements CoreStartable { mVisibilityProvider = visibilityProvider; mPowerInteractor = powerInteractor; mLogger = logger; - mJavaAdapter = javaAdapter; - mShadeInteractor = shadeInteractor; mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); @@ -284,25 +277,8 @@ public class NotificationRemoteInputManager implements CoreStartable { mRemoteInputUriController = remoteInputUriController; mRemoteInputControllerLogger = remoteInputControllerLogger; mClickNotifier = clickNotifier; - } - @Override - public void start() { - mJavaAdapter.alwaysCollectFlow(mShadeInteractor.isAnyExpanded(), - this::onShadeOrQsExpanded); - } - - private void onShadeOrQsExpanded(boolean expanded) { - if (expanded && mStatusBarStateController.getState() != StatusBarState.KEYGUARD) { - try { - mBarService.clearNotificationEffects(); - } catch (RemoteException e) { - // Won't fail unless the world has ended. - } - } - if (!expanded) { - onPanelCollapsed(); - } + dumpManager.registerDumpable(this); } /** Add a listener for various remote input events. Works with NEW pipeline only. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java index 537f8a866fed..37a4ef168423 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java @@ -42,16 +42,15 @@ import com.android.internal.jank.InteractionJankMonitor.Configuration; import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardClockSwitch; import com.android.systemui.DejankUtils; +import com.android.systemui.Dumpable; +import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; -import com.android.systemui.res.R; -import com.android.systemui.shade.domain.interactor.ShadeInteractor; +import com.android.systemui.shade.ShadeExpansionStateManager; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.policy.CallbackController; import com.android.systemui.util.Compile; -import com.android.systemui.util.kotlin.JavaAdapter; - -import dagger.Lazy; import java.io.PrintWriter; import java.util.ArrayList; @@ -65,7 +64,8 @@ import javax.inject.Inject; @SysUISingleton public class StatusBarStateControllerImpl implements SysuiStatusBarStateController, - CallbackController<StateListener> { + CallbackController<StateListener>, + Dumpable { private static final String TAG = "SbStateController"; private static final boolean DEBUG_IMMERSIVE_APPS = SystemProperties.getBoolean("persist.debug.immersive_apps", false); @@ -95,8 +95,6 @@ public class StatusBarStateControllerImpl implements private final ArrayList<RankedListener> mListeners = new ArrayList<>(); private final UiEventLogger mUiEventLogger; private final InteractionJankMonitor mInteractionJankMonitor; - private final JavaAdapter mJavaAdapter; - private final Lazy<ShadeInteractor> mShadeInteractorLazy; private int mState; private int mLastState; private int mUpcomingState; @@ -158,22 +156,18 @@ public class StatusBarStateControllerImpl implements @Inject public StatusBarStateControllerImpl( UiEventLogger uiEventLogger, + DumpManager dumpManager, InteractionJankMonitor interactionJankMonitor, - JavaAdapter javaAdapter, - Lazy<ShadeInteractor> shadeInteractorLazy) { + ShadeExpansionStateManager shadeExpansionStateManager + ) { mUiEventLogger = uiEventLogger; mInteractionJankMonitor = interactionJankMonitor; - mJavaAdapter = javaAdapter; - mShadeInteractorLazy = shadeInteractorLazy; for (int i = 0; i < HISTORY_SIZE; i++) { mHistoricalRecords[i] = new HistoricalState(); } - } + shadeExpansionStateManager.addFullExpansionListener(this::onShadeExpansionFullyChanged); - @Override - public void start() { - mJavaAdapter.alwaysCollectFlow(mShadeInteractorLazy.get().isAnyExpanded(), - this::onShadeOrQsExpanded); + dumpManager.registerDumpable(this); } @Override @@ -351,7 +345,7 @@ public class StatusBarStateControllerImpl implements } } - private void onShadeOrQsExpanded(Boolean isExpanded) { + private void onShadeExpansionFullyChanged(Boolean isExpanded) { if (mIsExpanded != isExpanded) { mIsExpanded = isExpanded; String tag = getClass().getSimpleName() + "#setIsExpanded"; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java b/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java index 8104755b5e7b..aa32d5c4dee9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java @@ -21,7 +21,6 @@ import static java.lang.annotation.RetentionPolicy.SOURCE; import android.annotation.IntDef; import android.view.View; -import com.android.systemui.CoreStartable; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.phone.CentralSurfaces; @@ -30,7 +29,7 @@ import java.lang.annotation.Retention; /** * Sends updates to {@link StateListener}s about changes to the status bar state and dozing state */ -public interface SysuiStatusBarStateController extends StatusBarStateController, CoreStartable { +public interface SysuiStatusBarStateController extends StatusBarStateController { // TODO: b/115739177 (remove this explicit ordering if we can) @Retention(SOURCE) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java index 1484f9a4dc9d..1fe6b83b47b1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java @@ -23,7 +23,6 @@ import android.util.Log; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.statusbar.IStatusBarService; -import com.android.systemui.CoreStartable; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.AnimationFeatureFlags; import com.android.systemui.animation.DialogLaunchAnimator; @@ -40,7 +39,6 @@ import com.android.systemui.settings.DisplayTracker; import com.android.systemui.shade.NotificationPanelViewController; import com.android.systemui.shade.ShadeSurface; import com.android.systemui.shade.carrier.ShadeCarrierGroupController; -import com.android.systemui.shade.domain.interactor.ShadeInteractor; import com.android.systemui.statusbar.ActionClickLogger; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.NotificationClickNotifier; @@ -66,14 +64,11 @@ import com.android.systemui.statusbar.phone.StatusBarNotificationPresenterModule import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.RemoteInputUriController; -import com.android.systemui.util.kotlin.JavaAdapter; import dagger.Binds; import dagger.Lazy; import dagger.Module; import dagger.Provides; -import dagger.multibindings.ClassKey; -import dagger.multibindings.IntoMap; /** * This module provides instances needed to construct {@link CentralSurfacesImpl}. These are moved to @@ -84,6 +79,7 @@ import dagger.multibindings.IntoMap; @Module(includes = {StatusBarNotificationPresenterModule.class}) public interface CentralSurfacesDependenciesModule { /** */ + @SysUISingleton @Provides static NotificationRemoteInputManager provideNotificationRemoteInputManager( Context context, @@ -97,8 +93,7 @@ public interface CentralSurfacesDependenciesModule { RemoteInputControllerLogger remoteInputControllerLogger, NotificationClickNotifier clickNotifier, ActionClickLogger actionClickLogger, - JavaAdapter javaAdapter, - ShadeInteractor shadeInteractor) { + DumpManager dumpManager) { return new NotificationRemoteInputManager( context, notifPipelineFlags, @@ -111,17 +106,10 @@ public interface CentralSurfacesDependenciesModule { remoteInputControllerLogger, clickNotifier, actionClickLogger, - javaAdapter, - shadeInteractor); + dumpManager); } /** */ - @Binds - @IntoMap - @ClassKey(NotificationRemoteInputManager.class) - CoreStartable bindsStartNotificationRemoteInputManager(NotificationRemoteInputManager nrim); - - /** */ @SysUISingleton @Provides static NotificationMediaManager provideNotificationMediaManager( @@ -176,23 +164,20 @@ public interface CentralSurfacesDependenciesModule { return new CommandQueue(context, displayTracker, registry, dumpHandler, powerInteractor); } - /** */ + /** + */ @Binds ManagedProfileController provideManagedProfileController( ManagedProfileControllerImpl controllerImpl); - /** */ + /** + */ @Binds SysuiStatusBarStateController providesSysuiStatusBarStateController( StatusBarStateControllerImpl statusBarStateControllerImpl); - /** */ - @Binds - @IntoMap - @ClassKey(SysuiStatusBarStateController.class) - CoreStartable bindsStartStatusBarStateController(StatusBarStateControllerImpl sbsc); - - /** */ + /** + */ @Binds StatusBarIconController provideStatusBarIconController( StatusBarIconControllerImpl controllerImpl); @@ -227,14 +212,16 @@ public interface CentralSurfacesDependenciesModule { ShadeCarrierGroupController.SlotIndexResolver provideSlotIndexResolver( ShadeCarrierGroupController.SubscriptionManagerSlotIndexResolver impl); - /** */ + /** + */ @Provides @SysUISingleton static ActivityLaunchAnimator provideActivityLaunchAnimator() { return new ActivityLaunchAnimator(); } - /** */ + /** + */ @Provides @SysUISingleton static DialogLaunchAnimator provideDialogLaunchAnimator(IDreamManager dreamManager, @@ -266,7 +253,8 @@ public interface CentralSurfacesDependenciesModule { return new DialogLaunchAnimator(callback, interactionJankMonitor, animationFeatureFlags); } - /** */ + /** + */ @Provides @SysUISingleton static AnimationFeatureFlags provideAnimationFeatureFlags(FeatureFlags featureFlags) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProvider.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProvider.java index b0155f13dbec..6ec9dbe003a2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProvider.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProvider.java @@ -180,9 +180,4 @@ public interface NotificationInterruptStateProvider { * Add a component that can suppress visual interruptions. */ void addSuppressor(NotificationInterruptSuppressor suppressor); - - /** - * Remove a component that can suppress visual interruptions. - */ - void removeSuppressor(NotificationInterruptSuppressor suppressor); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java index 778a0a90cd85..3819843aa7b2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java @@ -175,11 +175,6 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter } @Override - public void removeSuppressor(NotificationInterruptSuppressor suppressor) { - mSuppressors.remove(suppressor); - } - - @Override public boolean shouldBubbleUp(NotificationEntry entry) { final StatusBarNotification sbn = entry.getSbn(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderWrapper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderWrapper.kt index d7f0baf4f002..ebdeded6e329 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderWrapper.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderWrapper.kt @@ -58,10 +58,6 @@ class NotificationInterruptStateProviderWrapper( wrapped.addSuppressor(suppressor) } - override fun removeLegacySuppressor(suppressor: NotificationInterruptSuppressor) { - wrapped.removeSuppressor(suppressor) - } - override fun makeUnloggedHeadsUpDecision(entry: NotificationEntry): Decision = wrapped.checkHeadsUp(entry, /* log= */ false).let { DecisionImpl.of(it) } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/VisualInterruptionDecisionProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/VisualInterruptionDecisionProvider.kt index 920bbe96b33b..454ba02b2d73 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/VisualInterruptionDecisionProvider.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/VisualInterruptionDecisionProvider.kt @@ -60,13 +60,6 @@ interface VisualInterruptionDecisionProvider { fun addLegacySuppressor(suppressor: NotificationInterruptSuppressor) /** - * Removes a [component][suppressor] that can suppress visual interruptions. - * - * @param[suppressor] the suppressor to remove - */ - fun removeLegacySuppressor(suppressor: NotificationInterruptSuppressor) - - /** * Decides whether a [notification][entry] should display as heads-up or not, but does not log * that decision. * diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index c5f696a55c1c..7cd32f977422 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -813,6 +813,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { mShadeExpansionStateManager.addExpansionListener(shadeExpansionListener); shadeExpansionListener.onPanelExpansionChanged(currentState); + mShadeExpansionStateManager.addFullExpansionListener(this::onShadeExpansionFullyChanged); + mActivityIntentHelper = new ActivityIntentHelper(mContext); mActivityLaunchAnimator = activityLaunchAnimator; @@ -1399,6 +1401,20 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { } } + @VisibleForTesting + void onShadeExpansionFullyChanged(Boolean isExpanded) { + if (isExpanded && mStatusBarStateController.getState() != StatusBarState.KEYGUARD) { + if (DEBUG) { + Log.v(TAG, "clearing notification effects from Height"); + } + clearNotificationEffects(); + } + + if (!isExpanded) { + mRemoteInputManager.onPanelCollapsed(); + } + } + @NonNull @Override public Lifecycle getLifecycle() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java index 3a95e6d053e8..f4862c73606f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java @@ -34,7 +34,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.res.R; -import com.android.systemui.shade.domain.interactor.ShadeInteractor; +import com.android.systemui.shade.ShadeExpansionStateManager; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.provider.OnReorderingAllowedListener; @@ -48,7 +48,6 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.HeadsUpManagerLogger; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; import com.android.systemui.statusbar.policy.OnHeadsUpPhoneListenerChange; -import com.android.systemui.util.kotlin.JavaAdapter; import java.io.PrintWriter; import java.util.ArrayList; @@ -106,8 +105,7 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements OnHeadsUp /////////////////////////////////////////////////////////////////////////////////////////////// // Constructor: @Inject - public HeadsUpManagerPhone( - @NonNull final Context context, + public HeadsUpManagerPhone(@NonNull final Context context, HeadsUpManagerLogger logger, StatusBarStateController statusBarStateController, KeyguardBypassController bypassController, @@ -117,8 +115,7 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements OnHeadsUp @Main Handler handler, AccessibilityManagerWrapper accessibilityManagerWrapper, UiEventLogger uiEventLogger, - JavaAdapter javaAdapter, - ShadeInteractor shadeInteractor) { + ShadeExpansionStateManager shadeExpansionStateManager) { super(context, logger, handler, accessibilityManagerWrapper, uiEventLogger); Resources resources = mContext.getResources(); mExtensionTime = resources.getInteger(R.integer.ambient_notification_extension_time); @@ -139,7 +136,8 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements OnHeadsUp updateResources(); } }); - javaAdapter.alwaysCollectFlow(shadeInteractor.isAnyExpanded(), this::onShadeOrQsExpanded); + + shadeExpansionStateManager.addFullExpansionListener(this::onShadeExpansionFullyChanged); } public void setAnimationStateHandler(AnimationStateHandler handler) { @@ -232,7 +230,7 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements OnHeadsUp mTrackingHeadsUp = trackingHeadsUp; } - private void onShadeOrQsExpanded(Boolean isExpanded) { + private void onShadeExpansionFullyChanged(Boolean isExpanded) { if (isExpanded != mIsExpanded) { mIsExpanded = isExpanded; if (isExpanded) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHideIconsForBouncerManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHideIconsForBouncerManager.kt index fa6d2797a37e..4d9de09fded4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHideIconsForBouncerManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHideIconsForBouncerManager.kt @@ -3,15 +3,12 @@ package com.android.systemui.statusbar.phone import android.app.StatusBarManager import com.android.systemui.Dumpable import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager -import com.android.systemui.shade.domain.interactor.ShadeInteractor +import com.android.systemui.shade.ShadeExpansionStateManager import com.android.systemui.statusbar.CommandQueue import com.android.systemui.statusbar.window.StatusBarWindowStateController import com.android.systemui.util.concurrency.DelayableExecutor -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.launch import java.io.PrintWriter import javax.inject.Inject @@ -28,14 +25,14 @@ import javax.inject.Inject */ @SysUISingleton class StatusBarHideIconsForBouncerManager @Inject constructor( - @Application private val scope: CoroutineScope, - private val commandQueue: CommandQueue, - @Main private val mainExecutor: DelayableExecutor, - statusBarWindowStateController: StatusBarWindowStateController, - val shadeInteractor: ShadeInteractor, - dumpManager: DumpManager + private val commandQueue: CommandQueue, + @Main private val mainExecutor: DelayableExecutor, + statusBarWindowStateController: StatusBarWindowStateController, + shadeExpansionStateManager: ShadeExpansionStateManager, + dumpManager: DumpManager ) : Dumpable { // State variables set by external classes. + private var panelExpanded: Boolean = false private var isOccluded: Boolean = false private var bouncerShowing: Boolean = false private var topAppHidesStatusBar: Boolean = false @@ -52,9 +49,10 @@ class StatusBarHideIconsForBouncerManager @Inject constructor( statusBarWindowStateController.addListener { state -> setStatusBarStateAndTriggerUpdate(state) } - scope.launch { - shadeInteractor.isAnyExpanded.collect { - updateHideIconsForBouncer(false) + shadeExpansionStateManager.addFullExpansionListener { isExpanded -> + if (panelExpanded != isExpanded) { + panelExpanded = isExpanded + updateHideIconsForBouncer(animate = false) } } } @@ -103,7 +101,7 @@ class StatusBarHideIconsForBouncerManager @Inject constructor( topAppHidesStatusBar && isOccluded && (statusBarWindowHidden || bouncerShowing) - val hideBecauseKeyguard = !isShadeOrQsExpanded() && !isOccluded && bouncerShowing + val hideBecauseKeyguard = !panelExpanded && !isOccluded && bouncerShowing val shouldHideIconsForBouncer = hideBecauseApp || hideBecauseKeyguard if (hideIconsForBouncer != shouldHideIconsForBouncer) { hideIconsForBouncer = shouldHideIconsForBouncer @@ -127,13 +125,9 @@ class StatusBarHideIconsForBouncerManager @Inject constructor( } } - private fun isShadeOrQsExpanded(): Boolean { - return shadeInteractor.isAnyExpanded.value - } - override fun dump(pw: PrintWriter, args: Array<out String>) { pw.println("---- State variables set externally ----") - pw.println("isShadeOrQsExpanded=${isShadeOrQsExpanded()}") + pw.println("panelExpanded=$panelExpanded") pw.println("isOccluded=$isOccluded") pw.println("bouncerShowing=$bouncerShowing") pw.println("topAppHideStatusBar=$topAppHidesStatusBar") diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java index 6d8ec44ad55e..ba73c1098637 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java @@ -39,7 +39,6 @@ import com.android.systemui.res.R; import com.android.systemui.scene.domain.interactor.SceneInteractor; import com.android.systemui.scene.shared.flag.SceneContainerFlags; import com.android.systemui.shade.ShadeExpansionStateManager; -import com.android.systemui.shade.domain.interactor.ShadeInteractor; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; @@ -87,9 +86,8 @@ public final class StatusBarTouchableRegionManager implements Dumpable { ConfigurationController configurationController, HeadsUpManager headsUpManager, ShadeExpansionStateManager shadeExpansionStateManager, - ShadeInteractor shadeInteractor, Provider<SceneInteractor> sceneInteractor, - JavaAdapter javaAdapter, + Provider<JavaAdapter> javaAdapter, SceneContainerFlags sceneContainerFlags, UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, PrimaryBouncerInteractor primaryBouncerInteractor, @@ -128,12 +126,12 @@ public final class StatusBarTouchableRegionManager implements Dumpable { }); mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController; - javaAdapter.alwaysCollectFlow(shadeInteractor.isAnyExpanded(), this::onShadeOrQsExpanded); + shadeExpansionStateManager.addFullExpansionListener(this::onShadeExpansionFullyChanged); if (sceneContainerFlags.isEnabled()) { - javaAdapter.alwaysCollectFlow( + javaAdapter.get().alwaysCollectFlow( sceneInteractor.get().isVisible(), - this::onShadeOrQsExpanded); + this::onShadeExpansionFullyChanged); } mPrimaryBouncerInteractor = primaryBouncerInteractor; @@ -153,7 +151,7 @@ public final class StatusBarTouchableRegionManager implements Dumpable { pw.println(mTouchableRegion); } - private void onShadeOrQsExpanded(Boolean isExpanded) { + private void onShadeExpansionFullyChanged(Boolean isExpanded) { if (isExpanded != mIsStatusBarExpanded) { mIsStatusBarExpanded = isExpanded; if (isExpanded) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java index 2ce4b04b037a..6223e250d603 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java @@ -84,7 +84,6 @@ import com.android.systemui.biometrics.AuthController; import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor; import com.android.systemui.classifier.FalsingCollectorFake; import com.android.systemui.classifier.FalsingManagerFake; -import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository; import com.android.systemui.common.ui.view.LongPressHandlingView; import com.android.systemui.doze.DozeLog; import com.android.systemui.dump.DumpManager; @@ -121,8 +120,6 @@ import com.android.systemui.plugins.qs.QS; import com.android.systemui.power.domain.interactor.PowerInteractor; import com.android.systemui.qs.QSFragmentLegacy; import com.android.systemui.res.R; -import com.android.systemui.scene.SceneTestUtils; -import com.android.systemui.scene.shared.flag.FakeSceneContainerFlags; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.shade.data.repository.FakeShadeRepository; import com.android.systemui.shade.data.repository.ShadeRepository; @@ -140,7 +137,6 @@ import com.android.systemui.statusbar.QsFrameTranslateController; import com.android.systemui.statusbar.StatusBarStateControllerImpl; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.VibratorHelper; -import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository; import com.android.systemui.statusbar.notification.ConversationNotificationManager; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; @@ -172,7 +168,6 @@ import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; import com.android.systemui.statusbar.phone.TapAgainViewController; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; -import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeUserSetupRepository; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.HeadsUpManager; @@ -181,10 +176,8 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardUserSwitcherController; import com.android.systemui.statusbar.policy.KeyguardUserSwitcherView; import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController; -import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository; import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.unfold.SysUIUnfoldComponent; -import com.android.systemui.user.domain.interactor.UserSwitcherInteractor; import com.android.systemui.util.kotlin.JavaAdapter; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.time.SystemClock; @@ -204,8 +197,6 @@ import java.util.List; import java.util.Optional; import kotlinx.coroutines.CoroutineDispatcher; -import kotlinx.coroutines.flow.StateFlowKt; -import kotlinx.coroutines.test.TestScope; public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { @@ -333,6 +324,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { mEmptySpaceClickListenerCaptor; @Mock protected ActivityStarter mActivityStarter; @Mock protected KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor; + @Mock private ShadeInteractor mShadeInteractor; @Mock private JavaAdapter mJavaAdapter; @Mock private CastController mCastController; @Mock private KeyguardRootView mKeyguardRootView; @@ -343,9 +335,6 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { protected KeyguardBottomAreaInteractor mKeyguardBottomAreaInteractor; protected FakeKeyguardRepository mFakeKeyguardRepository; protected KeyguardInteractor mKeyguardInteractor; - protected SceneTestUtils mUtils = new SceneTestUtils(this); - protected TestScope mTestScope = mUtils.getTestScope(); - protected ShadeInteractor mShadeInteractor; protected PowerInteractor mPowerInteractor; protected NotificationPanelViewController.TouchHandler mTouchHandler; protected ConfigurationController mConfigurationController; @@ -381,31 +370,10 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { mKeyguardInteractor = keyguardInteractorDeps.getKeyguardInteractor(); mShadeRepository = new FakeShadeRepository(); mPowerInteractor = keyguardInteractorDeps.getPowerInteractor(); - when(mKeyguardTransitionInteractor.isInTransitionToStateWhere(any())).thenReturn( - StateFlowKt.MutableStateFlow(false)); - mShadeInteractor = new ShadeInteractor( - mTestScope.getBackgroundScope(), - new FakeDeviceProvisioningRepository(), - new FakeDisableFlagsRepository(), - mDozeParameters, - new FakeSceneContainerFlags(), - mUtils::sceneInteractor, - mFakeKeyguardRepository, - mKeyguardTransitionInteractor, - mPowerInteractor, - new FakeUserSetupRepository(), - mock(UserSwitcherInteractor.class), - new SharedNotificationContainerInteractor( - new FakeConfigurationRepository(), - mContext, - new ResourcesSplitShadeStateController() - ), - mShadeRepository - ); SystemClock systemClock = new FakeSystemClock(); - mStatusBarStateController = new StatusBarStateControllerImpl(mUiEventLogger, - mInteractionJankMonitor, mJavaAdapter, () -> mShadeInteractor); + mStatusBarStateController = new StatusBarStateControllerImpl(mUiEventLogger, mDumpManager, + mInteractionJankMonitor, mShadeExpansionStateManager); KeyguardStatusView keyguardStatusView = new KeyguardStatusView(mContext); keyguardStatusView.setId(R.id.keyguard_status_view); @@ -564,9 +532,8 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { new NotificationWakeUpCoordinator( mDumpManager, mock(HeadsUpManager.class), - new StatusBarStateControllerImpl(new UiEventLoggerFake(), - mInteractionJankMonitor, - mJavaAdapter, () -> mShadeInteractor), + new StatusBarStateControllerImpl(new UiEventLoggerFake(), mDumpManager, + mInteractionJankMonitor, mShadeExpansionStateManager), mKeyguardBypassController, mDozeParameters, mScreenOffAnimationController, diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java index ec00b177a472..0fcfaf960737 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java @@ -188,8 +188,8 @@ public class QuickSettingsControllerBaseTest extends SysuiTestCase { public void setup() { MockitoAnnotations.initMocks(this); when(mPanelViewControllerLazy.get()).thenReturn(mNotificationPanelViewController); - mStatusBarStateController = new StatusBarStateControllerImpl(mUiEventLogger, - mInteractionJankMonitor, mock(JavaAdapter.class), () -> mShadeInteractor); + mStatusBarStateController = new StatusBarStateControllerImpl(mUiEventLogger, mDumpManager, + mInteractionJankMonitor, mShadeExpansionStateManager); FakeDeviceProvisioningRepository deviceProvisioningRepository = new FakeDeviceProvisioningRepository(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java index 560ebc6c3d98..764f7b6b8887 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java @@ -33,9 +33,9 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.power.domain.interactor.PowerInteractor; -import com.android.systemui.shade.domain.interactor.ShadeInteractor; import com.android.systemui.statusbar.notification.NotifPipelineFlags; import com.android.systemui.statusbar.notification.RemoteInputControllerLogger; import com.android.systemui.statusbar.notification.collection.NotificationEntry; @@ -43,7 +43,6 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntryB import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.policy.RemoteInputUriController; -import com.android.systemui.util.kotlin.JavaAdapter; import org.junit.Before; import org.junit.Test; @@ -88,8 +87,7 @@ public class NotificationRemoteInputManagerTest extends SysuiTestCase { new RemoteInputControllerLogger(logcatLogBuffer()), mClickNotifier, new ActionClickLogger(logcatLogBuffer()), - mock(JavaAdapter.class), - mock(ShadeInteractor.class)); + mock(DumpManager.class)); mEntry = new NotificationEntryBuilder() .setPkg(TEST_PACKAGE_NAME) .setOpPkg(TEST_PACKAGE_NAME) @@ -147,8 +145,7 @@ public class NotificationRemoteInputManagerTest extends SysuiTestCase { RemoteInputControllerLogger remoteInputControllerLogger, NotificationClickNotifier clickNotifier, ActionClickLogger actionClickLogger, - JavaAdapter javaAdapter, - ShadeInteractor shadeInteractor) { + DumpManager dumpManager) { super( context, notifPipelineFlags, @@ -161,8 +158,7 @@ public class NotificationRemoteInputManagerTest extends SysuiTestCase { remoteInputControllerLogger, clickNotifier, actionClickLogger, - javaAdapter, - shadeInteractor); + dumpManager); } public void setUpWithPresenterForTest(Callback callback, @@ -174,4 +170,3 @@ public class NotificationRemoteInputManagerTest extends SysuiTestCase { } } - diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt index 43b0007e0f45..3327e42b930f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt @@ -23,31 +23,9 @@ import androidx.test.filters.SmallTest import com.android.internal.jank.InteractionJankMonitor import com.android.internal.logging.testing.UiEventLoggerFake import com.android.systemui.SysuiTestCase -import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository -import com.android.systemui.classifier.FalsingCollectorFake -import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository -import com.android.systemui.deviceentry.data.repository.FakeDeviceEntryRepository -import com.android.systemui.flags.FakeFeatureFlagsClassic -import com.android.systemui.keyguard.data.repository.FakeCommandQueue -import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository -import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository -import com.android.systemui.keyguard.domain.interactor.FromLockscreenTransitionInteractor -import com.android.systemui.keyguard.domain.interactor.FromPrimaryBouncerTransitionInteractor -import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor -import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor +import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.statusbar.StatusBarStateController -import com.android.systemui.power.data.repository.FakePowerRepository -import com.android.systemui.power.domain.interactor.PowerInteractor -import com.android.systemui.scene.SceneTestUtils -import com.android.systemui.scene.shared.flag.FakeSceneContainerFlags -import com.android.systemui.shade.data.repository.FakeShadeRepository -import com.android.systemui.shade.domain.interactor.ShadeInteractor -import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository -import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor -import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeUserSetupRepository -import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController -import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository -import com.android.systemui.util.mockito.mock +import com.android.systemui.shade.ShadeExpansionStateManager import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue @@ -62,22 +40,17 @@ import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.mock import org.mockito.Mockito.verify -import org.mockito.MockitoAnnotations import org.mockito.Mockito.`when` as whenever +import org.mockito.MockitoAnnotations @SmallTest @RunWith(AndroidTestingRunner::class) @TestableLooper.RunWithLooper class StatusBarStateControllerImplTest : SysuiTestCase() { - private val utils = SceneTestUtils(this) - private val testScope = utils.testScope - private lateinit var shadeInteractor: ShadeInteractor - private lateinit var fromLockscreenTransitionInteractor: FromLockscreenTransitionInteractor - private lateinit var fromPrimaryBouncerTransitionInteractor: - FromPrimaryBouncerTransitionInteractor @Mock lateinit var interactionJankMonitor: InteractionJankMonitor - @Mock lateinit var mockDarkAnimator: ObjectAnimator + @Mock private lateinit var mockDarkAnimator: ObjectAnimator + @Mock private lateinit var shadeExpansionStateManager: ShadeExpansionStateManager private lateinit var controller: StatusBarStateControllerImpl private lateinit var uiEventLogger: UiEventLoggerFake @@ -91,76 +64,11 @@ class StatusBarStateControllerImplTest : SysuiTestCase() { uiEventLogger = UiEventLoggerFake() controller = object : StatusBarStateControllerImpl( uiEventLogger, - interactionJankMonitor, - mock(), - { shadeInteractor } + mock(DumpManager::class.java), + interactionJankMonitor, shadeExpansionStateManager ) { override fun createDarkAnimator(): ObjectAnimator { return mockDarkAnimator } } - - val powerInteractor = PowerInteractor( - FakePowerRepository(), - FalsingCollectorFake(), - mock(), - controller) - val keyguardRepository = FakeKeyguardRepository() - val keyguardTransitionRepository = FakeKeyguardTransitionRepository() - val featureFlags = FakeFeatureFlagsClassic() - val shadeRepository = FakeShadeRepository() - val sceneContainerFlags = FakeSceneContainerFlags() - val configurationRepository = FakeConfigurationRepository() - val keyguardInteractor = KeyguardInteractor( - keyguardRepository, - FakeCommandQueue(), - powerInteractor, - featureFlags, - sceneContainerFlags, - FakeDeviceEntryRepository(), - FakeKeyguardBouncerRepository(), - configurationRepository, - shadeRepository, - utils::sceneInteractor) - val keyguardTransitionInteractor = KeyguardTransitionInteractor( - testScope.backgroundScope, - keyguardTransitionRepository, - { keyguardInteractor }, - { fromLockscreenTransitionInteractor }, - { fromPrimaryBouncerTransitionInteractor }) - fromLockscreenTransitionInteractor = FromLockscreenTransitionInteractor( - keyguardTransitionRepository, - keyguardTransitionInteractor, - testScope.backgroundScope, - keyguardInteractor, - featureFlags, - shadeRepository, - powerInteractor) - fromPrimaryBouncerTransitionInteractor = FromPrimaryBouncerTransitionInteractor( - keyguardTransitionRepository, - keyguardTransitionInteractor, - testScope.backgroundScope, - keyguardInteractor, - featureFlags, - mock(), - mock(), - powerInteractor) - shadeInteractor = ShadeInteractor( - testScope.backgroundScope, - FakeDeviceProvisioningRepository(), - FakeDisableFlagsRepository(), - mock(), - sceneContainerFlags, - utils::sceneInteractor, - keyguardRepository, - keyguardTransitionInteractor, - powerInteractor, - FakeUserSetupRepository(), - mock(), - SharedNotificationContainerInteractor( - configurationRepository, - mContext, - ResourcesSplitShadeStateController()), - shadeRepository, - ) } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java index 48b95d407246..cda2a74609bd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java @@ -34,7 +34,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.UiEventLogger; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.res.R; -import com.android.systemui.shade.domain.interactor.ShadeInteractor; +import com.android.systemui.shade.ShadeExpansionStateManager; import com.android.systemui.statusbar.AlertingNotificationManager; import com.android.systemui.statusbar.AlertingNotificationManagerTest; import com.android.systemui.statusbar.NotificationShadeWindowController; @@ -45,7 +45,6 @@ import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.HeadsUpManagerLogger; -import com.android.systemui.util.kotlin.JavaAdapter; import org.junit.After; import org.junit.Before; @@ -57,8 +56,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -import kotlinx.coroutines.flow.StateFlowKt; - @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper @@ -73,9 +70,8 @@ public class HeadsUpManagerPhoneTest extends AlertingNotificationManagerTest { @Mock private KeyguardBypassController mBypassController; @Mock private ConfigurationControllerImpl mConfigurationController; @Mock private AccessibilityManagerWrapper mAccessibilityManagerWrapper; + @Mock private ShadeExpansionStateManager mShadeExpansionStateManager; @Mock private UiEventLogger mUiEventLogger; - @Mock private JavaAdapter mJavaAdapter; - @Mock private ShadeInteractor mShadeInteractor; private static final class TestableHeadsUpManagerPhone extends HeadsUpManagerPhone { TestableHeadsUpManagerPhone( @@ -89,8 +85,7 @@ public class HeadsUpManagerPhoneTest extends AlertingNotificationManagerTest { Handler handler, AccessibilityManagerWrapper accessibilityManagerWrapper, UiEventLogger uiEventLogger, - JavaAdapter javaAdapter, - ShadeInteractor shadeInteractor + ShadeExpansionStateManager shadeExpansionStateManager ) { super( context, @@ -103,8 +98,7 @@ public class HeadsUpManagerPhoneTest extends AlertingNotificationManagerTest { handler, accessibilityManagerWrapper, uiEventLogger, - javaAdapter, - shadeInteractor + shadeExpansionStateManager ); mMinimumDisplayTime = TEST_MINIMUM_DISPLAY_TIME; mAutoDismissNotificationDecay = TEST_AUTO_DISMISS_TIME; @@ -123,8 +117,7 @@ public class HeadsUpManagerPhoneTest extends AlertingNotificationManagerTest { mTestHandler, mAccessibilityManagerWrapper, mUiEventLogger, - mJavaAdapter, - mShadeInteractor + mShadeExpansionStateManager ); } @@ -136,7 +129,6 @@ public class HeadsUpManagerPhoneTest extends AlertingNotificationManagerTest { @Before @Override public void setUp() { - when(mShadeInteractor.isAnyExpanded()).thenReturn(StateFlowKt.MutableStateFlow(false)); final AccessibilityManagerWrapper accessibilityMgr = mDependency.injectMockDependency(AccessibilityManagerWrapper.class); when(accessibilityMgr.getRecommendedTimeoutMillis(anyInt(), anyInt())) |