diff options
| author | 2023-08-23 07:24:46 +0000 | |
|---|---|---|
| committer | 2023-08-23 07:24:46 +0000 | |
| commit | cf6b69c4cb55c30b112c459bcb55a64376791b04 (patch) | |
| tree | 0730756d7ee8ffaa51961b04e6adea3ff53a3747 | |
| parent | 231ac0336d6320a976e1d2df47c654a8e7c5c6d6 (diff) | |
| parent | 645ed07f672e3752c3446afd33d1df49397e7ba2 (diff) | |
Merge "Include user profiles when calculating areChannelsBypassingDnd" into main
5 files changed, 86 insertions, 125 deletions
diff --git a/core/java/android/util/IntArray.java b/core/java/android/util/IntArray.java index 511cb2df712d..ac76fc2eb469 100644 --- a/core/java/android/util/IntArray.java +++ b/core/java/android/util/IntArray.java @@ -212,6 +212,11 @@ public class IntArray implements Cloneable { return -1; } + /** Returns {@code true} if this array contains the specified value. */ + public boolean contains(int value) { + return indexOf(value) != -1; + } + /** * Removes the value at the specified index from this array. */ diff --git a/core/tests/utiltests/src/android/util/IntArrayTest.java b/core/tests/utiltests/src/android/util/IntArrayTest.java index caa7312a4475..ad5c4ee83e54 100644 --- a/core/tests/utiltests/src/android/util/IntArrayTest.java +++ b/core/tests/utiltests/src/android/util/IntArrayTest.java @@ -55,9 +55,11 @@ public class IntArrayTest { a.add(5, 20); assertThat(a.get(5)).isEqualTo(20); assertThat(a.indexOf(20)).isEqualTo(5); + assertThat(a.contains(20)).isTrue(); verify(a, 1, 2, 0, 0, 0, 20, 10, 0, 0); assertThat(a.indexOf(99)).isEqualTo(-1); + assertThat(a.contains(99)).isFalse(); a.resize(15); a.set(14, 30); @@ -71,6 +73,7 @@ public class IntArrayTest { backingArray[2] = 30; verify(a, backingArray); assertThat(a.indexOf(30)).isEqualTo(2); + assertThat(a.contains(30)).isTrue(); a.resize(2); assertThat(backingArray[2]).isEqualTo(0); diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 009cc3b57594..6f0a4b48c09e 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -1928,6 +1928,7 @@ public class NotificationManagerService extends SystemService { mConditionProviders.onUserRemoved(userId); mAssistants.onUserRemoved(userId); mHistoryManager.onUserRemoved(userId); + mPreferencesHelper.syncChannelsBypassingDnd(); handleSavePolicyFile(); } else if (action.equals(Intent.ACTION_USER_UNLOCKED)) { final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL); @@ -2379,6 +2380,7 @@ public class NotificationManagerService extends SystemService { }); mPermissionHelper = permissionHelper; mNotificationChannelLogger = channelLogger; + mUserProfiles.updateCache(getContext()); mPreferencesHelper = new PreferencesHelper(getContext(), mPackageManagerClient, mRankingHandler, @@ -2387,6 +2389,7 @@ public class NotificationManagerService extends SystemService { mPermissionManager, mNotificationChannelLogger, mAppOps, + mUserProfiles, new SysUiStatsEvent.BuilderFactory(), mShowReviewPermissionsNotification); mRankingHelper = new RankingHelper(getContext(), @@ -2442,8 +2445,6 @@ public class NotificationManagerService extends SystemService { mZenModeHelper.initZenMode(); mInterruptionFilter = mZenModeHelper.getZenModeListenerInterruptionFilter(); - mUserProfiles.updateCache(getContext()); - if (mPackageManagerClient.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) { telephonyManager.listen(new PhoneStateListener() { @Override diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java index 3f799dc08a3f..0e37f101ce70 100644 --- a/services/core/java/com/android/server/notification/PreferencesHelper.java +++ b/services/core/java/com/android/server/notification/PreferencesHelper.java @@ -38,7 +38,6 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; -import android.app.ActivityManager; import android.app.AppOpsManager; import android.app.Notification; import android.app.NotificationChannel; @@ -53,7 +52,6 @@ import android.content.pm.ParceledListSlice; import android.content.pm.UserInfo; import android.metrics.LogMaker; import android.net.Uri; -import android.os.Binder; import android.os.Build; import android.os.Process; import android.os.UserHandle; @@ -114,7 +112,6 @@ public class PreferencesHelper implements RankingConfig { private static final int XML_VERSION_REVIEW_PERMISSIONS_NOTIFICATION = 4; @VisibleForTesting static final int UNKNOWN_UID = UserHandle.USER_NULL; - private static final String NON_BLOCKABLE_CHANNEL_DELIM = ":"; @VisibleForTesting static final int NOTIFICATION_CHANNEL_COUNT_LIMIT = 5000; @@ -196,6 +193,7 @@ public class PreferencesHelper implements RankingConfig { private final PermissionManager mPermissionManager; private final NotificationChannelLogger mNotificationChannelLogger; private final AppOpsManager mAppOps; + private final ManagedServices.UserProfiles mUserProfiles; private SparseBooleanArray mBadgingEnabled; private SparseBooleanArray mBubblesEnabled; @@ -204,14 +202,12 @@ public class PreferencesHelper implements RankingConfig { private boolean mIsMediaNotificationFilteringEnabled = DEFAULT_MEDIA_NOTIFICATION_FILTERING; private boolean mCurrentUserHasChannelsBypassingDnd; private boolean mHideSilentStatusBarIcons = DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS; - private boolean mShowReviewPermissionsNotification; - - private boolean mAllowInvalidShortcuts = false; + private final boolean mShowReviewPermissionsNotification; public PreferencesHelper(Context context, PackageManager pm, RankingHandler rankingHandler, ZenModeHelper zenHelper, PermissionHelper permHelper, PermissionManager permManager, NotificationChannelLogger notificationChannelLogger, - AppOpsManager appOpsManager, + AppOpsManager appOpsManager, ManagedServices.UserProfiles userProfiles, SysUiStatsEvent.BuilderFactory statsEventBuilderFactory, boolean showReviewPermissionsNotification) { mContext = context; @@ -222,6 +218,7 @@ public class PreferencesHelper implements RankingConfig { mPm = pm; mNotificationChannelLogger = notificationChannelLogger; mAppOps = appOpsManager; + mUserProfiles = userProfiles; mStatsEventBuilderFactory = statsEventBuilderFactory; mShowReviewPermissionsNotification = showReviewPermissionsNotification; @@ -435,7 +432,7 @@ public class PreferencesHelper implements RankingConfig { channel.getConversationId() != null && channel.getConversationId().contains( PLACEHOLDER_CONVERSATION_ID); - return mAllowInvalidShortcuts || (!mAllowInvalidShortcuts && !isInvalidShortcutChannel); + return !isInvalidShortcutChannel; } private boolean isDeletionOk(NotificationChannel nc) { @@ -1790,8 +1787,9 @@ public class PreferencesHelper implements RankingConfig { * Syncs {@link #mCurrentUserHasChannelsBypassingDnd} with the current user's notification * policy before updating. Must be called: * <ul> - * <li>On system init, after channels and DND configurations are loaded.</li> - * <li>When the current user changes, after the corresponding DND config is loaded.</li> + * <li>On system init, after channels and DND configurations are loaded. + * <li>When the current user is switched, after the corresponding DND config is loaded. + * <li>If users are removed (the removed user could've been a profile of the current one). * </ul> */ void syncChannelsBypassingDnd() { @@ -1805,20 +1803,19 @@ public class PreferencesHelper implements RankingConfig { /** * Updates the user's NotificationPolicy based on whether the current userId has channels * bypassing DND. It should be called whenever a channel is created, updated, or deleted, or - * when the current user is switched. + * when the current user (or its profiles) change. */ private void updateCurrentUserHasChannelsBypassingDnd(int callingUid, boolean fromSystemOrSystemUi) { ArraySet<Pair<String, Integer>> candidatePkgs = new ArraySet<>(); - final int currentUserId = getCurrentUser(); + final IntArray currentUserIds = mUserProfiles.getCurrentProfileIds(); synchronized (mPackagePreferences) { final int numPackagePreferences = mPackagePreferences.size(); for (int i = 0; i < numPackagePreferences; i++) { final PackagePreferences r = mPackagePreferences.valueAt(i); - // Package isn't associated with the current userId - if (currentUserId != UserHandle.getUserId(r.uid)) { - continue; + if (!currentUserIds.contains(UserHandle.getUserId(r.uid))) { + continue; // Package isn't associated with any profile of the current userId. } for (NotificationChannel channel : r.channels.values()) { @@ -1842,13 +1839,6 @@ public class PreferencesHelper implements RankingConfig { } } - private int getCurrentUser() { - final long identity = Binder.clearCallingIdentity(); - int currentUserId = ActivityManager.getCurrentUser(); - Binder.restoreCallingIdentity(identity); - return currentUserId; - } - private boolean channelIsLiveLocked(PackagePreferences pkgPref, NotificationChannel channel) { // Channel is in a group that's blocked if (isGroupBlocked(pkgPref.pkg, pkgPref.uid, channel.getGroup())) { diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java index 81d939f1f05f..9b745f5aaf4f 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java @@ -115,6 +115,7 @@ import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.Parcel; +import android.os.Process; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.UserHandle; @@ -209,6 +210,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Mock Context mContext; @Mock ZenModeHelper mMockZenModeHelper; @Mock AppOpsManager mAppOpsManager; + @Mock ManagedServices.UserProfiles mUserProfiles; @Mock PermissionManager mPermissionManager; private NotificationManager.Policy mTestNotificationPolicy; @@ -327,10 +329,12 @@ public class PreferencesHelperTest extends UiServiceTestCase { when(mPermissionHelper.getNotificationPermissionValues(USER_SYSTEM)) .thenReturn(appPermissions); + when(mUserProfiles.getCurrentProfileIds()).thenReturn(IntArray.wrap(new int[] {0})); + mStatsEventBuilderFactory = new WrappedSysUiStatsEvent.WrappedBuilderFactory(); mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, + mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mUserProfiles, mStatsEventBuilderFactory, false); resetZenModeHelper(); @@ -678,7 +682,8 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testReadXml_oldXml_migrates() throws Exception { mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, true); + mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mUserProfiles, + mStatsEventBuilderFactory, /* showReviewPermissionsNotification= */ true); String xml = "<ranking version=\"2\">\n" + "<package name=\"" + PKG_N_MR1 + "\" uid=\"" + UID_N_MR1 @@ -743,9 +748,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testReadXml_oldXml_backup_migratesWhenPkgInstalled() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, false); - when(mPm.getPackageUidAsUser("pkg1", USER_SYSTEM)).thenReturn(UNKNOWN_UID); when(mPm.getPackageUidAsUser("pkg2", USER_SYSTEM)).thenReturn(UNKNOWN_UID); when(mPm.getPackageUidAsUser("pkg3", USER_SYSTEM)).thenReturn(UNKNOWN_UID); @@ -822,7 +824,8 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testReadXml_newXml_noMigration_showPermissionNotification() throws Exception { mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, true); + mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mUserProfiles, + mStatsEventBuilderFactory, /* showReviewPermissionsNotification= */ true); String xml = "<ranking version=\"3\">\n" + "<package name=\"" + PKG_N_MR1 + "\" show_badge=\"true\">\n" @@ -879,7 +882,8 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testReadXml_newXml_permissionNotificationOff() throws Exception { mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, false); + mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mUserProfiles, + mStatsEventBuilderFactory, /* showReviewPermissionsNotification= */ false); String xml = "<ranking version=\"3\">\n" + "<package name=\"" + PKG_N_MR1 + "\" show_badge=\"true\">\n" @@ -936,7 +940,8 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testReadXml_newXml_noMigration_noPermissionNotification() throws Exception { mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, true); + mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mUserProfiles, + mStatsEventBuilderFactory, /* showReviewPermissionsNotification= */ true); String xml = "<ranking version=\"4\">\n" + "<package name=\"" + PKG_N_MR1 + "\" show_badge=\"true\">\n" @@ -991,9 +996,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testReadXml_oldXml_migration_NoUid() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, false); - when(mPm.getPackageUidAsUser("something", USER_SYSTEM)).thenReturn(UNKNOWN_UID); String xml = "<ranking version=\"2\">\n" + "<package name=\"something\" show_badge=\"true\">\n" @@ -1024,9 +1026,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testReadXml_newXml_noMigration_NoUid() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, false); - when(mPm.getPackageUidAsUser("something", USER_SYSTEM)).thenReturn(UNKNOWN_UID); String xml = "<ranking version=\"3\">\n" + "<package name=\"something\" show_badge=\"true\">\n" @@ -1056,9 +1055,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testChannelXmlForNonBackup_postMigration() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, false); - ArrayMap<Pair<Integer, String>, Pair<Boolean, Boolean>> appPermissions = new ArrayMap<>(); appPermissions.put(new Pair<>(1, "first"), new Pair<>(true, false)); appPermissions.put(new Pair<>(3, "third"), new Pair<>(false, false)); @@ -1142,9 +1138,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testChannelXmlForBackup_postMigration() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, false); - ArrayMap<Pair<Integer, String>, Pair<Boolean, Boolean>> appPermissions = new ArrayMap<>(); appPermissions.put(new Pair<>(1, "first"), new Pair<>(true, false)); appPermissions.put(new Pair<>(3, "third"), new Pair<>(false, false)); @@ -1234,9 +1227,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testChannelXmlForBackup_postMigration_noExternal() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, false); - ArrayMap<Pair<Integer, String>, Pair<Boolean, Boolean>> appPermissions = new ArrayMap<>(); appPermissions.put(new Pair<>(UID_P, PKG_P), new Pair<>(true, false)); appPermissions.put(new Pair<>(UID_O, PKG_O), new Pair<>(false, false)); @@ -1319,9 +1309,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testChannelXmlForBackup_postMigration_noLocalSettings() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, false); - ArrayMap<Pair<Integer, String>, Pair<Boolean, Boolean>> appPermissions = new ArrayMap<>(); appPermissions.put(new Pair<>(1, "first"), new Pair<>(true, false)); appPermissions.put(new Pair<>(3, "third"), new Pair<>(false, false)); @@ -1533,7 +1520,8 @@ public class PreferencesHelperTest extends UiServiceTestCase { new FileNotFoundException("")).thenReturn(resId); mHelper = new PreferencesHelper(mContext, mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mStatsEventBuilderFactory, false); + mPermissionHelper, mPermissionManager, mLogger, mAppOpsManager, mUserProfiles, + mStatsEventBuilderFactory, false); NotificationChannel channel = new NotificationChannel("id", "name", IMPORTANCE_LOW); @@ -2477,9 +2465,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND, 0); when(mMockZenModeHelper.getNotificationPolicy()).thenReturn(mTestNotificationPolicy); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); mHelper.syncChannelsBypassingDnd(); // create notification channel that can bypass dnd, but app is blocked @@ -2508,9 +2493,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND, 0); when(mMockZenModeHelper.getNotificationPolicy()).thenReturn(mTestNotificationPolicy); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); mHelper.syncChannelsBypassingDnd(); // create notification channel that can bypass dnd, but app is blocked @@ -2533,9 +2515,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND, 0); when(mMockZenModeHelper.getNotificationPolicy()).thenReturn(mTestNotificationPolicy); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); mHelper.syncChannelsBypassingDnd(); // create notification channel that can bypass dnd, but app is blocked @@ -2588,9 +2567,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND, 0); when(mMockZenModeHelper.getNotificationPolicy()).thenReturn(mTestNotificationPolicy); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); mHelper.syncChannelsBypassingDnd(); assertFalse(mHelper.areChannelsBypassingDnd()); verify(mMockZenModeHelper, times(1)).setNotificationPolicy(any(), anyInt(), anyBoolean()); @@ -2602,15 +2578,58 @@ public class PreferencesHelperTest extends UiServiceTestCase { // start notification policy off with mAreChannelsBypassingDnd = false mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, 0, 0); when(mMockZenModeHelper.getNotificationPolicy()).thenReturn(mTestNotificationPolicy); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); assertFalse(mHelper.areChannelsBypassingDnd()); verify(mMockZenModeHelper, never()).setNotificationPolicy(any(), anyInt(), anyBoolean()); resetZenModeHelper(); } @Test + public void syncChannelsBypassingDnd_includesProfilesOfCurrentUser() throws Exception { + when(mUserProfiles.getCurrentProfileIds()).thenReturn(IntArray.wrap(new int[] {0, 10})); + when(mPermissionHelper.hasPermission(anyInt())).thenReturn(true); + ApplicationInfo appInfo = new ApplicationInfo(); + appInfo.targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE; + when(mPm.getApplicationInfoAsUser(any(), anyInt(), anyInt())).thenReturn(appInfo); + + NotificationChannel withBypass = new NotificationChannel("1", "with", IMPORTANCE_DEFAULT); + withBypass.setBypassDnd(true); + NotificationChannel withoutBypass = new NotificationChannel("2", "without", + IMPORTANCE_DEFAULT); + withoutBypass.setBypassDnd(false); + mHelper.createNotificationChannel("com.example", UserHandle.getUid(0, 444), withoutBypass, + false, false, Process.SYSTEM_UID, true); + mHelper.createNotificationChannel("com.example", UserHandle.getUid(10, 444), withBypass, + false, false, Process.SYSTEM_UID, true); + + mHelper.syncChannelsBypassingDnd(); + + assertThat(mHelper.areChannelsBypassingDnd()).isTrue(); + } + + @Test + public void syncChannelsBypassingDnd_excludesOtherUsers() throws Exception { + when(mUserProfiles.getCurrentProfileIds()).thenReturn(IntArray.wrap(new int[] {0})); + when(mPermissionHelper.hasPermission(anyInt())).thenReturn(true); + ApplicationInfo appInfo = new ApplicationInfo(); + appInfo.targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE; + when(mPm.getApplicationInfoAsUser(any(), anyInt(), anyInt())).thenReturn(appInfo); + + NotificationChannel withBypass = new NotificationChannel("1", "with", IMPORTANCE_DEFAULT); + withBypass.setBypassDnd(true); + NotificationChannel withoutBypass = new NotificationChannel("2", "without", + IMPORTANCE_DEFAULT); + withoutBypass.setBypassDnd(false); + mHelper.createNotificationChannel("com.example", UserHandle.getUid(0, 444), withoutBypass, + false, false, Process.SYSTEM_UID, true); + mHelper.createNotificationChannel("com.example", UserHandle.getUid(10, 444), withBypass, + false, false, Process.SYSTEM_UID, true); + + mHelper.syncChannelsBypassingDnd(); + + assertThat(mHelper.areChannelsBypassingDnd()).isFalse(); + } + + @Test public void testCreateDeletedChannel() throws Exception { long[] vibration = new long[]{100, 67, 145, 156}; NotificationChannel channel = @@ -3705,9 +3724,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { + "content_type=\"4\" flags=\"0\" show_badge=\"true\" />\n" + "</package>\n" + "</ranking>\n"; - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); + loadByteArrayXml(preQXml.getBytes(), true, USER_SYSTEM); assertEquals(PreferencesHelper.DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS, @@ -3719,9 +3736,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.setHideSilentStatusIcons(!PreferencesHelper.DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS); ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); loadStreamXml(baos, false, UserHandle.USER_ALL); assertEquals(!PreferencesHelper.DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS, @@ -3789,9 +3803,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.canShowBadge(PKG_O, UID_O); ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); loadStreamXml(baos, false, UserHandle.USER_ALL); assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O)); @@ -3802,9 +3813,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.setNotificationDelegate(PKG_O, UID_O, "other", 53); ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); loadStreamXml(baos, false, UserHandle.USER_ALL); assertEquals("other", mHelper.getNotificationDelegate(PKG_O, UID_O)); @@ -3816,9 +3824,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.revokeNotificationDelegate(PKG_O, UID_O); ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); loadStreamXml(baos, false, UserHandle.USER_ALL); assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O)); @@ -3832,9 +3837,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { assertEquals(BUBBLE_PREFERENCE_NONE, mHelper.getBubblePreference(PKG_O, UID_O)); ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); loadStreamXml(baos, false, UserHandle.USER_ALL); assertEquals(BUBBLE_PREFERENCE_NONE, mHelper.getBubblePreference(PKG_O, UID_O)); @@ -3888,9 +3890,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.getAppLockedFields(PKG_O, UID_O)); ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); loadStreamXml(baos, false, UserHandle.USER_ALL); assertEquals(BUBBLE_PREFERENCE_SELECTED, mHelper.getBubblePreference(PKG_O, UID_O)); @@ -3926,9 +3925,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.getAppLockedFields(PKG_O, UID_O)); ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); loadStreamXml(baos, false, UserHandle.USER_ALL); assertEquals(mHelper.getBubblePreference(PKG_O, UID_O), BUBBLE_PREFERENCE_NONE); @@ -4584,10 +4580,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testPlaceholderConversationId_shortcutRequired() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); - final String xml = "<ranking version=\"1\">\n" + "<package name=\"" + PKG_O + "\" uid=\"" + UID_O + "\" >\n" + "<channel id=\"id\" name=\"hi\" importance=\"3\" conv_id=\"foo:placeholder_id\"/>" @@ -4604,10 +4596,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testNormalConversationId_shortcutRequired() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); - final String xml = "<ranking version=\"1\">\n" + "<package name=\"" + PKG_O + "\" uid=\"" + UID_O + "\" >\n" + "<channel id=\"id\" name=\"hi\" importance=\"3\" conv_id=\"other\"/>" @@ -4624,10 +4612,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testNoConversationId_shortcutRequired() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); - final String xml = "<ranking version=\"1\">\n" + "<package name=\"" + PKG_O + "\" uid=\"" + UID_O + "\" >\n" + "<channel id=\"id\" name=\"hi\" importance=\"3\"/>" @@ -4644,10 +4628,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testDeleted_noTime() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); - final String xml = "<ranking version=\"1\">\n" + "<package name=\"" + PKG_O + "\" uid=\"" + UID_O + "\" >\n" + "<channel id=\"id\" name=\"hi\" importance=\"3\" deleted=\"true\"/>" @@ -4664,13 +4644,10 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testDeleted_twice() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); - mHelper.createNotificationChannel( PKG_P, UID_P, new NotificationChannel("id", "id", 2), true, false, UID_P, false); + assertTrue(mHelper.deleteNotificationChannel(PKG_P, UID_P, "id", UID_P, false)); assertFalse(mHelper.deleteNotificationChannel(PKG_P, UID_P, "id", @@ -4679,10 +4656,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testDeleted_recentTime() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); - mHelper.createNotificationChannel( PKG_P, UID_P, new NotificationChannel("id", "id", 2), true, false, UID_P, false); @@ -4698,9 +4671,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); mHelper.readXml(parser, true, USER_SYSTEM); NotificationChannel nc = mHelper.getNotificationChannel(PKG_P, UID_P, "id", true); @@ -4710,10 +4680,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testUnDelete_time() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); - mHelper.createNotificationChannel( PKG_P, UID_P, new NotificationChannel("id", "id", 2), true, false, UID_P, false); @@ -4732,10 +4698,6 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testDeleted_longTime() throws Exception { - mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper, - mPermissionHelper, mPermissionManager, mLogger, - mAppOpsManager, mStatsEventBuilderFactory, false); - long time = System.currentTimeMillis() - (DateUtils.DAY_IN_MILLIS * 30); final String xml = "<ranking version=\"1\">\n" |