Loading services/core/java/com/android/server/notification/RankingHelper.java +18 −1 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ import android.content.pm.ParceledListSlice; import android.metrics.LogMaker; import android.os.Build; import android.os.UserHandle; import android.provider.Settings; import android.service.notification.NotificationListenerService.Ranking; import android.text.TextUtils; import android.util.ArrayMap; Loading Loading @@ -508,6 +507,14 @@ public class RankingHelper implements RankingConfig { updateConfig(); } int getPackagePriority(String pkg, int uid) { return getOrCreateRecord(pkg, uid).priority; } int getPackageVisibility(String pkg, int uid) { return getOrCreateRecord(pkg, uid).visibility; } @Override public void createNotificationChannelGroup(String pkg, int uid, NotificationChannelGroup group, boolean fromTargetApp) { Loading Loading @@ -608,6 +615,16 @@ public class RankingHelper implements RankingConfig { } r.channels.put(updatedChannel.getId(), updatedChannel); if (NotificationChannel.DEFAULT_CHANNEL_ID.equals(updatedChannel.getId())) { // copy settings to app level so they are inherited by new channels // when the app migrates r.importance = updatedChannel.getImportance(); r.priority = updatedChannel.canBypassDnd() ? Notification.PRIORITY_MAX : Notification.PRIORITY_DEFAULT; r.visibility = updatedChannel.getLockscreenVisibility(); r.showBadge = updatedChannel.canShowBadge(); } MetricsLogger.action(getChannelLog(updatedChannel, pkg)); updateConfig(); } Loading services/tests/notification/src/com/android/server/notification/RankingHelperTest.java +52 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_HIGH; import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.app.NotificationManager.IMPORTANCE_NONE; import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.fail; Loading Loading @@ -48,6 +49,7 @@ import android.media.AudioAttributes; import android.net.Uri; import android.os.Build; import android.os.UserHandle; import android.service.notification.NotificationListenerService; import android.service.notification.StatusBarNotification; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; Loading Loading @@ -549,6 +551,56 @@ public class RankingHelperTest { assertEquals(channel2, mHelper.getNotificationChannel(PKG, UID, channel.getId(), false)); } @Test public void testUpdate_preUpgrade_updatesAppFields() throws Exception { mHelper.setImportance(PKG, UID, IMPORTANCE_UNSPECIFIED); assertTrue(mHelper.canShowBadge(PKG, UID)); assertEquals(Notification.PRIORITY_DEFAULT, mHelper.getPackagePriority(PKG, UID)); assertEquals(NotificationManager.VISIBILITY_NO_OVERRIDE, mHelper.getPackageVisibility(PKG, UID)); NotificationChannel defaultChannel = mHelper.getNotificationChannel( PKG, UID, NotificationChannel.DEFAULT_CHANNEL_ID, false); defaultChannel.setShowBadge(false); defaultChannel.setImportance(IMPORTANCE_NONE); defaultChannel.setBypassDnd(true); defaultChannel.setLockscreenVisibility(Notification.VISIBILITY_SECRET); mHelper.updateNotificationChannel(PKG, UID, defaultChannel); // ensure app level fields are changed assertFalse(mHelper.canShowBadge(PKG, UID)); assertEquals(Notification.PRIORITY_MAX, mHelper.getPackagePriority(PKG, UID)); assertEquals(Notification.VISIBILITY_SECRET, mHelper.getPackageVisibility(PKG, UID)); assertEquals(IMPORTANCE_NONE, mHelper.getImportance(PKG, UID)); } @Test public void testUpdate_postUpgrade_noUpdateAppFields() throws Exception { final NotificationChannel channel = new NotificationChannel("id2", "name2", IMPORTANCE_LOW); mHelper.createNotificationChannel(PKG, UID, channel, false); assertTrue(mHelper.canShowBadge(PKG, UID)); assertEquals(Notification.PRIORITY_DEFAULT, mHelper.getPackagePriority(PKG, UID)); assertEquals(NotificationManager.VISIBILITY_NO_OVERRIDE, mHelper.getPackageVisibility(PKG, UID)); channel.setShowBadge(false); channel.setImportance(IMPORTANCE_NONE); channel.setBypassDnd(true); channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET); mHelper.updateNotificationChannel(PKG, UID, channel); // ensure app level fields are not changed assertTrue(mHelper.canShowBadge(PKG, UID)); assertEquals(Notification.PRIORITY_DEFAULT, mHelper.getPackagePriority(PKG, UID)); assertEquals(NotificationManager.VISIBILITY_NO_OVERRIDE, mHelper.getPackageVisibility(PKG, UID)); assertEquals(NotificationManager.IMPORTANCE_UNSPECIFIED, mHelper.getImportance(PKG, UID)); } @Test public void testGetNotificationChannel_ReturnsNullForUnknownChannel() throws Exception { assertEquals(null, mHelper.getNotificationChannel(PKG, UID, "garbage", false)); Loading Loading
services/core/java/com/android/server/notification/RankingHelper.java +18 −1 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ import android.content.pm.ParceledListSlice; import android.metrics.LogMaker; import android.os.Build; import android.os.UserHandle; import android.provider.Settings; import android.service.notification.NotificationListenerService.Ranking; import android.text.TextUtils; import android.util.ArrayMap; Loading Loading @@ -508,6 +507,14 @@ public class RankingHelper implements RankingConfig { updateConfig(); } int getPackagePriority(String pkg, int uid) { return getOrCreateRecord(pkg, uid).priority; } int getPackageVisibility(String pkg, int uid) { return getOrCreateRecord(pkg, uid).visibility; } @Override public void createNotificationChannelGroup(String pkg, int uid, NotificationChannelGroup group, boolean fromTargetApp) { Loading Loading @@ -608,6 +615,16 @@ public class RankingHelper implements RankingConfig { } r.channels.put(updatedChannel.getId(), updatedChannel); if (NotificationChannel.DEFAULT_CHANNEL_ID.equals(updatedChannel.getId())) { // copy settings to app level so they are inherited by new channels // when the app migrates r.importance = updatedChannel.getImportance(); r.priority = updatedChannel.canBypassDnd() ? Notification.PRIORITY_MAX : Notification.PRIORITY_DEFAULT; r.visibility = updatedChannel.getLockscreenVisibility(); r.showBadge = updatedChannel.canShowBadge(); } MetricsLogger.action(getChannelLog(updatedChannel, pkg)); updateConfig(); } Loading
services/tests/notification/src/com/android/server/notification/RankingHelperTest.java +52 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_HIGH; import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.app.NotificationManager.IMPORTANCE_NONE; import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.fail; Loading Loading @@ -48,6 +49,7 @@ import android.media.AudioAttributes; import android.net.Uri; import android.os.Build; import android.os.UserHandle; import android.service.notification.NotificationListenerService; import android.service.notification.StatusBarNotification; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; Loading Loading @@ -549,6 +551,56 @@ public class RankingHelperTest { assertEquals(channel2, mHelper.getNotificationChannel(PKG, UID, channel.getId(), false)); } @Test public void testUpdate_preUpgrade_updatesAppFields() throws Exception { mHelper.setImportance(PKG, UID, IMPORTANCE_UNSPECIFIED); assertTrue(mHelper.canShowBadge(PKG, UID)); assertEquals(Notification.PRIORITY_DEFAULT, mHelper.getPackagePriority(PKG, UID)); assertEquals(NotificationManager.VISIBILITY_NO_OVERRIDE, mHelper.getPackageVisibility(PKG, UID)); NotificationChannel defaultChannel = mHelper.getNotificationChannel( PKG, UID, NotificationChannel.DEFAULT_CHANNEL_ID, false); defaultChannel.setShowBadge(false); defaultChannel.setImportance(IMPORTANCE_NONE); defaultChannel.setBypassDnd(true); defaultChannel.setLockscreenVisibility(Notification.VISIBILITY_SECRET); mHelper.updateNotificationChannel(PKG, UID, defaultChannel); // ensure app level fields are changed assertFalse(mHelper.canShowBadge(PKG, UID)); assertEquals(Notification.PRIORITY_MAX, mHelper.getPackagePriority(PKG, UID)); assertEquals(Notification.VISIBILITY_SECRET, mHelper.getPackageVisibility(PKG, UID)); assertEquals(IMPORTANCE_NONE, mHelper.getImportance(PKG, UID)); } @Test public void testUpdate_postUpgrade_noUpdateAppFields() throws Exception { final NotificationChannel channel = new NotificationChannel("id2", "name2", IMPORTANCE_LOW); mHelper.createNotificationChannel(PKG, UID, channel, false); assertTrue(mHelper.canShowBadge(PKG, UID)); assertEquals(Notification.PRIORITY_DEFAULT, mHelper.getPackagePriority(PKG, UID)); assertEquals(NotificationManager.VISIBILITY_NO_OVERRIDE, mHelper.getPackageVisibility(PKG, UID)); channel.setShowBadge(false); channel.setImportance(IMPORTANCE_NONE); channel.setBypassDnd(true); channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET); mHelper.updateNotificationChannel(PKG, UID, channel); // ensure app level fields are not changed assertTrue(mHelper.canShowBadge(PKG, UID)); assertEquals(Notification.PRIORITY_DEFAULT, mHelper.getPackagePriority(PKG, UID)); assertEquals(NotificationManager.VISIBILITY_NO_OVERRIDE, mHelper.getPackageVisibility(PKG, UID)); assertEquals(NotificationManager.IMPORTANCE_UNSPECIFIED, mHelper.getImportance(PKG, UID)); } @Test public void testGetNotificationChannel_ReturnsNullForUnknownChannel() throws Exception { assertEquals(null, mHelper.getNotificationChannel(PKG, UID, "garbage", false)); Loading