Merge "Fix Notification redaction when power cycling a non-dozing device while occluded." into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-07-23 14:14:01 +00:00
committed by Android (Google) Code Review
4 changed files with 60 additions and 1 deletions

View File

@@ -642,6 +642,8 @@ public class NotificationLockscreenUserManagerImpl implements
// - device keyguard is shown in secure mode;
// - profile is locked with a work challenge.
SparseArray<UserInfo> currentProfiles = getCurrentProfiles();
SparseBooleanArray oldPublicModes = mLockscreenPublicMode.clone();
SparseBooleanArray oldWorkChallenges = mUsersWithSeparateWorkChallenge.clone();
mUsersWithSeparateWorkChallenge.clear();
for (int i = currentProfiles.size() - 1; i >= 0; i--) {
final int userId = currentProfiles.valueAt(i).id;
@@ -660,7 +662,10 @@ public class NotificationLockscreenUserManagerImpl implements
}
getEntryManager().updateNotifications("NotificationLockscreenUserManager.updatePublicMode");
// TODO(b/234738798): Migrate KeyguardNotificationVisibilityProvider to use this listener
// notifyNotificationStateChanged();
if (!mLockscreenPublicMode.equals(oldPublicModes)
|| !mUsersWithSeparateWorkChallenge.equals(oldWorkChallenges)) {
notifyNotificationStateChanged();
}
}
@Override

View File

@@ -324,6 +324,13 @@ public class NotificationStackScrollLayoutController {
}
};
/**
* Recalculate sensitiveness without animation; called when waking up while keyguard occluded.
*/
public void updateSensitivenessForOccludedWakeup() {
mView.updateSensitiveness(false, mLockscreenUserManager.isAnyProfilePublicMode());
}
/**
* Set the overexpansion of the panel to be applied to the view.
*/

View File

@@ -3661,6 +3661,18 @@ public class CentralSurfacesImpl extends CoreStartable implements
public void onFinishedWakingUp() {
mWakeUpCoordinator.setFullyAwake(true);
mWakeUpCoordinator.setWakingUp(false);
if (mKeyguardStateController.isOccluded()
&& !mDozeParameters.canControlUnlockedScreenOff()) {
// When the keyguard is occluded we don't use the KEYGUARD state which would
// normally cause these redaction updates. If AOD is on, the KEYGUARD state is used
// to show the doze, AND UnlockedScreenOffAnimationController.onFinishedWakingUp()
// would force a KEYGUARD state that would take care of recalculating redaction.
// So if AOD is off or unsupported we need to trigger these updates at screen on
// when the keyguard is occluded.
mLockscreenUserManager.updatePublicMode();
mNotificationPanelViewController.getNotificationStackScrollLayoutController()
.updateSensitivenessForOccludedWakeup();
}
if (mLaunchCameraWhenFinishedWaking) {
mNotificationPanelViewController.launchCamera(mLastCameraLaunchSource);
mLaunchCameraWhenFinishedWaking = false;

View File

@@ -29,7 +29,9 @@ import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -59,6 +61,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.NotificationLockscreenUserManager.KeyguardNotificationSuppressor;
import com.android.systemui.statusbar.NotificationLockscreenUserManager.NotificationStateChangedListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
@@ -324,6 +327,38 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase {
assertTrue(mLockscreenUserManager.isLockscreenPublicMode(mCurrentUser.id));
}
@Test
public void testUpdateIsPublicMode() {
when(mKeyguardStateController.isMethodSecure()).thenReturn(true);
NotificationStateChangedListener listener = mock(NotificationStateChangedListener.class);
mLockscreenUserManager.addNotificationStateChangedListener(listener);
mLockscreenUserManager.mCurrentProfiles.append(0, mock(UserInfo.class));
// first call explicitly sets user 0 to not public; notifies
mLockscreenUserManager.updatePublicMode();
assertFalse(mLockscreenUserManager.isLockscreenPublicMode(0));
verify(listener).onNotificationStateChanged();
clearInvocations(listener);
// calling again has no changes; does not notify
mLockscreenUserManager.updatePublicMode();
assertFalse(mLockscreenUserManager.isLockscreenPublicMode(0));
verify(listener, never()).onNotificationStateChanged();
// Calling again with keyguard now showing makes user 0 public; notifies
when(mKeyguardStateController.isShowing()).thenReturn(true);
mLockscreenUserManager.updatePublicMode();
assertTrue(mLockscreenUserManager.isLockscreenPublicMode(0));
verify(listener).onNotificationStateChanged();
clearInvocations(listener);
// calling again has no changes; does not notify
mLockscreenUserManager.updatePublicMode();
assertTrue(mLockscreenUserManager.isLockscreenPublicMode(0));
verify(listener, never()).onNotificationStateChanged();
}
@Test
public void testShowSilentNotifications_settingSaysShow() {
mSettings.putInt(Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 1);