Merge "Fix bubbles hiding when unlocked with showOnLockscreen Activity" into tm-qpr-dev

This commit is contained in:
Mady Mellor
2022-08-22 23:33:33 +00:00
committed by Android (Google) Code Review
3 changed files with 45 additions and 2 deletions

View File

@@ -18,6 +18,7 @@ package com.android.systemui.dagger;
import android.app.INotificationManager; import android.app.INotificationManager;
import android.content.Context; import android.content.Context;
import android.service.dreams.IDreamManager;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -213,6 +214,7 @@ public abstract class SystemUIModule {
ShadeController shadeController, ShadeController shadeController,
@Nullable IStatusBarService statusBarService, @Nullable IStatusBarService statusBarService,
INotificationManager notificationManager, INotificationManager notificationManager,
IDreamManager dreamManager,
NotificationVisibilityProvider visibilityProvider, NotificationVisibilityProvider visibilityProvider,
NotificationInterruptStateProvider interruptionStateProvider, NotificationInterruptStateProvider interruptionStateProvider,
ZenModeController zenModeController, ZenModeController zenModeController,
@@ -230,6 +232,7 @@ public abstract class SystemUIModule {
shadeController, shadeController,
statusBarService, statusBarService,
notificationManager, notificationManager,
dreamManager,
visibilityProvider, visibilityProvider,
interruptionStateProvider, interruptionStateProvider,
zenModeController, zenModeController,

View File

@@ -38,6 +38,7 @@ import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.os.UserHandle; import android.os.UserHandle;
import android.provider.Settings; import android.provider.Settings;
import android.service.dreams.IDreamManager;
import android.service.notification.NotificationListenerService.RankingMap; import android.service.notification.NotificationListenerService.RankingMap;
import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig;
import android.util.Log; import android.util.Log;
@@ -101,6 +102,7 @@ public class BubblesManager implements Dumpable {
private final ShadeController mShadeController; private final ShadeController mShadeController;
private final IStatusBarService mBarService; private final IStatusBarService mBarService;
private final INotificationManager mNotificationManager; private final INotificationManager mNotificationManager;
private final IDreamManager mDreamManager;
private final NotificationVisibilityProvider mVisibilityProvider; private final NotificationVisibilityProvider mVisibilityProvider;
private final NotificationInterruptStateProvider mNotificationInterruptStateProvider; private final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
private final NotificationLockscreenUserManager mNotifUserManager; private final NotificationLockscreenUserManager mNotifUserManager;
@@ -126,6 +128,7 @@ public class BubblesManager implements Dumpable {
ShadeController shadeController, ShadeController shadeController,
@Nullable IStatusBarService statusBarService, @Nullable IStatusBarService statusBarService,
INotificationManager notificationManager, INotificationManager notificationManager,
IDreamManager dreamManager,
NotificationVisibilityProvider visibilityProvider, NotificationVisibilityProvider visibilityProvider,
NotificationInterruptStateProvider interruptionStateProvider, NotificationInterruptStateProvider interruptionStateProvider,
ZenModeController zenModeController, ZenModeController zenModeController,
@@ -144,6 +147,7 @@ public class BubblesManager implements Dumpable {
shadeController, shadeController,
statusBarService, statusBarService,
notificationManager, notificationManager,
dreamManager,
visibilityProvider, visibilityProvider,
interruptionStateProvider, interruptionStateProvider,
zenModeController, zenModeController,
@@ -167,6 +171,7 @@ public class BubblesManager implements Dumpable {
ShadeController shadeController, ShadeController shadeController,
@Nullable IStatusBarService statusBarService, @Nullable IStatusBarService statusBarService,
INotificationManager notificationManager, INotificationManager notificationManager,
IDreamManager dreamManager,
NotificationVisibilityProvider visibilityProvider, NotificationVisibilityProvider visibilityProvider,
NotificationInterruptStateProvider interruptionStateProvider, NotificationInterruptStateProvider interruptionStateProvider,
ZenModeController zenModeController, ZenModeController zenModeController,
@@ -182,6 +187,7 @@ public class BubblesManager implements Dumpable {
mNotificationShadeWindowController = notificationShadeWindowController; mNotificationShadeWindowController = notificationShadeWindowController;
mShadeController = shadeController; mShadeController = shadeController;
mNotificationManager = notificationManager; mNotificationManager = notificationManager;
mDreamManager = dreamManager;
mVisibilityProvider = visibilityProvider; mVisibilityProvider = visibilityProvider;
mNotificationInterruptStateProvider = interruptionStateProvider; mNotificationInterruptStateProvider = interruptionStateProvider;
mNotifUserManager = notifUserManager; mNotifUserManager = notifUserManager;
@@ -203,7 +209,7 @@ public class BubblesManager implements Dumpable {
@Override @Override
public void onKeyguardShowingChanged() { public void onKeyguardShowingChanged() {
boolean isUnlockedShade = !keyguardStateController.isShowing() boolean isUnlockedShade = !keyguardStateController.isShowing()
&& !keyguardStateController.isOccluded(); && !isDreamingOrInPreview();
bubbles.onStatusBarStateChanged(isUnlockedShade); bubbles.onStatusBarStateChanged(isUnlockedShade);
} }
}); });
@@ -397,6 +403,15 @@ public class BubblesManager implements Dumpable {
mBubbles.setSysuiProxy(mSysuiProxy); mBubbles.setSysuiProxy(mSysuiProxy);
} }
private boolean isDreamingOrInPreview() {
try {
return mDreamManager.isDreamingOrInPreview();
} catch (RemoteException e) {
Log.e(TAG, "Failed to query dream manager.", e);
return false;
}
}
private void setupNotifPipeline() { private void setupNotifPipeline() {
mNotifPipeline.addCollectionListener(new NotifCollectionListener() { mNotifPipeline.addCollectionListener(new NotifCollectionListener() {
@Override @Override

View File

@@ -63,6 +63,7 @@ import android.graphics.drawable.Icon;
import android.hardware.display.AmbientDisplayConfiguration; import android.hardware.display.AmbientDisplayConfiguration;
import android.os.Handler; import android.os.Handler;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.RemoteException;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.service.dreams.IDreamManager; import android.service.dreams.IDreamManager;
@@ -204,6 +205,8 @@ public class BubblesTest extends SysuiTestCase {
private ArgumentCaptor<IntentFilter> mFilterArgumentCaptor; private ArgumentCaptor<IntentFilter> mFilterArgumentCaptor;
@Captor @Captor
private ArgumentCaptor<BroadcastReceiver> mBroadcastReceiverArgumentCaptor; private ArgumentCaptor<BroadcastReceiver> mBroadcastReceiverArgumentCaptor;
@Captor
private ArgumentCaptor<KeyguardStateController.Callback> mKeyguardStateControllerCallbackCaptor;
private BubblesManager mBubblesManager; private BubblesManager mBubblesManager;
private TestableBubbleController mBubbleController; private TestableBubbleController mBubbleController;
@@ -240,6 +243,8 @@ public class BubblesTest extends SysuiTestCase {
@Mock @Mock
private IStatusBarService mStatusBarService; private IStatusBarService mStatusBarService;
@Mock @Mock
private IDreamManager mIDreamManager;
@Mock
private NotificationVisibilityProvider mVisibilityProvider; private NotificationVisibilityProvider mVisibilityProvider;
@Mock @Mock
private LauncherApps mLauncherApps; private LauncherApps mLauncherApps;
@@ -371,10 +376,11 @@ public class BubblesTest extends SysuiTestCase {
mContext, mContext,
mBubbleController.asBubbles(), mBubbleController.asBubbles(),
mNotificationShadeWindowController, mNotificationShadeWindowController,
mock(KeyguardStateController.class), mKeyguardStateController,
mShadeController, mShadeController,
mStatusBarService, mStatusBarService,
mock(INotificationManager.class), mock(INotificationManager.class),
mIDreamManager,
mVisibilityProvider, mVisibilityProvider,
interruptionStateProvider, interruptionStateProvider,
mZenModeController, mZenModeController,
@@ -391,6 +397,25 @@ public class BubblesTest extends SysuiTestCase {
verify(mNotifPipeline, atLeastOnce()) verify(mNotifPipeline, atLeastOnce())
.addCollectionListener(mNotifListenerCaptor.capture()); .addCollectionListener(mNotifListenerCaptor.capture());
mEntryListener = mNotifListenerCaptor.getValue(); mEntryListener = mNotifListenerCaptor.getValue();
// Get a reference to KeyguardStateController.Callback
verify(mKeyguardStateController, atLeastOnce())
.addCallback(mKeyguardStateControllerCallbackCaptor.capture());
}
@Test
public void dreamingHidesBubbles() throws RemoteException {
mBubbleController.updateBubble(mBubbleEntry);
assertTrue(mBubbleController.hasBubbles());
assertThat(mBubbleController.getStackView().getVisibility()).isEqualTo(View.VISIBLE);
when(mIDreamManager.isDreamingOrInPreview()).thenReturn(true); // dreaming is happening
when(mKeyguardStateController.isShowing()).thenReturn(false); // device is unlocked
KeyguardStateController.Callback callback =
mKeyguardStateControllerCallbackCaptor.getValue();
callback.onKeyguardShowingChanged();
assertThat(mBubbleController.getStackView().getVisibility()).isEqualTo(View.INVISIBLE);
} }
@Test @Test