summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Danning Chen <danningc@google.com> 2020-10-15 20:28:04 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-10-15 20:28:04 +0000
commit1eeed7a34e75b7452e15932e21e29373f9873ed9 (patch)
treeefaa9e22ecc0af2d58ecbcb952f3984c1a7b431c
parentc9ba946b80cd67c58f7ca52bfec4c3d10127deaf (diff)
parent59c9b6da367e75334efe229a5797aadfd41d1f48 (diff)
Merge "Count the in-app conversations (locus ID) in the recent conversations"
-rw-r--r--services/people/java/com/android/server/people/data/DataManager.java21
-rw-r--r--services/people/java/com/android/server/people/data/UsageStatsQueryHelper.java19
-rw-r--r--services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java44
-rw-r--r--services/tests/servicestests/src/com/android/server/people/data/UsageStatsQueryHelperTest.java11
4 files changed, 87 insertions, 8 deletions
diff --git a/services/people/java/com/android/server/people/data/DataManager.java b/services/people/java/com/android/server/people/data/DataManager.java
index 87f2c581ef8f..7803e78eee34 100644
--- a/services/people/java/com/android/server/people/data/DataManager.java
+++ b/services/people/java/com/android/server/people/data/DataManager.java
@@ -1037,14 +1037,15 @@ public class DataManager {
* A {@link Runnable} that queries the Usage Stats Service for recent events for a specified
* user.
*/
- private class UsageStatsQueryRunnable implements Runnable {
+ private class UsageStatsQueryRunnable implements Runnable,
+ UsageStatsQueryHelper.EventListener {
private final UsageStatsQueryHelper mUsageStatsQueryHelper;
private long mLastEventTimestamp;
private UsageStatsQueryRunnable(int userId) {
mUsageStatsQueryHelper = mInjector.createUsageStatsQueryHelper(userId,
- (packageName) -> getPackage(packageName, userId));
+ (packageName) -> getPackage(packageName, userId), this);
mLastEventTimestamp = System.currentTimeMillis() - QUERY_EVENTS_MAX_AGE_MS;
}
@@ -1054,6 +1055,17 @@ public class DataManager {
mLastEventTimestamp = mUsageStatsQueryHelper.getLastEventTimestamp();
}
}
+
+ @Override
+ public void onEvent(PackageData packageData, ConversationInfo conversationInfo,
+ Event event) {
+ if (event.getType() == Event.TYPE_IN_APP_CONVERSATION) {
+ ConversationInfo updated = new ConversationInfo.Builder(conversationInfo)
+ .setLastEventTimestamp(event.getTimestamp())
+ .build();
+ packageData.getConversationStore().addOrUpdate(updated);
+ }
+ }
}
/** A {@link BroadcastReceiver} that receives the intents for a specified user. */
@@ -1135,8 +1147,9 @@ public class DataManager {
}
UsageStatsQueryHelper createUsageStatsQueryHelper(@UserIdInt int userId,
- Function<String, PackageData> packageDataGetter) {
- return new UsageStatsQueryHelper(userId, packageDataGetter);
+ Function<String, PackageData> packageDataGetter,
+ UsageStatsQueryHelper.EventListener eventListener) {
+ return new UsageStatsQueryHelper(userId, packageDataGetter, eventListener);
}
}
}
diff --git a/services/people/java/com/android/server/people/data/UsageStatsQueryHelper.java b/services/people/java/com/android/server/people/data/UsageStatsQueryHelper.java
index d008b72c6bad..aefb6e362255 100644
--- a/services/people/java/com/android/server/people/data/UsageStatsQueryHelper.java
+++ b/services/people/java/com/android/server/people/data/UsageStatsQueryHelper.java
@@ -43,17 +43,24 @@ class UsageStatsQueryHelper {
private final Function<String, PackageData> mPackageDataGetter;
// Activity name -> Conversation start event (LOCUS_ID_SET)
private final Map<ComponentName, UsageEvents.Event> mConvoStartEvents = new ArrayMap<>();
+ private final EventListener mEventListener;
private long mLastEventTimestamp;
+ interface EventListener {
+ void onEvent(PackageData packageData, ConversationInfo conversationInfo, Event event);
+ }
+
/**
* @param userId The user whose events are to be queried.
* @param packageDataGetter The function to get {@link PackageData} with a package name.
+ * @param eventListener A listener that listens to the new event.
*/
UsageStatsQueryHelper(@UserIdInt int userId,
- Function<String, PackageData> packageDataGetter) {
+ Function<String, PackageData> packageDataGetter, EventListener eventListener) {
mUsageStatsManagerInternal = getUsageStatsManagerInternal();
mUserId = userId;
mPackageDataGetter = packageDataGetter;
+ mEventListener = eventListener;
}
/**
@@ -198,21 +205,27 @@ class UsageStatsQueryHelper {
}
private void addEventByShortcutId(PackageData packageData, String shortcutId, Event event) {
- if (packageData.getConversationStore().getConversation(shortcutId) == null) {
+ ConversationInfo conversationInfo =
+ packageData.getConversationStore().getConversation(shortcutId);
+ if (conversationInfo == null) {
return;
}
EventHistoryImpl eventHistory = packageData.getEventStore().getOrCreateEventHistory(
EventStore.CATEGORY_SHORTCUT_BASED, shortcutId);
eventHistory.addEvent(event);
+ mEventListener.onEvent(packageData, conversationInfo, event);
}
private void addEventByLocusId(PackageData packageData, LocusId locusId, Event event) {
- if (packageData.getConversationStore().getConversationByLocusId(locusId) == null) {
+ ConversationInfo conversationInfo =
+ packageData.getConversationStore().getConversationByLocusId(locusId);
+ if (conversationInfo == null) {
return;
}
EventHistoryImpl eventHistory = packageData.getEventStore().getOrCreateEventHistory(
EventStore.CATEGORY_LOCUS_ID_BASED, locusId.getId());
eventHistory.addEvent(event);
+ mEventListener.onEvent(packageData, conversationInfo, event);
}
private static UsageStatsManagerInternal getUsageStatsManagerInternal() {
diff --git a/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java b/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java
index f37054d269b1..9ce4ee0e8fac 100644
--- a/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/data/DataManagerTest.java
@@ -41,6 +41,7 @@ import static org.mockito.Mockito.when;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UserIdInt;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
@@ -100,6 +101,7 @@ import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
+import java.util.function.Function;
@RunWith(JUnit4.class)
public final class DataManagerTest {
@@ -660,6 +662,26 @@ public final class DataManagerTest {
}
@Test
+ public void testConversationLastEventTimestampUpdate() {
+ mDataManager.onUserUnlocked(USER_ID_PRIMARY);
+
+ ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
+ buildPerson());
+ mDataManager.addOrUpdateConversationInfo(shortcut);
+
+ PackageData packageData = mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY);
+ ConversationInfo conversationInfo =
+ packageData.getConversationStore().getConversation(TEST_SHORTCUT_ID);
+ Event event = new Event(123L, Event.TYPE_IN_APP_CONVERSATION);
+
+ mInjector.mUsageStatsQueryHelper.mEventListener.onEvent(packageData, conversationInfo,
+ event);
+ ConversationInfo newConversationInfo =
+ packageData.getConversationStore().getConversation(TEST_SHORTCUT_ID);
+ assertEquals(123L, newConversationInfo.getLastEventTimestamp());
+ }
+
+ @Test
public void testDeleteUninstalledPackageDataOnPackageRemoved() {
mDataManager.onUserUnlocked(USER_ID_PRIMARY);
@@ -1122,6 +1144,18 @@ public final class DataManagerTest {
}
}
+ private class TestUsageStatsQueryHelper extends UsageStatsQueryHelper {
+
+ private final EventListener mEventListener;
+
+ TestUsageStatsQueryHelper(int userId,
+ Function<String, PackageData> packageDataGetter,
+ EventListener eventListener) {
+ super(userId, packageDataGetter, eventListener);
+ mEventListener = eventListener;
+ }
+ }
+
private class TestInjector extends DataManager.Injector {
private final TestContactsQueryHelper mContactsQueryHelper =
@@ -1129,6 +1163,7 @@ public final class DataManagerTest {
private TestCallLogQueryHelper mCallLogQueryHelper;
private TestMmsQueryHelper mMmsQueryHelper;
private TestSmsQueryHelper mSmsQueryHelper;
+ private TestUsageStatsQueryHelper mUsageStatsQueryHelper;
@Override
ScheduledExecutorService createScheduledExecutor() {
@@ -1165,5 +1200,14 @@ public final class DataManagerTest {
mSmsQueryHelper = new TestSmsQueryHelper(context, eventConsumer);
return mSmsQueryHelper;
}
+
+ @Override
+ UsageStatsQueryHelper createUsageStatsQueryHelper(@UserIdInt int userId,
+ Function<String, PackageData> packageDataGetter,
+ UsageStatsQueryHelper.EventListener eventListener) {
+ mUsageStatsQueryHelper =
+ new TestUsageStatsQueryHelper(userId, packageDataGetter, eventListener);
+ return mUsageStatsQueryHelper;
+ }
}
}
diff --git a/services/tests/servicestests/src/com/android/server/people/data/UsageStatsQueryHelperTest.java b/services/tests/servicestests/src/com/android/server/people/data/UsageStatsQueryHelperTest.java
index e9686071409e..baa74b7ce960 100644
--- a/services/tests/servicestests/src/com/android/server/people/data/UsageStatsQueryHelperTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/data/UsageStatsQueryHelperTest.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.annotation.NonNull;
@@ -72,6 +73,8 @@ public final class UsageStatsQueryHelperTest {
@Mock
private UsageStatsManagerInternal mUsageStatsManagerInternal;
+ @Mock
+ private UsageStatsQueryHelper.EventListener mEventListener;
private TestPackageData mPackageData;
private UsageStatsQueryHelper mHelper;
@@ -93,7 +96,7 @@ public final class UsageStatsQueryHelperTest {
.setLocusId(LOCUS_ID_1)
.build();
- mHelper = new UsageStatsQueryHelper(USER_ID_PRIMARY, pkg -> mPackageData);
+ mHelper = new UsageStatsQueryHelper(USER_ID_PRIMARY, pkg -> mPackageData, mEventListener);
}
@After
@@ -131,6 +134,8 @@ public final class UsageStatsQueryHelperTest {
Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
assertEquals(1, events.size());
assertEquals(createInAppConversationEvent(100_000L, 10), events.get(0));
+ verify(mEventListener).onEvent(
+ mPackageData, mPackageData.mConversationStore.mConversationInfo, events.get(0));
}
@Test
@@ -145,6 +150,8 @@ public final class UsageStatsQueryHelperTest {
Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
assertEquals(1, events.size());
assertEquals(createInAppConversationEvent(100_000L, 10), events.get(0));
+ verify(mEventListener).onEvent(
+ mPackageData, mPackageData.mConversationStore.mConversationInfo, events.get(0));
}
@Test
@@ -159,6 +166,8 @@ public final class UsageStatsQueryHelperTest {
Event.ALL_EVENT_TYPES, 0L, Long.MAX_VALUE);
assertEquals(1, events.size());
assertEquals(createInAppConversationEvent(100_000L, 10), events.get(0));
+ verify(mEventListener).onEvent(
+ mPackageData, mPackageData.mConversationStore.mConversationInfo, events.get(0));
}
@Test