Add notification sent count to app info
Test: robotests Bug: 79607096 Change-Id: I6f96ad7890ff8f224749db10fc8a18d4626cac11
This commit is contained in:
@@ -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] -->
|
||||||
|
@@ -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));
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user