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/** 342d895c3efd625e09e9f2cc4d0c7131b34f52f154Makoto Onuki * Tests for {@link ShortcutService#hasShortcutHostPermissionInner}, which includes 352d895c3efd625e09e9f2cc4d0c7131b34f52f154Makoto Onuki * {@link ShortcutService#getDefaultLauncher}. 361030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki */ 371030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki@SmallTest 381030520822c42cc7357b463d301c7e97e928ba22Makoto Onukipublic class ShortcutManagerTest6 extends BaseShortcutManagerTest { 391030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki public void testHasShortcutHostPermissionInner_systemLauncherOnly() { 401030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Preferred isn't set, use the system launcher. 411030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 421030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ null, 431030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher()), 441030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 451030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 461030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 471030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 481030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 491030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 501030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Should be cached. 511030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 521030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 531030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 541030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 551030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 561030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Also make sure the last known is saved, but the cached is not. 571030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 581030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki initService(); 591030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 601030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 611030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 621030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(null, 631030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 641030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki } 651030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 661030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki public void testHasShortcutHostPermissionInner_with3pLauncher() { 671030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Preferred isn't set, still use the system launcher. 681030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 691030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ null, 701030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 711030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 721030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 731030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 741030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 751030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 761030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 771030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 781030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 791030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 801030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Should be cached. 811030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 821030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 831030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 841030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 851030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki } 861030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 871030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki public void testHasShortcutHostPermissionInner_with3pLauncher_complicated() { 881030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Preferred is set. That's the default launcher. 891030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 901030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ cn(CALLING_PACKAGE_2, "name"), 911030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 921030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 931030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 941030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 951030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 961030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 971030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 981030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 991030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 1001030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1011030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Should be cached. 1021030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 1031030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 1041030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 1051030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 1061030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1071030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1081030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Once set, even after the preferred launcher is cleared, SM still allows it to access 1091030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // shortcuts. 1101030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 1111030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ null, 1121030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 1131030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 1141030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 1151030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 1161030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 1171030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1181030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 1191030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 1201030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 1211030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 1221030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1231030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Should be cached. 1241030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 1251030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 1261030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 1271030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 1281030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1291030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // However, if the component has been disabled, then we'll recalculate it. 1301030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mEnabledActivityChecker = (comp, user) -> false; 1311030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1321030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 1331030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 1341030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 1351030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 1361030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1371030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mEnabledActivityChecker = (comp, user) -> true; 1381030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1391030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Now the preferred changed. 1401030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 1411030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ cn(CALLING_PACKAGE_1, "xyz"), 1421030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 1431030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 1441030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 1451030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 1461030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 1471030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1481030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 1491030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1501030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Should be cached. 1511030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 1521030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 1531030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 1541030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 1551030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1561030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1571030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // As long as there's the cached launcher set, even if getHomeActivitiesAsUser() 1581030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // returns different values, the cached one is still the default. 1591030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 1601030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ getSystemLauncher().activityInfo.getComponentName(), 1611030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher()), 1621030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 1631030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1641030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 1651030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1661030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Cached ones haven't changed. 1671030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 1681030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 1691030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 1701030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 1711030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1721030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // However, now the "real" default launcher is the system one. So if the system 1731030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // launcher asks for shortcuts, we'll allow it. 1741030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 1751030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1761030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Since the cache is updated, CALLING_PACKAGE_1 no longer has the permission. 1771030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 1781030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1791030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Cached ones haven't changed. 1801030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 1811030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 1821030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 1831030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 1841030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki } 1851030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1861030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki public void testHasShortcutHostPermissionInner_multiUser() { 1879c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki mRunningUsers.put(USER_10, true); 1889c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki 1891030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 1901030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ null, 1911030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher()), 1921030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 1931030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 1941030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 1951030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ cn(CALLING_PACKAGE_2, "name"), 1961030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 1971030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 1981030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 1991030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 2001030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_10); 2011030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2021030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 2031030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 2041030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 2051030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 2061030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2071030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Check the cache. 2081030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 2091030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 2101030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 2111030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 2121030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2131030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_10)); 2141030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_10)); 2151030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_10)); 2161030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_10)); 2171030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2181030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Check the cache. 2191030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 2201030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_10).getLastKnownLauncher()); 2211030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 2221030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 2231030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki } 2241030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2251030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki public void testHasShortcutHostPermissionInner_clearCache() { 2269c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki mRunningUsers.put(USER_10, true); 2279c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki 2281030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 2291030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ null, 2301030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher()), 2311030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_0); 2321030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2331030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki prepareGetHomeActivitiesAsUser( 2341030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki /* preferred */ cn(CALLING_PACKAGE_2, "name"), 2351030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki list(getSystemLauncher(), getFallbackLauncher(), 2361030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_1, "name", false, 0), 2371030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ri(CALLING_PACKAGE_2, "name", false, 0) 2381030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki ), 2391030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki USER_10); 2401030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2411030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 2421030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_10)); 2431030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2441030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 2451030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 2461030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2471030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 2481030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 2491030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2509c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki // Test it on a non-running user. 2511030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Send ACTION_PREFERRED_ACTIVITY_CHANGED on user 10. 2521030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // But the user is not running, so will be ignored. 2539c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki mRunningUsers.put(USER_10, false); 2549c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki 2551030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.mPackageMonitor.onReceive(mServiceContext, 2561030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki new Intent(Intent.ACTION_PREFERRED_ACTIVITY_CHANGED).putExtra( 2571030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki Intent.EXTRA_USER_HANDLE, USER_10)); 2581030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2599c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki // Need to run the user again to access the internal status. 2609c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki mRunningUsers.put(USER_10, true); 2619c850012cacf0af4a392294566a8c7c897dc8771Makoto Onuki 2621030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 2631030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 2641030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2651030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(CALLING_PACKAGE_2, "name"), 2661030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 2671030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2681030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Send it again after starting the user. 2691030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mRunningUsers.put(USER_10, true); 2701030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.mPackageMonitor.onReceive(mServiceContext, 2711030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki new Intent(Intent.ACTION_PREFERRED_ACTIVITY_CHANGED).putExtra( 2721030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki Intent.EXTRA_USER_HANDLE, USER_10)); 2731030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2741030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 2751030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 2761030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2771030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki // Only user-10's cache is cleared. 2781030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki assertEquals(null, 2791030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 2801030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki 2811030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki } 2821030520822c42cc7357b463d301c7e97e928ba22Makoto Onuki} 283