ShortcutManagerTest6.java revision 0b9d1db5c1aab9017daf05abd0ba0f4de2c7192d
1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16package com.android.server.pm; 17 18import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.list; 19 20import static org.mockito.Matchers.any; 21import static org.mockito.Matchers.eq; 22import static org.mockito.Mockito.doAnswer; 23 24import android.content.ComponentName; 25import android.content.Intent; 26import android.content.pm.ActivityInfo; 27import android.content.pm.ApplicationInfo; 28import android.content.pm.ResolveInfo; 29import android.test.suitebuilder.annotation.SmallTest; 30 31import java.util.List; 32 33/** 34 * Tests for {@link ShortcutService#hasShortcutHostPermissionInner}. 35 */ 36@SmallTest 37public class ShortcutManagerTest6 extends BaseShortcutManagerTest { 38 public void testHasShortcutHostPermissionInner_systemLauncherOnly() { 39 // Preferred isn't set, use the system launcher. 40 prepareGetHomeActivitiesAsUser( 41 /* preferred */ null, 42 list(getSystemLauncher(), getFallbackLauncher()), 43 USER_0); 44 assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 45 assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 46 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 47 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 48 49 // Should be cached. 50 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 51 mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 52 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 53 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 54 55 // Also make sure the last known is saved, but the cached is not. 56 57 initService(); 58 59 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 60 mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 61 assertEquals(null, 62 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 63 } 64 65 public void testHasShortcutHostPermissionInner_with3pLauncher() { 66 // Preferred isn't set, still use the system launcher. 67 prepareGetHomeActivitiesAsUser( 68 /* preferred */ null, 69 list(getSystemLauncher(), getFallbackLauncher(), 70 ri(CALLING_PACKAGE_1, "name", false, 0), 71 ri(CALLING_PACKAGE_2, "name", false, 0) 72 ), 73 USER_0); 74 assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 75 assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 76 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 77 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 78 79 // Should be cached. 80 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 81 mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 82 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 83 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 84 } 85 86 public void testHasShortcutHostPermissionInner_with3pLauncher_complicated() { 87 // Preferred is set. That's the default launcher. 88 prepareGetHomeActivitiesAsUser( 89 /* preferred */ cn(CALLING_PACKAGE_2, "name"), 90 list(getSystemLauncher(), getFallbackLauncher(), 91 ri(CALLING_PACKAGE_1, "name", false, 0), 92 ri(CALLING_PACKAGE_2, "name", false, 0) 93 ), 94 USER_0); 95 assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 96 assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 97 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 98 assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 99 100 // Should be cached. 101 assertEquals(cn(CALLING_PACKAGE_2, "name"), 102 mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 103 assertEquals(cn(CALLING_PACKAGE_2, "name"), 104 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 105 106 107 // Once set, even after the preferred launcher is cleared, SM still allows it to access 108 // shortcuts. 109 prepareGetHomeActivitiesAsUser( 110 /* preferred */ null, 111 list(getSystemLauncher(), getFallbackLauncher(), 112 ri(CALLING_PACKAGE_1, "name", false, 0), 113 ri(CALLING_PACKAGE_2, "name", false, 0) 114 ), 115 USER_0); 116 117 assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 118 assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 119 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 120 assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 121 122 // Should be cached. 123 assertEquals(cn(CALLING_PACKAGE_2, "name"), 124 mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 125 assertEquals(cn(CALLING_PACKAGE_2, "name"), 126 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 127 128 // However, if the component has been disabled, then we'll recalculate it. 129 mEnabledActivityChecker = (comp, user) -> false; 130 131 assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 132 assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 133 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 134 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 135 136 mEnabledActivityChecker = (comp, user) -> true; 137 138 // Now the preferred changed. 139 prepareGetHomeActivitiesAsUser( 140 /* preferred */ cn(CALLING_PACKAGE_1, "xyz"), 141 list(getSystemLauncher(), getFallbackLauncher(), 142 ri(CALLING_PACKAGE_1, "name", false, 0), 143 ri(CALLING_PACKAGE_2, "name", false, 0) 144 ), 145 USER_0); 146 147 assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 148 149 // Should be cached. 150 assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 151 mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 152 assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 153 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 154 155 156 // As long as there's the cached launcher set, even if getHomeActivitiesAsUser() 157 // returns different values, the cached one is still the default. 158 prepareGetHomeActivitiesAsUser( 159 /* preferred */ getSystemLauncher().activityInfo.getComponentName(), 160 list(getSystemLauncher(), getFallbackLauncher()), 161 USER_0); 162 163 assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 164 165 // Cached ones haven't changed. 166 assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 167 mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 168 assertEquals(cn(CALLING_PACKAGE_1, "xyz"), 169 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 170 171 // However, now the "real" default launcher is the system one. So if the system 172 // launcher asks for shortcuts, we'll allow it. 173 assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 174 175 // Since the cache is updated, CALLING_PACKAGE_1 no longer has the permission. 176 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 177 178 // Cached ones haven't changed. 179 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 180 mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 181 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 182 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 183 } 184 185 public void testHasShortcutHostPermissionInner_multiUser() { 186 prepareGetHomeActivitiesAsUser( 187 /* preferred */ null, 188 list(getSystemLauncher(), getFallbackLauncher()), 189 USER_0); 190 191 prepareGetHomeActivitiesAsUser( 192 /* preferred */ cn(CALLING_PACKAGE_2, "name"), 193 list(getSystemLauncher(), getFallbackLauncher(), 194 ri(CALLING_PACKAGE_1, "name", false, 0), 195 ri(CALLING_PACKAGE_2, "name", false, 0) 196 ), 197 USER_10); 198 199 assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 200 assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_0)); 201 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_0)); 202 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_0)); 203 204 // Check the cache. 205 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 206 mService.getUserShortcutsLocked(USER_0).getLastKnownLauncher()); 207 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 208 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 209 210 assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_10)); 211 assertFalse(mService.hasShortcutHostPermissionInner(PACKAGE_FALLBACK_LAUNCHER, USER_10)); 212 assertFalse(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_1, USER_10)); 213 assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_10)); 214 215 // Check the cache. 216 assertEquals(cn(CALLING_PACKAGE_2, "name"), 217 mService.getUserShortcutsLocked(USER_10).getLastKnownLauncher()); 218 assertEquals(cn(CALLING_PACKAGE_2, "name"), 219 mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 220 } 221 222 public void testHasShortcutHostPermissionInner_clearCache() { 223 prepareGetHomeActivitiesAsUser( 224 /* preferred */ null, 225 list(getSystemLauncher(), getFallbackLauncher()), 226 USER_0); 227 228 prepareGetHomeActivitiesAsUser( 229 /* preferred */ cn(CALLING_PACKAGE_2, "name"), 230 list(getSystemLauncher(), getFallbackLauncher(), 231 ri(CALLING_PACKAGE_1, "name", false, 0), 232 ri(CALLING_PACKAGE_2, "name", false, 0) 233 ), 234 USER_10); 235 236 assertTrue(mService.hasShortcutHostPermissionInner(PACKAGE_SYSTEM_LAUNCHER, USER_0)); 237 assertTrue(mService.hasShortcutHostPermissionInner(CALLING_PACKAGE_2, USER_10)); 238 239 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 240 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 241 242 assertEquals(cn(CALLING_PACKAGE_2, "name"), 243 mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 244 245 // Send ACTION_PREFERRED_ACTIVITY_CHANGED on user 10. 246 // But the user is not running, so will be ignored. 247 mService.mPackageMonitor.onReceive(mServiceContext, 248 new Intent(Intent.ACTION_PREFERRED_ACTIVITY_CHANGED).putExtra( 249 Intent.EXTRA_USER_HANDLE, USER_10)); 250 251 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 252 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 253 254 assertEquals(cn(CALLING_PACKAGE_2, "name"), 255 mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 256 257 // Send it again after starting the user. 258 mRunningUsers.put(USER_10, true); 259 mService.mPackageMonitor.onReceive(mServiceContext, 260 new Intent(Intent.ACTION_PREFERRED_ACTIVITY_CHANGED).putExtra( 261 Intent.EXTRA_USER_HANDLE, USER_10)); 262 263 assertEquals(cn(PACKAGE_SYSTEM_LAUNCHER, PACKAGE_SYSTEM_LAUNCHER_NAME), 264 mService.getUserShortcutsLocked(USER_0).getCachedLauncher()); 265 266 // Only user-10's cache is cleared. 267 assertEquals(null, 268 mService.getUserShortcutsLocked(USER_10).getCachedLauncher()); 269 270 } 271} 272