diff options
| author | 2021-04-15 13:34:54 -0700 | |
|---|---|---|
| committer | 2021-04-28 11:19:38 -0700 | |
| commit | bbc19b03c2516f23dfe8a44649a23438ee90fc47 (patch) | |
| tree | 2fa65ee6c569e74eaae17d3c725c895dc02d4eb4 | |
| parent | 00475ff23db79408610218c9627ab7547066df81 (diff) | |
Consolidate shortcut usage report api.
In S, to simplify shortcut usage report, calling pushDynamicShortcut now
leads to usage report so that developer only needs to deal with one api.
Bug: 151359749
Test: atest ShortcutManagerTest1 ShortcutManagerTest2
ShortcutManagerTest3 ShortcutManagerTest4 ShortcutManagerTest5
ShortcutManagerTest6 ShortcutManagerTest7 ShortcutManagerTest8
ShortcutManagerTest9 ShortcutManagerTest10 ShortcutManagerTest11
Test: atest CtsShortcutManagerTestCases
Change-Id: Ib7b0de0c8343475c2e09078240a87f9b29d55880
3 files changed, 46 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index 007393ab80fb..00b7fffe69fe 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -2240,6 +2240,8 @@ public class ShortcutService extends IShortcutService.Stub { packageShortcutsChanged(packageName, userId, changedShortcuts, removedShortcuts); + reportShortcutUsedInternal(packageName, shortcut.getId(), userId); + verifyStates(); ret.complete(null); @@ -2850,12 +2852,7 @@ public class ShortcutService extends IShortcutService.Stub { } } - final long token = injectClearCallingIdentity(); - try { - mUsageStatsManagerInternal.reportShortcutUsage(packageName, shortcutId, userId); - } finally { - injectRestoreCallingIdentity(token); - } + reportShortcutUsedInternal(packageName, shortcutId, userId); ret.complete(true); } catch (Exception e) { ret.completeExceptionally(e); @@ -2864,6 +2861,15 @@ public class ShortcutService extends IShortcutService.Stub { return ret; } + private void reportShortcutUsedInternal(String packageName, String shortcutId, int userId) { + final long token = injectClearCallingIdentity(); + try { + mUsageStatsManagerInternal.reportShortcutUsage(packageName, shortcutId, userId); + } finally { + injectRestoreCallingIdentity(token); + } + } + @Override public boolean isRequestPinItemSupported(int callingUserId, int requestType) { final long token = injectClearCallingIdentity(); diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java index c16e49899dc2..ec5228fec3f3 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java @@ -108,6 +108,7 @@ import com.android.server.pm.ShortcutService.FileOutputStreamWithPath; import com.android.server.pm.ShortcutUser.PackageWithUser; import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -416,8 +417,11 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { mManager.pushDynamicShortcut(s1); assertShortcutIds(assertAllNotKeyFieldsOnly(mManager.getDynamicShortcuts()), "s1"); assertEquals(0, getCallerShortcut("s1").getRank()); + verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s1"), eq(USER_0)); // Test push when other shortcuts exist + Mockito.reset(mMockUsageStatsManagerInternal); assertTrue(mManager.setDynamicShortcuts(list(s1, s2))); assertShortcutIds(assertAllNotKeyFieldsOnly(mManager.getDynamicShortcuts()), "s1", "s2"); mManager.pushDynamicShortcut(s3); @@ -426,25 +430,38 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { assertEquals(0, getCallerShortcut("s3").getRank()); assertEquals(1, getCallerShortcut("s1").getRank()); assertEquals(2, getCallerShortcut("s2").getRank()); + verify(mMockUsageStatsManagerInternal, times(0)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s1"), eq(USER_0)); + verify(mMockUsageStatsManagerInternal, times(0)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s2"), eq(USER_0)); + verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s3"), eq(USER_0)); mInjectedCurrentTimeMillis += INTERVAL; // reset // Push with set rank + Mockito.reset(mMockUsageStatsManagerInternal); s4.setRank(2); mManager.pushDynamicShortcut(s4); assertEquals(2, getCallerShortcut("s4").getRank()); assertEquals(3, getCallerShortcut("s2").getRank()); + verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s4"), eq(USER_0)); // Push existing shortcut with set rank + Mockito.reset(mMockUsageStatsManagerInternal); final ShortcutInfo s4_2 = makeShortcut("s4"); s4_2.setRank(4); mManager.pushDynamicShortcut(s4_2); assertEquals(2, getCallerShortcut("s2").getRank()); assertEquals(3, getCallerShortcut("s4").getRank()); + verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s4"), eq(USER_0)); mInjectedCurrentTimeMillis += INTERVAL; // reset // Test push as last + Mockito.reset(mMockUsageStatsManagerInternal); mManager.pushDynamicShortcut(s5); assertShortcutIds(assertAllNotKeyFieldsOnly(mManager.getDynamicShortcuts()), "s1", "s2", "s3", "s4", "s5"); @@ -453,25 +470,34 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { assertEquals(2, getCallerShortcut("s1").getRank()); assertEquals(3, getCallerShortcut("s2").getRank()); assertEquals(4, getCallerShortcut("s4").getRank()); + verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s5"), eq(USER_0)); // Push when max has already reached + Mockito.reset(mMockUsageStatsManagerInternal); mManager.pushDynamicShortcut(s6); assertShortcutIds(assertAllNotKeyFieldsOnly(mManager.getDynamicShortcuts()), "s1", "s2", "s3", "s5", "s6"); assertEquals(0, getCallerShortcut("s6").getRank()); assertEquals(1, getCallerShortcut("s5").getRank()); assertEquals(4, getCallerShortcut("s2").getRank()); + verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s6"), eq(USER_0)); mInjectedCurrentTimeMillis += INTERVAL; // reset // Push with different activity + Mockito.reset(mMockUsageStatsManagerInternal); s7.setActivity(makeComponent(ShortcutActivity2.class)); mManager.pushDynamicShortcut(s7); assertEquals(makeComponent(ShortcutActivity2.class), getCallerShortcut("s7").getActivity()); assertEquals(0, getCallerShortcut("s7").getRank()); + verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s7"), eq(USER_0)); // Push to update shortcut with different activity + Mockito.reset(mMockUsageStatsManagerInternal); final ShortcutInfo s1_2 = makeShortcut("s1"); s1_2.setActivity(makeComponent(ShortcutActivity2.class)); s1_2.setRank(1); @@ -482,10 +508,13 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { assertEquals(1, getCallerShortcut("s5").getRank()); assertEquals(2, getCallerShortcut("s3").getRank()); assertEquals(3, getCallerShortcut("s2").getRank()); + verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s1"), eq(USER_0)); mInjectedCurrentTimeMillis += INTERVAL; // reset // Test push when dropped shortcut is cached + Mockito.reset(mMockUsageStatsManagerInternal); s8.setLongLived(); s8.setRank(100); mManager.pushDynamicShortcut(s8); @@ -494,14 +523,19 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { mInjectCheckAccessShortcutsPermission = true; mLauncherApps.cacheShortcuts(CALLING_PACKAGE_1, list("s8"), HANDLE_USER_0, CACHE_OWNER_0); + verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s8"), eq(USER_0)); }); + Mockito.reset(mMockUsageStatsManagerInternal); mManager.pushDynamicShortcut(s9); assertShortcutIds(assertAllNotKeyFieldsOnly(mManager.getDynamicShortcuts()), "s1", "s2", "s3", "s5", "s6", "s7", "s9"); // Verify s13 stayed as cached assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_CACHED), "s8"); + verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( + eq(CALLING_PACKAGE_1), eq("s9"), eq(USER_0)); } public void testUnlimitedCalls() { diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java index ca7704950b51..7241fa00ecf7 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java @@ -2138,7 +2138,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { mManager.reportShortcutUsed("s2"); verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( eq(CALLING_PACKAGE_1), eq("s2"), eq(USER_10)); - }); runWithCaller(CALLING_PACKAGE_2, USER_10, () -> { // Try with a different package. @@ -2158,7 +2157,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { mManager.reportShortcutUsed("s3"); verify(mMockUsageStatsManagerInternal, times(1)).reportShortcutUsage( eq(CALLING_PACKAGE_2), eq("s3"), eq(USER_10)); - }); } |