diff options
| author | 2023-10-19 17:24:29 +0000 | |
|---|---|---|
| committer | 2023-10-19 17:24:29 +0000 | |
| commit | fcfd9bb8e78368f64d11c3a67b7a57127c0c5f2b (patch) | |
| tree | b3f5f21adaf76057c5276ad002eee7d61f99728b | |
| parent | e708a927cb93cfd39c4196b874e841332fba6019 (diff) | |
| parent | e30aa4089f82d2af60accd84293e5bbeeb08d011 (diff) | |
Merge "Revert "Change notifications service to listen to generic pofile availability intents"" into main
4 files changed, 51 insertions, 154 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java index 710e59d91c6b..f32f1c2dcd25 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java @@ -21,7 +21,6 @@ import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_ import static android.os.UserHandle.USER_NULL; import static android.provider.Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS; import static android.provider.Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS; -import static android.os.Flags.allowPrivateProfile; import static com.android.systemui.DejankUtils.whitelistIpcs; @@ -80,7 +79,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.concurrent.Executor; -import java.util.Objects; import javax.inject.Inject; @@ -179,50 +177,57 @@ public class NotificationLockscreenUserManagerImpl implements @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); - if (Objects.equals(action, Intent.ACTION_USER_REMOVED)) { - int removedUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); - if (removedUserId != -1) { - for (UserChangedListener listener : mListeners) { - listener.onUserRemoved(removedUserId); + switch (action) { + case Intent.ACTION_USER_REMOVED: + int removedUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); + if (removedUserId != -1) { + for (UserChangedListener listener : mListeners) { + listener.onUserRemoved(removedUserId); + } } - } - updateCurrentProfilesCache(); - } else if (Objects.equals(action, Intent.ACTION_USER_ADDED)){ - updateCurrentProfilesCache(); - if (mFeatureFlags.isEnabled(Flags.NOTIF_LS_BACKGROUND_THREAD)) { - final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL); - mBackgroundHandler.post(() -> { - initValuesForUser(userId); - }); - } - } else if (profileAvailabilityActions(action)) { - updateCurrentProfilesCache(); - } else if (Objects.equals(action, Intent.ACTION_USER_UNLOCKED)) { - // Start the overview connection to the launcher service - // Connect if user hasn't connected yet - if (mOverviewProxyServiceLazy.get().getProxy() == null) { - mOverviewProxyServiceLazy.get().startConnectionToCurrentUser(); - } - } else if (Objects.equals(action, NOTIFICATION_UNLOCKED_BY_WORK_CHALLENGE_ACTION)) { - final IntentSender intentSender = intent.getParcelableExtra( - Intent.EXTRA_INTENT); - final String notificationKey = intent.getStringExtra(Intent.EXTRA_INDEX); - if (intentSender != null) { - try { - ActivityOptions options = ActivityOptions.makeBasic(); - options.setPendingIntentBackgroundActivityStartMode( - ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED); - mContext.startIntentSender(intentSender, null, 0, 0, 0, - options.toBundle()); - } catch (IntentSender.SendIntentException e) { - /* ignore */ + updateCurrentProfilesCache(); + break; + case Intent.ACTION_USER_ADDED: + updateCurrentProfilesCache(); + if (mFeatureFlags.isEnabled(Flags.NOTIF_LS_BACKGROUND_THREAD)) { + final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL); + mBackgroundHandler.post(() -> { + initValuesForUser(userId); + }); } - } - if (notificationKey != null) { - final NotificationVisibility nv = mVisibilityProviderLazy.get() - .obtain(notificationKey, true); - mClickNotifier.onNotificationClick(notificationKey, nv); - } + break; + case Intent.ACTION_MANAGED_PROFILE_AVAILABLE: + case Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE: + updateCurrentProfilesCache(); + break; + case Intent.ACTION_USER_UNLOCKED: + // Start the overview connection to the launcher service + // Connect if user hasn't connected yet + if (mOverviewProxyServiceLazy.get().getProxy() == null) { + mOverviewProxyServiceLazy.get().startConnectionToCurrentUser(); + } + break; + case NOTIFICATION_UNLOCKED_BY_WORK_CHALLENGE_ACTION: + final IntentSender intentSender = intent.getParcelableExtra( + Intent.EXTRA_INTENT); + final String notificationKey = intent.getStringExtra(Intent.EXTRA_INDEX); + if (intentSender != null) { + try { + ActivityOptions options = ActivityOptions.makeBasic(); + options.setPendingIntentBackgroundActivityStartMode( + ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED); + mContext.startIntentSender(intentSender, null, 0, 0, 0, + options.toBundle()); + } catch (IntentSender.SendIntentException e) { + /* ignore */ + } + } + if (notificationKey != null) { + final NotificationVisibility nv = mVisibilityProviderLazy.get() + .obtain(notificationKey, true); + mClickNotifier.onNotificationClick(notificationKey, nv); + } + break; } } }; @@ -398,10 +403,6 @@ public class NotificationLockscreenUserManagerImpl implements filter.addAction(Intent.ACTION_USER_UNLOCKED); filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE); filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); - if (allowPrivateProfile()){ - filter.addAction(Intent.ACTION_PROFILE_AVAILABLE); - filter.addAction(Intent.ACTION_PROFILE_UNAVAILABLE); - } mBroadcastDispatcher.registerReceiver(mBaseBroadcastReceiver, filter, null /* executor */, UserHandle.ALL); @@ -813,14 +814,6 @@ public class NotificationLockscreenUserManagerImpl implements } } - private boolean profileAvailabilityActions(String action){ - return allowPrivateProfile()? - Objects.equals(action,Intent.ACTION_PROFILE_AVAILABLE)|| - Objects.equals(action,Intent.ACTION_PROFILE_UNAVAILABLE): - Objects.equals(action,Intent.ACTION_MANAGED_PROFILE_AVAILABLE)|| - Objects.equals(action,Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); - } - @Override public void dump(PrintWriter pw, String[] args) { pw.println("NotificationLockscreenUserManager state:"); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java index 43adc69be13f..a5f5fc7e36f2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java @@ -22,18 +22,14 @@ import static android.app.NotificationManager.VISIBILITY_NO_OVERRIDE; import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED; import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_SECURE_NOTIFICATIONS; import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS; -import static android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE; import static android.os.UserHandle.USER_ALL; import static android.provider.Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS; import static android.provider.Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS; -import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertTrue; -import static org.junit.Assume.assumeFalse; -import static org.junit.Assume.assumeTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; @@ -103,7 +99,6 @@ import java.util.concurrent.Executor; @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper public class NotificationLockscreenUserManagerTest extends SysuiTestCase { - private static final int TEST_PROFILE_USERHANDLE = 12; @Mock private NotificationPresenter mPresenter; @Mock @@ -706,60 +701,6 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase { assertFalse(mLockscreenUserManager.userAllowsPrivateNotificationsInPublic(newUserId)); } - @Test - public void testProfileAvailabilityIntent() { - mSetFlagsRule.enableFlags(FLAG_ALLOW_PRIVATE_PROFILE); - mLockscreenUserManager.mCurrentProfiles.clear(); - assertEquals(0, mLockscreenUserManager.mCurrentProfiles.size()); - mLockscreenUserManager.mCurrentProfiles.append(0, mock(UserInfo.class)); - simulateProfileAvailabilityActions(Intent.ACTION_PROFILE_AVAILABLE); - assertEquals(2, mLockscreenUserManager.mCurrentProfiles.size()); - } - - @Test - public void testProfileUnAvailabilityIntent() { - mSetFlagsRule.enableFlags(FLAG_ALLOW_PRIVATE_PROFILE); - mLockscreenUserManager.mCurrentProfiles.clear(); - assertEquals(0, mLockscreenUserManager.mCurrentProfiles.size()); - mLockscreenUserManager.mCurrentProfiles.append(0, mock(UserInfo.class)); - simulateProfileAvailabilityActions(Intent.ACTION_PROFILE_UNAVAILABLE); - assertEquals(2, mLockscreenUserManager.mCurrentProfiles.size()); - } - - @Test - public void testManagedProfileAvailabilityIntent() { - mSetFlagsRule.disableFlags(FLAG_ALLOW_PRIVATE_PROFILE); - mLockscreenUserManager.mCurrentProfiles.clear(); - mLockscreenUserManager.mCurrentManagedProfiles.clear(); - assertEquals(0, mLockscreenUserManager.mCurrentProfiles.size()); - assertEquals(0, mLockscreenUserManager.mCurrentManagedProfiles.size()); - mLockscreenUserManager.mCurrentProfiles.append(0, mock(UserInfo.class)); - simulateProfileAvailabilityActions(Intent.ACTION_MANAGED_PROFILE_AVAILABLE); - assertEquals(2, mLockscreenUserManager.mCurrentProfiles.size()); - assertEquals(1, mLockscreenUserManager.mCurrentManagedProfiles.size()); - } - - @Test - public void testManagedProfileUnAvailabilityIntent() { - mSetFlagsRule.disableFlags(FLAG_ALLOW_PRIVATE_PROFILE); - mLockscreenUserManager.mCurrentProfiles.clear(); - mLockscreenUserManager.mCurrentManagedProfiles.clear(); - assertEquals(0, mLockscreenUserManager.mCurrentProfiles.size()); - assertEquals(0, mLockscreenUserManager.mCurrentManagedProfiles.size()); - mLockscreenUserManager.mCurrentProfiles.append(0, mock(UserInfo.class)); - simulateProfileAvailabilityActions(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); - assertEquals(2, mLockscreenUserManager.mCurrentProfiles.size()); - assertEquals(1, mLockscreenUserManager.mCurrentManagedProfiles.size()); - } - - private void simulateProfileAvailabilityActions(String intentAction) { - BroadcastReceiver broadcastReceiver = - mLockscreenUserManager.getBaseBroadcastReceiverForTest(); - final Intent intent = new Intent(intentAction); - intent.putExtra(Intent.EXTRA_USER_HANDLE, TEST_PROFILE_USERHANDLE); - broadcastReceiver.onReceive(mContext, intent); - } - private class TestNotificationLockscreenUserManager extends NotificationLockscreenUserManagerImpl { public TestNotificationLockscreenUserManager(Context context) { diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 7ca56990f2d0..2f6a9b52efb7 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -71,7 +71,6 @@ import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE; import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE; -import static android.os.Flags.allowPrivateProfile; import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_CRITICAL; import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_NORMAL; import static android.os.PowerWhitelistManager.REASON_NOTIFICATION_SERVICE; @@ -1930,8 +1929,7 @@ public class NotificationManagerService extends SystemService { cancelAllNotificationsInt(MY_UID, MY_PID, null, null, 0, 0, userHandle, REASON_USER_STOPPED); } - } else if ( - isProfileUnavailable(action)) { + } else if (action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE)) { int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); if (userHandle >= 0 && !mDpm.isKeepProfilesRunningEnabled()) { cancelAllNotificationsInt(MY_UID, MY_PID, null, null, 0, 0, userHandle, @@ -1982,12 +1980,6 @@ public class NotificationManagerService extends SystemService { } } } - - private boolean isProfileUnavailable(String action) { - return allowPrivateProfile() ? - action.equals(Intent.ACTION_PROFILE_UNAVAILABLE) : - action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); - } }; private final class SettingsObserver extends ContentObserver { @@ -2558,9 +2550,6 @@ public class NotificationManagerService extends SystemService { filter.addAction(Intent.ACTION_USER_REMOVED); filter.addAction(Intent.ACTION_USER_UNLOCKED); filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); - if (allowPrivateProfile()){ - filter.addAction(Intent.ACTION_PROFILE_UNAVAILABLE); - } getContext().registerReceiverAsUser(mIntentReceiver, UserHandle.ALL, filter, null, null); IntentFilter pkgFilter = new IntentFilter(); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 16c39b440ba5..6eb35a7a4564 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -71,7 +71,6 @@ import static android.os.UserHandle.USER_SYSTEM; import static android.os.UserManager.USER_TYPE_FULL_SECONDARY; import static android.os.UserManager.USER_TYPE_PROFILE_CLONE; import static android.os.UserManager.USER_TYPE_PROFILE_MANAGED; -import static android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE; import static android.service.notification.Adjustment.KEY_IMPORTANCE; import static android.service.notification.Adjustment.KEY_USER_SENTIMENT; import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ALERTING; @@ -207,7 +206,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.WorkSource; import android.permission.PermissionManager; -import android.platform.test.flag.junit.SetFlagsRule; import android.provider.DeviceConfig; import android.provider.MediaStore; import android.provider.Settings; @@ -319,7 +317,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { private static final int UID_HEADLESS = 1_000_000; private static final int TOAST_DURATION = 2_000; private static final int SECONDARY_DISPLAY_ID = 42; - private static final int TEST_PROFILE_USERHANDLE = 12; private final int mUid = Binder.getCallingUid(); private final @UserIdInt int mUserId = UserHandle.getUserId(mUid); @@ -450,7 +447,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { TestableNotificationManagerService.StrongAuthTrackerFake mStrongAuthTracker; TestableFlagResolver mTestFlagResolver = new TestableFlagResolver(); - @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); + private InstanceIdSequence mNotificationInstanceIdSequence = new InstanceIdSequenceFake( 1 << 30); @Mock @@ -832,12 +829,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mPackageIntentReceiver.onReceive(getContext(), intent); } - private void simulateProfileAvailabilityActions(String intentAction) { - final Intent intent = new Intent(intentAction); - intent.putExtra(Intent.EXTRA_USER_HANDLE, TEST_PROFILE_USERHANDLE); - mUserSwitchIntentReceiver.onReceive(mContext, intent); - } - private ArrayMap<Boolean, ArrayList<ComponentName>> generateResetComponentValues() { ArrayMap<Boolean, ArrayList<ComponentName>> changed = new ArrayMap<>(); changed.put(true, new ArrayList<>()); @@ -12763,23 +12754,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { verify(service, times(1)).setDNDMigrationDone(user.id); } - @Test - public void testProfileUnavailableIntent() throws RemoteException { - mSetFlagsRule.enableFlags(FLAG_ALLOW_PRIVATE_PROFILE); - simulateProfileAvailabilityActions(Intent.ACTION_PROFILE_UNAVAILABLE); - verify(mWorkerHandler).post(any(Runnable.class)); - verify(mSnoozeHelper).clearData(anyInt()); - } - - - @Test - public void testManagedProfileUnavailableIntent() throws RemoteException { - mSetFlagsRule.disableFlags(FLAG_ALLOW_PRIVATE_PROFILE); - simulateProfileAvailabilityActions(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); - verify(mWorkerHandler).post(any(Runnable.class)); - verify(mSnoozeHelper).clearData(anyInt()); - } - private NotificationRecord createAndPostNotification(Notification.Builder nb, String testName) throws RemoteException { StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1, testName, mUid, 0, |