ShortcutManagerTest6.java revision 9c850012cacf0af4a392294566a8c7c897dc8771
11030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki/* 21030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * Copyright (C) 2016 The Android Open Source Project 31030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * 41030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 51030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * you may not use this file except in compliance with the License. 61030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * You may obtain a copy of the License at 71030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * 81030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 91030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * 101030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * Unless required by applicable law or agreed to in writing, software 111030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 121030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * See the License for the specific language governing permissions and 141030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * limitations under the License. 151030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki */ 161030520822c42cc7357b463d301c7e97e928ba22Makoto Onukipackage com.android.server.pm; 171030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 181030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.list; 191030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 201030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport static org.mockito.Matchers.any; 211030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport static org.mockito.Matchers.eq; 221030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport static org.mockito.Mockito.doAnswer; 231030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 241030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport android.content.ComponentName; 251030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport android.content.Intent; 261030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport android.content.pm.ActivityInfo; 271030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport android.content.pm.ApplicationInfo; 281030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport android.content.pm.ResolveInfo; 291030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport android.test.suitebuilder.annotation.SmallTest; 301030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 311030520822c42cc7357b463d301c7e97e928ba22Makoto Onukiimport java.util.List; 321030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 331030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki/** 341030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki * Tests for {@link ShortcutService#hasShortcutHostPermissionInner}. 351030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki */ 361030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki@SmallTest 371030520822c42cc7357b463d301c7e97e928ba22Makoto Onukipublic class ShortcutManagerTest6 extends BaseShortcutManagerTest { 381030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki public void testHasShortcutHostPermissionInner_systemLauncherOnly() { 391030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Preferred isn't set, use the system launcher. 401030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 411030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ null, 421030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher()), 431030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 441030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 451030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 461030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 471030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 481030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 491030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Should be cached. 501030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 511030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 521030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 531030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 541030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 551030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Also make sure the last known is saved, but the cached is not. 561030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 571030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki initService(); 581030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 591030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 601030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 611030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(null, 621030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 631030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki } 641030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 651030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki public void testHasShortcutHostPermissionInner_with3pLauncher() { 661030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Preferred isn't set, still use the system launcher. 671030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 681030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ null, 691030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 701030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 711030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 721030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 731030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 741030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 751030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 761030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 771030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 781030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 791030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Should be cached. 801030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 811030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 821030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 831030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 841030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki } 851030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 861030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki public void testHasShortcutHostPermissionInner_with3pLauncher_complicated() { 871030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Preferred is set. That's the default launcher. 881030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 891030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ cn(CALLING_PACKAGE_2, "name"), 901030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 911030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 921030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 931030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 941030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 951030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 961030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 971030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 981030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 991030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1001030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Should be cached. 1011030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 1021030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 1031030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 1041030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 1051030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1061030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1071030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Once set, even after the preferred launcher is cleared, SM still allows it to access 1081030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // shortcuts. 1091030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 1101030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ null, 1111030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 1121030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 1131030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 1141030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 1151030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 1161030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1171030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 1181030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 1191030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 1201030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 1211030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1221030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Should be cached. 1231030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 1241030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 1251030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 1261030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 1271030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1281030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // However, if the component has been disabled, then we'll recalculate it. 1291030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mEnabledActivityChecker = (comp, user) -> false; 1301030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1311030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 1321030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 1331030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 1341030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 1351030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1361030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mEnabledActivityChecker = (comp, user) -> true; 1371030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1381030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Now the preferred changed. 1391030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 1401030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ cn(CALLING_PACKAGE_1, "xyz"), 1411030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 1421030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 1431030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 1441030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 1451030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 1461030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1471030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 1481030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1491030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Should be cached. 1501030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 1511030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 1521030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 1531030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 1541030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1551030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1561030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // As long as there's the cached launcher set, even if getHomeActivitiesAsUser() 1571030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // returns different values, the cached one is still the default. 1581030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 1591030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ getSystemLauncher().activityInfo.getComponentName(), 1601030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher()), 1611030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 1621030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1631030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 1641030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1651030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Cached ones haven't changed. 1661030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 1671030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 1681030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 1691030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 1701030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1711030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // However, now the "real" default launcher is the system one. So if the system 1721030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // launcher asks for shortcuts, we'll allow it. 1731030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 1741030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1751030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Since the cache is updated, CALLING_PACKAGE_1 no longer has the permission. 1761030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 1771030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1781030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Cached ones haven't changed. 1791030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 1801030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 1811030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 1821030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 1831030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki } 1841030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1851030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki public void testHasShortcutHostPermissionInner_multiUser() { 1869c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki mRunningUsers.put(USER_10, true); 1879c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki 1881030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 1891030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ null, 1901030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher()), 1911030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 1921030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1931030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 1941030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ cn(CALLING_PACKAGE_2, "name"), 1951030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 1961030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 1971030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 1981030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 1991030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_10); 2001030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2011030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 2021030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 2031030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 2041030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 2051030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2061030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Check the cache. 2071030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 2081030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 2091030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 2101030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 2111030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2121030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_10)); 2131030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_10)); 2141030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_10)); 2151030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_10)); 2161030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2171030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Check the cache. 2181030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 2191030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_10).getLastKnownLauncher()); 2201030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 2211030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 2221030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki } 2231030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2241030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki public void testHasShortcutHostPermissionInner_clearCache() { 2259c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki mRunningUsers.put(USER_10, true); 2269c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki 2271030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 2281030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ null, 2291030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher()), 2301030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 2311030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2321030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 2331030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ cn(CALLING_PACKAGE_2, "name"), 2341030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 2351030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 2361030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 2371030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 2381030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_10); 2391030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2401030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 2411030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_10)); 2421030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2431030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 2441030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 2451030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2461030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 2471030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 2481030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2499c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki // Test it on a non-running user. 2501030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Send ACTION_PREFERRED_ACTIVITY_CHANGED on user 10. 2511030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // But the user is not running, so will be ignored. 2529c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki mRunningUsers.put(USER_10, false); 2539c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki 2541030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.mPackageMonitor.onReceive(mServiceContext, 2551030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki new Intent(Intent.ACTION_PREFERRED_ACTIVITY_CHANGED).putExtra( 2561030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki Intent.EXTRA_USER_HANDLE, USER_10)); 2571030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2589c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki // Need to run the user again to access the internal status. 2599c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki mRunningUsers.put(USER_10, true); 2609c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki 2611030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 2621030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 2631030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2641030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 2651030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 2661030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2671030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Send it again after starting the user. 2681030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mRunningUsers.put(USER_10, true); 2691030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.mPackageMonitor.onReceive(mServiceContext, 2701030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki new Intent(Intent.ACTION_PREFERRED_ACTIVITY_CHANGED).putExtra( 2711030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki Intent.EXTRA_USER_HANDLE, USER_10)); 2721030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2731030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 2741030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 2751030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2761030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Only user-10's cache is cleared. 2771030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(null, 2781030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 2791030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2801030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki } 2811030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki} 282