Add notification sent count to app info

Test: robotests
Bug: 79607096
Change-Id: I6f96ad7890ff8f224749db10fc8a18d4626cac11
This commit is contained in:
Julia Reynolds
2018-06-12 10:32:46 -04:00
parent 8ebfb12cac
commit 7b5ef08b81
5 changed files with 47 additions and 31 deletions

View File

@@ -8267,7 +8267,7 @@
<!-- App notification summary with notifications enabled [CHAR LIMIT=40] --> <!-- App notification summary with notifications enabled [CHAR LIMIT=40] -->
<string name="notifications_enabled">On</string> <string name="notifications_enabled">On</string>
<!-- App notification summary with notifications enabled [CHAR LIMIT=40] --> <!-- App notification summary with notifications enabled [CHAR LIMIT=40] -->
<string name="notifications_enabled_with_info">On / <xliff:g id="notifications_categories_off" example="3 categories turned off">%1$s</xliff:g> </string> <string name="notifications_enabled_with_info"><xliff:g id="notifications_sent" example="~6 per week">%1$s</xliff:g> / <xliff:g id="notifications_categories_off" example="3 categories turned off">%2$s</xliff:g> </string>
<!-- Label for showing apps with blocked notifications in list [CHAR LIMIT=30] --> <!-- Label for showing apps with blocked notifications in list [CHAR LIMIT=30] -->
<string name="notifications_disabled">Off</string> <string name="notifications_disabled">Off</string>
<!-- Label for showing apps with some blocked notifications in list [CHAR LIMIT=30] --> <!-- Label for showing apps with some blocked notifications in list [CHAR LIMIT=30] -->

View File

@@ -84,14 +84,15 @@ public class AppNotificationPreferenceController extends AppInfoPreferenceContro
if (appRow.banned) { if (appRow.banned) {
return context.getText(R.string.notifications_disabled); return context.getText(R.string.notifications_disabled);
} else if (appRow.channelCount == 0) { } else if (appRow.channelCount == 0) {
return context.getText(R.string.notifications_enabled); return NotificationBackend.getSentSummary(context, appRow.sentByApp, false);
} else if (appRow.channelCount == appRow.blockedChannelCount) { } else if (appRow.channelCount == appRow.blockedChannelCount) {
return context.getText(R.string.notifications_disabled); return context.getText(R.string.notifications_disabled);
} else { } else {
if (appRow.blockedChannelCount == 0) { if (appRow.blockedChannelCount == 0) {
return context.getText(R.string.notifications_enabled); return NotificationBackend.getSentSummary(context, appRow.sentByApp, false);
} }
return context.getString(R.string.notifications_enabled_with_info, return context.getString(R.string.notifications_enabled_with_info,
NotificationBackend.getSentSummary(context, appRow.sentByApp, false),
context.getResources().getQuantityString(R.plurals.notifications_categories_off, context.getResources().getQuantityString(R.plurals.notifications_categories_off,
appRow.blockedChannelCount, appRow.blockedChannelCount)); appRow.blockedChannelCount, appRow.blockedChannelCount));
} }

View File

@@ -73,7 +73,7 @@ public class NotificationBackend {
row.userId = UserHandle.getUserId(row.uid); row.userId = UserHandle.getUserId(row.uid);
row.blockedChannelCount = getBlockedChannelCount(row.pkg, row.uid); row.blockedChannelCount = getBlockedChannelCount(row.pkg, row.uid);
row.channelCount = getChannelCount(row.pkg, row.uid); row.channelCount = getChannelCount(row.pkg, row.uid);
row.sentByChannel = getAggregatedUsageEvents(context, row.userId, row.pkg); recordAggregatedUsageEvents(context, row);
return row; return row;
} }
@@ -271,22 +271,22 @@ public class NotificationBackend {
} }
} }
protected Map<String, NotificationsSentState> getAggregatedUsageEvents( protected void recordAggregatedUsageEvents(Context context, AppRow appRow) {
Context context, int userId, String pkg) {
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
long startTime = now - (DateUtils.DAY_IN_MILLIS * DAYS_TO_CHECK); long startTime = now - (DateUtils.DAY_IN_MILLIS * DAYS_TO_CHECK);
UsageEvents events = null; UsageEvents events = null;
try { try {
events = sUsageStatsManager.queryEventsForPackageForUser( events = sUsageStatsManager.queryEventsForPackageForUser(
startTime, now, userId, pkg, context.getPackageName()); startTime, now, appRow.userId, appRow.pkg, context.getPackageName());
} catch (RemoteException e) { } catch (RemoteException e) {
e.printStackTrace(); e.printStackTrace();
} }
return getAggregatedUsageEvents(events); recordAggregatedUsageEvents(events, appRow);
} }
protected Map<String, NotificationsSentState> getAggregatedUsageEvents(UsageEvents events) { protected void recordAggregatedUsageEvents(UsageEvents events, AppRow appRow) {
Map<String, NotificationsSentState> sentByChannel = new HashMap<>(); appRow.sentByChannel = new HashMap<>();
appRow.sentByApp = new NotificationsSentState();
if (events != null) { if (events != null) {
UsageEvents.Event event = new UsageEvents.Event(); UsageEvents.Event event = new UsageEvents.Event();
while (events.hasNextEvent()) { while (events.hasNextEvent()) {
@@ -295,22 +295,24 @@ public class NotificationBackend {
if (event.getEventType() == UsageEvents.Event.NOTIFICATION_INTERRUPTION) { if (event.getEventType() == UsageEvents.Event.NOTIFICATION_INTERRUPTION) {
String channelId = event.mNotificationChannelId; String channelId = event.mNotificationChannelId;
if (channelId != null) { if (channelId != null) {
NotificationsSentState stats = sentByChannel.get(channelId); NotificationsSentState stats = appRow.sentByChannel.get(channelId);
if (stats == null) { if (stats == null) {
stats = new NotificationsSentState(); stats = new NotificationsSentState();
sentByChannel.put(channelId, stats); appRow.sentByChannel.put(channelId, stats);
} }
if (event.getTimeStamp() > stats.lastSent) { if (event.getTimeStamp() > stats.lastSent) {
stats.lastSent = event.getTimeStamp(); stats.lastSent = event.getTimeStamp();
appRow.sentByApp.lastSent = event.getTimeStamp();
} }
stats.sentCount++; stats.sentCount++;
appRow.sentByApp.sentCount++;
calculateAvgSentCounts(stats); calculateAvgSentCounts(stats);
} }
} }
} }
calculateAvgSentCounts(appRow.sentByApp);
} }
return sentByChannel;
} }
public static CharSequence getSentSummary(Context context, NotificationsSentState state, public static CharSequence getSentSummary(Context context, NotificationsSentState state,
@@ -372,5 +374,6 @@ public class NotificationBackend {
public int blockedChannelCount; public int blockedChannelCount;
public int channelCount; public int channelCount;
public Map<String, NotificationsSentState> sentByChannel; public Map<String, NotificationsSentState> sentByChannel;
public NotificationsSentState sentByApp;
} }
} }

View File

@@ -139,10 +139,12 @@ public class AppNotificationPreferenceControllerTest {
appRow.banned = false; appRow.banned = false;
appRow.blockedChannelCount = 30; appRow.blockedChannelCount = 30;
appRow.channelCount = 60; appRow.channelCount = 60;
appRow.sentByApp = new NotificationBackend.NotificationsSentState();
appRow.sentByApp.avgSentWeekly = 4;
assertThat(mController.getNotificationSummary( assertThat(mController.getNotificationSummary(
appRow, mContext).toString().contains("30")).isTrue(); appRow, mContext).toString().contains("30")).isTrue();
assertThat(mController.getNotificationSummary( assertThat(mController.getNotificationSummary(appRow, mContext).toString().contains(
appRow, mContext).toString().contains("On")).isTrue(); NotificationBackend.getSentSummary(mContext, appRow.sentByApp, false))).isTrue();
} }
@Test @Test
@@ -151,7 +153,10 @@ public class AppNotificationPreferenceControllerTest {
appRow.banned = false; appRow.banned = false;
appRow.blockedChannelCount = 0; appRow.blockedChannelCount = 0;
appRow.channelCount = 10; appRow.channelCount = 10;
assertThat(mController.getNotificationSummary(appRow, mContext).toString()).isEqualTo("On"); appRow.sentByApp = new NotificationBackend.NotificationsSentState();
appRow.sentByApp.avgSentDaily = 4;
assertThat(mController.getNotificationSummary(appRow, mContext).toString()).isEqualTo(
NotificationBackend.getSentSummary(mContext, appRow.sentByApp, false));
} }
@Test @Test
@@ -160,6 +165,9 @@ public class AppNotificationPreferenceControllerTest {
appRow.banned = false; appRow.banned = false;
appRow.blockedChannelCount = 0; appRow.blockedChannelCount = 0;
appRow.channelCount = 0; appRow.channelCount = 0;
assertThat(mController.getNotificationSummary(appRow, mContext).toString()).isEqualTo("On"); appRow.sentByApp = new NotificationBackend.NotificationsSentState();
appRow.sentByApp.avgSentDaily = 7;
assertThat(mController.getNotificationSummary(appRow, mContext).toString()).isEqualTo(
NotificationBackend.getSentSummary(mContext, appRow.sentByApp, false));
} }
} }

View File

@@ -142,29 +142,33 @@ public class NotificationBackendTest {
good.mNotificationChannelId = "channel1"; good.mNotificationChannelId = "channel1";
good.mTimeStamp = 2; good.mTimeStamp = 2;
events.add(good); events.add(good);
UsageEvents.Event good1 = new UsageEvents.Event();
good1.mEventType = UsageEvents.Event.NOTIFICATION_INTERRUPTION;
good1.mPackage = "pkg";
good1.mNotificationChannelId = "channel1";
good1.mTimeStamp = 6;
events.add(good1);
UsageEvents.Event good2 = new UsageEvents.Event(); UsageEvents.Event good2 = new UsageEvents.Event();
good2.mEventType = UsageEvents.Event.NOTIFICATION_INTERRUPTION; good2.mEventType = UsageEvents.Event.NOTIFICATION_INTERRUPTION;
good2.mPackage = "pkg"; good2.mPackage = "pkg";
good2.mNotificationChannelId = "channel2"; good2.mNotificationChannelId = "channel2";
good2.mTimeStamp = 3; good2.mTimeStamp = 3;
events.add(good2); events.add(good2);
UsageEvents.Event good1 = new UsageEvents.Event();
good1.mEventType = UsageEvents.Event.NOTIFICATION_INTERRUPTION;
good1.mPackage = "pkg";
good1.mNotificationChannelId = "channel1";
good1.mTimeStamp = 6;
events.add(good1);
NotificationBackend backend = new NotificationBackend(); NotificationBackend backend = new NotificationBackend();
Map<String, NotificationBackend.NotificationsSentState> stats = AppRow appRow = new AppRow();
backend.getAggregatedUsageEvents(getUsageEvents(events)); appRow.pkg = "pkg";
backend.recordAggregatedUsageEvents(getUsageEvents(events), appRow);
assertThat(stats.get("channel1").sentCount).isEqualTo(2); assertThat(appRow.sentByChannel.get("channel1").sentCount).isEqualTo(2);
assertThat(stats.get("channel1").lastSent).isEqualTo(6); assertThat(appRow.sentByChannel.get("channel1").lastSent).isEqualTo(6);
assertThat(stats.get("channel1").avgSentWeekly).isEqualTo(2); assertThat(appRow.sentByChannel.get("channel1").avgSentWeekly).isEqualTo(2);
assertThat(stats.get("channel2").sentCount).isEqualTo(1); assertThat(appRow.sentByChannel.get("channel2").sentCount).isEqualTo(1);
assertThat(stats.get("channel2").lastSent).isEqualTo(3); assertThat(appRow.sentByChannel.get("channel2").lastSent).isEqualTo(3);
assertThat(stats.get("channel2").avgSentWeekly).isEqualTo(1); assertThat(appRow.sentByChannel.get("channel2").avgSentWeekly).isEqualTo(1);
assertThat(appRow.sentByApp.sentCount).isEqualTo(3);
assertThat(appRow.sentByApp.lastSent).isEqualTo(6);
assertThat(appRow.sentByApp.avgSentWeekly).isEqualTo(3);
} }
private UsageEvents getUsageEvents(List<UsageEvents.Event> events) { private UsageEvents getUsageEvents(List<UsageEvents.Event> events) {