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