Merge "Fix bubbles hiding when unlocked with showOnLockscreen Activity" into tm-qpr-dev am: 08990cade2
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19603444 Change-Id: I2123b6e001d9de405c7d453cb12c4d9091345f7d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user