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