1 /*
2  * Copyright (C) 2022 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  */
16 
17 package com.android.server.pm;
18 
19 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
20 import static android.content.pm.PackageManager.RESTRICTION_NONE;
21 
22 import android.annotation.NonNull;
23 import android.annotation.Nullable;
24 import android.annotation.UserIdInt;
25 import android.content.ComponentName;
26 import android.content.Context;
27 import android.content.Intent;
28 import android.content.pm.ActivityInfo;
29 import android.content.pm.ApplicationInfo;
30 import android.content.pm.AuxiliaryResolveInfo;
31 import android.content.pm.Checksum;
32 import android.content.pm.IOnChecksumsReadyListener;
33 import android.content.pm.PackageInfo;
34 import android.content.pm.PackageManager;
35 import android.content.pm.PackageManagerInternal;
36 import android.content.pm.ProcessInfo;
37 import android.content.pm.ProviderInfo;
38 import android.content.pm.ResolveInfo;
39 import android.content.pm.SuspendDialogInfo;
40 import android.os.Binder;
41 import android.os.Build;
42 import android.os.Bundle;
43 import android.os.Handler;
44 import android.os.Process;
45 import android.os.storage.StorageManager;
46 import android.util.ArrayMap;
47 import android.util.ArraySet;
48 import android.util.SparseArray;
49 
50 import com.android.server.pm.dex.DexManager;
51 import com.android.server.pm.permission.PermissionManagerServiceInternal;
52 import com.android.server.pm.pkg.AndroidPackage;
53 import com.android.server.pm.pkg.PackageStateInternal;
54 import com.android.server.pm.pkg.PackageStateUtils;
55 import com.android.server.pm.pkg.SharedUserApi;
56 import com.android.server.pm.pkg.component.ParsedMainComponent;
57 import com.android.server.pm.pkg.mutate.PackageStateMutator;
58 
59 import java.io.IOException;
60 import java.util.List;
61 import java.util.concurrent.Executor;
62 import java.util.function.Consumer;
63 
64 /**
65  * Internal manager variant of {@link IPackageManagerBase}. See that class for info.
66  * {@link PackageManagerInternal} should eventually passing in a snapshot instance, deprecating
67  * this class, but that requires much larger refactor.
68  */
69 abstract class PackageManagerInternalBase extends PackageManagerInternal {
70 
71     @NonNull
72     private final PackageManagerService mService;
73 
PackageManagerInternalBase(@onNull PackageManagerService service)74     public PackageManagerInternalBase(@NonNull PackageManagerService service) {
75         mService = service;
76     }
77 
getContext()78     @NonNull protected abstract Context getContext();
getPermissionManager()79     @NonNull protected abstract PermissionManagerServiceInternal getPermissionManager();
getAppDataHelper()80     @NonNull protected abstract AppDataHelper getAppDataHelper();
getPackageObserverHelper()81     @NonNull protected abstract PackageObserverHelper getPackageObserverHelper();
getResolveIntentHelper()82     @NonNull protected abstract ResolveIntentHelper getResolveIntentHelper();
getSuspendPackageHelper()83     @NonNull protected abstract SuspendPackageHelper getSuspendPackageHelper();
getDistractingPackageHelper()84     @NonNull protected abstract DistractingPackageHelper getDistractingPackageHelper();
getProtectedPackages()85     @NonNull protected abstract ProtectedPackages getProtectedPackages();
getUserNeedsBadging()86     @NonNull protected abstract UserNeedsBadgingCache getUserNeedsBadging();
getInstantAppRegistry()87     @NonNull protected abstract InstantAppRegistry getInstantAppRegistry();
getApexManager()88     @NonNull protected abstract ApexManager getApexManager();
getDexManager()89     @NonNull protected abstract DexManager getDexManager();
90 
91     @Override
snapshot()92     public final Computer snapshot() {
93         return mService.snapshotComputer();
94     }
95 
96     @Override
97     @Deprecated
getInstalledApplications( @ackageManager.ApplicationInfoFlagsBits long flags, int userId, int callingUid)98     public final List<ApplicationInfo> getInstalledApplications(
99             @PackageManager.ApplicationInfoFlagsBits long flags, int userId, int callingUid) {
100         return snapshot().getInstalledApplications(flags, userId, callingUid);
101     }
102 
103     @Override
104     @Deprecated
isInstantApp(String packageName, int userId)105     public final boolean isInstantApp(String packageName, int userId) {
106         return snapshot().isInstantApp(packageName, userId);
107     }
108 
109     @Override
110     @Deprecated
getInstantAppPackageName(int uid)111     public final String getInstantAppPackageName(int uid) {
112         return snapshot().getInstantAppPackageName(uid);
113     }
114 
115     @Override
116     @Deprecated
filterAppAccess(AndroidPackage pkg, int callingUid, int userId)117     public final boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
118         return snapshot().filterAppAccess(pkg, callingUid, userId);
119     }
120 
121     @Override
122     @Deprecated
filterAppAccess(String packageName, int callingUid, int userId, boolean filterUninstalled)123     public final boolean filterAppAccess(String packageName, int callingUid, int userId,
124             boolean filterUninstalled) {
125         return snapshot().filterAppAccess(packageName, callingUid, userId, filterUninstalled);
126     }
127 
128     @Override
129     @Deprecated
filterAppAccess(int uid, int callingUid)130     public final boolean filterAppAccess(int uid, int callingUid) {
131         return snapshot().filterAppAccess(uid, callingUid);
132     }
133 
134     @Nullable
135     @Override
136     @Deprecated
getVisibilityAllowList(@onNull String packageName, int userId)137     public final int[] getVisibilityAllowList(@NonNull String packageName, int userId) {
138         return snapshot().getVisibilityAllowList(packageName, userId);
139     }
140 
141     @Override
142     @Deprecated
canQueryPackage(int callingUid, @Nullable String packageName)143     public final boolean canQueryPackage(int callingUid, @Nullable String packageName) {
144         return snapshot().canQueryPackage(callingUid, packageName);
145     }
146 
147     @Override
148     @Deprecated
getPackage(String packageName)149     public final AndroidPackage getPackage(String packageName) {
150         return snapshot().getPackage(packageName);
151     }
152 
153     @Nullable
154     @Override
155     @Deprecated
getAndroidPackage(@onNull String packageName)156     public final AndroidPackage getAndroidPackage(@NonNull String packageName) {
157         return snapshot().getPackage(packageName);
158     }
159 
160     @Override
161     @Deprecated
getPackage(int uid)162     public final AndroidPackage getPackage(int uid) {
163         return snapshot().getPackage(uid);
164     }
165 
166     @Override
167     @Deprecated
getPackagesForAppId(int appId)168     public final List<AndroidPackage> getPackagesForAppId(int appId) {
169         return snapshot().getPackagesForAppId(appId);
170     }
171 
172     @Nullable
173     @Override
174     @Deprecated
getPackageStateInternal(String packageName)175     public final PackageStateInternal getPackageStateInternal(String packageName) {
176         return snapshot().getPackageStateInternal(packageName);
177     }
178 
179     @NonNull
180     @Override
181     @Deprecated
getPackageStates()182     public final ArrayMap<String, ? extends PackageStateInternal> getPackageStates() {
183         return snapshot().getPackageStates();
184     }
185 
186     @Override
187     @Deprecated
removePackageListObserver(PackageListObserver observer)188     public final void removePackageListObserver(PackageListObserver observer) {
189         getPackageObserverHelper().removeObserver(observer);
190     }
191 
192     @Override
193     @Deprecated
getDisabledSystemPackage(@onNull String packageName)194     public final PackageStateInternal getDisabledSystemPackage(@NonNull String packageName) {
195         return snapshot().getDisabledSystemPackage(packageName);
196     }
197 
198     @Override
199     @Deprecated
getKnownPackageNames(int knownPackage, int userId)200     public final @NonNull String[] getKnownPackageNames(int knownPackage, int userId) {
201         return mService.getKnownPackageNamesInternal(snapshot(), knownPackage, userId);
202     }
203 
204     @Override
205     @Deprecated
setKeepUninstalledPackages(final List<String> packageList)206     public final void setKeepUninstalledPackages(final List<String> packageList) {
207         mService.setKeepUninstalledPackagesInternal(snapshot(), packageList);
208     }
209 
210     @Override
211     @Deprecated
isPermissionsReviewRequired(String packageName, int userId)212     public final boolean isPermissionsReviewRequired(String packageName, int userId) {
213         return getPermissionManager().isPermissionsReviewRequired(packageName, userId);
214     }
215 
216     @Override
217     @Deprecated
getPackageInfo(String packageName, @PackageManager.PackageInfoFlagsBits long flags, int filterCallingUid, int userId)218     public final PackageInfo getPackageInfo(String packageName,
219             @PackageManager.PackageInfoFlagsBits long flags, int filterCallingUid, int userId) {
220         return snapshot().getPackageInfoInternal(packageName,
221                 PackageManager.VERSION_CODE_HIGHEST, flags, filterCallingUid, userId);
222     }
223 
224     @Override
225     @Deprecated
getSuspendedPackageLauncherExtras(String packageName, int userId)226     public final Bundle getSuspendedPackageLauncherExtras(String packageName, int userId) {
227         return getSuspendPackageHelper().getSuspendedPackageLauncherExtras(snapshot(), packageName,
228                 userId, Binder.getCallingUid());
229     }
230 
231     @Override
232     @Deprecated
isPackageSuspended(String packageName, int userId)233     public final boolean isPackageSuspended(String packageName, int userId) {
234         return getSuspendPackageHelper().isPackageSuspended(snapshot(), packageName, userId,
235                 Binder.getCallingUid());
236     }
237 
238     @Override
239     @Deprecated
removeNonSystemPackageSuspensions(String packageName, int userId)240     public final void removeNonSystemPackageSuspensions(String packageName, int userId) {
241         getSuspendPackageHelper().removeSuspensionsBySuspendingPackage(snapshot(),
242                 new String[]{packageName},
243                 (suspendingPackage) -> !PackageManagerService.PLATFORM_PACKAGE_NAME.equals(
244                         suspendingPackage),
245                 userId);
246     }
247 
248     @Override
249     @Deprecated
removeDistractingPackageRestrictions(String packageName, int userId)250     public final void removeDistractingPackageRestrictions(String packageName, int userId) {
251         getDistractingPackageHelper().removeDistractingPackageRestrictions(snapshot(),
252                 new String[]{packageName}, userId);
253     }
254 
255     @Override
256     @Deprecated
removeAllDistractingPackageRestrictions(int userId)257     public final void removeAllDistractingPackageRestrictions(int userId) {
258         mService.removeAllDistractingPackageRestrictions(snapshot(), userId);
259     }
260 
261     @Override
262     @Deprecated
getSuspendingPackage(String suspendedPackage, int userId)263     public final String getSuspendingPackage(String suspendedPackage, int userId) {
264         return getSuspendPackageHelper().getSuspendingPackage(snapshot(), suspendedPackage, userId,
265                 Binder.getCallingUid());
266     }
267 
268     @Override
269     @Deprecated
getSuspendedDialogInfo(String suspendedPackage, String suspendingPackage, int userId)270     public final SuspendDialogInfo getSuspendedDialogInfo(String suspendedPackage,
271             String suspendingPackage, int userId) {
272         return getSuspendPackageHelper().getSuspendedDialogInfo(snapshot(), suspendedPackage,
273                 suspendingPackage, userId, Binder.getCallingUid());
274     }
275 
276     @Override
277     @Deprecated
getDistractingPackageRestrictions(String packageName, int userId)278     public final int getDistractingPackageRestrictions(String packageName, int userId) {
279         final PackageStateInternal packageState = getPackageStateInternal(packageName);
280         return (packageState == null) ? RESTRICTION_NONE
281                 : packageState.getUserStateOrDefault(userId).getDistractionFlags();
282     }
283 
284     @Override
285     @Deprecated
getPackageUid(String packageName, @PackageManager.PackageInfoFlagsBits long flags, int userId)286     public final int getPackageUid(String packageName,
287             @PackageManager.PackageInfoFlagsBits long flags, int userId) {
288         return snapshot().getPackageUidInternal(packageName, flags, userId, Process.SYSTEM_UID);
289     }
290 
291     @Override
292     @Deprecated
getApplicationInfo(String packageName, @PackageManager.ApplicationInfoFlagsBits long flags, int filterCallingUid, int userId)293     public final ApplicationInfo getApplicationInfo(String packageName,
294             @PackageManager.ApplicationInfoFlagsBits long flags, int filterCallingUid, int userId) {
295         return snapshot().getApplicationInfoInternal(packageName, flags, filterCallingUid, userId);
296     }
297 
298     @Override
299     @Deprecated
getActivityInfo(ComponentName component, @PackageManager.ComponentInfoFlagsBits long flags, int filterCallingUid, int userId)300     public final ActivityInfo getActivityInfo(ComponentName component,
301             @PackageManager.ComponentInfoFlagsBits long flags, int filterCallingUid, int userId) {
302         return snapshot().getActivityInfoInternal(component, flags, filterCallingUid, userId);
303     }
304 
305     @Override
306     @Deprecated
queryIntentActivities( Intent intent, String resolvedType, @PackageManager.ResolveInfoFlagsBits long flags, int filterCallingUid, int userId)307     public final List<ResolveInfo> queryIntentActivities(
308             Intent intent, String resolvedType, @PackageManager.ResolveInfoFlagsBits long flags,
309             int filterCallingUid, int userId) {
310         return snapshot().queryIntentActivitiesInternal(intent, resolvedType, flags,
311                 filterCallingUid, userId);
312     }
313 
314     @Override
315     @Deprecated
queryIntentReceivers(Intent intent, String resolvedType, @PackageManager.ResolveInfoFlagsBits long flags, int filterCallingUid, int userId, boolean forSend)316     public final List<ResolveInfo> queryIntentReceivers(Intent intent,
317             String resolvedType, @PackageManager.ResolveInfoFlagsBits long flags,
318             int filterCallingUid, int userId, boolean forSend) {
319         return getResolveIntentHelper().queryIntentReceiversInternal(snapshot(), intent,
320                 resolvedType, flags, userId, filterCallingUid, forSend);
321     }
322 
323     @Override
324     @Deprecated
queryIntentServices( Intent intent, @PackageManager.ResolveInfoFlagsBits long flags, int callingUid, int userId)325     public final List<ResolveInfo> queryIntentServices(
326             Intent intent, @PackageManager.ResolveInfoFlagsBits long flags, int callingUid,
327             int userId) {
328         final String resolvedType = intent.resolveTypeIfNeeded(getContext().getContentResolver());
329         return snapshot().queryIntentServicesInternal(intent, resolvedType, flags, userId,
330                 callingUid, false);
331     }
332 
333     @Override
334     @Deprecated
getHomeActivitiesAsUser(List<ResolveInfo> allHomeCandidates, int userId)335     public final ComponentName getHomeActivitiesAsUser(List<ResolveInfo> allHomeCandidates,
336             int userId) {
337         return snapshot().getHomeActivitiesAsUser(allHomeCandidates, userId);
338     }
339 
340     @Override
341     @Deprecated
getDefaultHomeActivity(int userId)342     public final ComponentName getDefaultHomeActivity(int userId) {
343         return snapshot().getDefaultHomeActivity(userId);
344     }
345 
346     @Override
347     @Deprecated
getSystemUiServiceComponent()348     public final ComponentName getSystemUiServiceComponent() {
349         return ComponentName.unflattenFromString(getContext().getResources().getString(
350                 com.android.internal.R.string.config_systemUIServiceComponent));
351     }
352 
353     @Override
354     @Deprecated
setOwnerProtectedPackages( @serIdInt int userId, @Nullable List<String> packageNames)355     public final void setOwnerProtectedPackages(
356             @UserIdInt int userId, @Nullable List<String> packageNames) {
357         getProtectedPackages().setOwnerProtectedPackages(userId, packageNames);
358     }
359 
360     @Override
361     @Deprecated
isPackageDataProtected(int userId, String packageName)362     public final boolean isPackageDataProtected(int userId, String packageName) {
363         return getProtectedPackages().isPackageDataProtected(userId, packageName);
364     }
365 
366     @Override
367     @Deprecated
isPackageStateProtected(String packageName, int userId)368     public final boolean isPackageStateProtected(String packageName, int userId) {
369         return getProtectedPackages().isPackageStateProtected(userId, packageName);
370     }
371 
372     @Override
373     @Deprecated
isPackageEphemeral(int userId, String packageName)374     public final boolean isPackageEphemeral(int userId, String packageName) {
375         final PackageStateInternal packageState = getPackageStateInternal(packageName);
376         return packageState != null
377                 && packageState.getUserStateOrDefault(userId).isInstantApp();
378     }
379 
380     @Override
381     @Deprecated
wasPackageEverLaunched(String packageName, int userId)382     public final boolean wasPackageEverLaunched(String packageName, int userId) {
383         final PackageStateInternal packageState = getPackageStateInternal(packageName);
384         if (packageState == null) {
385             throw new IllegalArgumentException("Unknown package: " + packageName);
386         }
387         return !packageState.getUserStateOrDefault(userId).isNotLaunched();
388     }
389 
390     @Override
391     @Deprecated
isEnabledAndMatches(ParsedMainComponent component, long flags, int userId)392     public final boolean isEnabledAndMatches(ParsedMainComponent component, long flags, int userId) {
393         return PackageStateUtils.isEnabledAndMatches(
394                 getPackageStateInternal(component.getPackageName()), component, flags, userId);
395     }
396 
397     @Override
398     @Deprecated
userNeedsBadging(int userId)399     public final boolean userNeedsBadging(int userId) {
400         return getUserNeedsBadging().get(userId);
401     }
402 
403     @Override
404     @Deprecated
getNameForUid(int uid)405     public final String getNameForUid(int uid) {
406         return snapshot().getNameForUid(uid);
407     }
408 
409     @Override
410     @Deprecated
requestInstantAppResolutionPhaseTwo(AuxiliaryResolveInfo responseObj, Intent origIntent, String resolvedType, String callingPackage, @Nullable String callingFeatureId, boolean isRequesterInstantApp, Bundle verificationBundle, int userId)411     public final void requestInstantAppResolutionPhaseTwo(AuxiliaryResolveInfo responseObj,
412             Intent origIntent, String resolvedType, String callingPackage,
413             @Nullable String callingFeatureId, boolean isRequesterInstantApp,
414             Bundle verificationBundle, int userId) {
415         mService.requestInstantAppResolutionPhaseTwo(responseObj, origIntent,
416                 resolvedType, callingPackage, callingFeatureId, isRequesterInstantApp,
417                 verificationBundle, userId);
418     }
419 
420     @Override
421     @Deprecated
grantImplicitAccess(int userId, Intent intent, int recipientAppId, int visibleUid, boolean direct)422     public final void grantImplicitAccess(int userId, Intent intent,
423             int recipientAppId, int visibleUid, boolean direct) {
424         grantImplicitAccess(userId, intent, recipientAppId, visibleUid, direct,
425                 false /* retainOnUpdate */);
426     }
427 
428     @Override
429     @Deprecated
grantImplicitAccess(int userId, Intent intent, int recipientAppId, int visibleUid, boolean direct, boolean retainOnUpdate)430     public final void grantImplicitAccess(int userId, Intent intent,
431             int recipientAppId, int visibleUid, boolean direct, boolean retainOnUpdate) {
432         mService.grantImplicitAccess(snapshot(), userId, intent,
433                 recipientAppId, visibleUid, direct, retainOnUpdate);
434     }
435 
436     @Override
437     @Deprecated
isInstantAppInstallerComponent(ComponentName component)438     public final boolean isInstantAppInstallerComponent(ComponentName component) {
439         final ActivityInfo instantAppInstallerActivity = mService.mInstantAppInstallerActivity;
440         return instantAppInstallerActivity != null
441                 && instantAppInstallerActivity.getComponentName().equals(component);
442     }
443 
444     @Override
445     @Deprecated
pruneInstantApps()446     public final void pruneInstantApps() {
447         getInstantAppRegistry().pruneInstantApps(snapshot());
448     }
449 
450     @Override
451     @Deprecated
getSetupWizardPackageName()452     public final String getSetupWizardPackageName() {
453         return mService.mSetupWizardPackage;
454     }
455 
456     @Override
457     @Deprecated
resolveIntent(Intent intent, String resolvedType, @PackageManager.ResolveInfoFlagsBits long flags, @PackageManagerInternal.PrivateResolveFlags long privateResolveFlags, int userId, boolean resolveForStart, int filterCallingUid)458     public final ResolveInfo resolveIntent(Intent intent, String resolvedType,
459             @PackageManager.ResolveInfoFlagsBits long flags,
460             @PackageManagerInternal.PrivateResolveFlags long privateResolveFlags, int userId,
461             boolean resolveForStart, int filterCallingUid) {
462         return getResolveIntentHelper().resolveIntentInternal(snapshot(),
463                 intent, resolvedType, flags, privateResolveFlags, userId, resolveForStart,
464                 filterCallingUid);
465     }
466 
467     /**
468      * @deprecated similar to {@link resolveIntent} but limits the matches to exported components.
469      */
470     @Override
471     @Deprecated
resolveIntentExported(Intent intent, String resolvedType, @PackageManager.ResolveInfoFlagsBits long flags, @PackageManagerInternal.PrivateResolveFlags long privateResolveFlags, int userId, boolean resolveForStart, int filterCallingUid, int callingPid)472     public final ResolveInfo resolveIntentExported(Intent intent, String resolvedType,
473             @PackageManager.ResolveInfoFlagsBits long flags,
474             @PackageManagerInternal.PrivateResolveFlags long privateResolveFlags, int userId,
475             boolean resolveForStart, int filterCallingUid, int callingPid) {
476         return getResolveIntentHelper().resolveIntentInternal(snapshot(),
477                 intent, resolvedType, flags, privateResolveFlags, userId, resolveForStart,
478                 filterCallingUid, true, callingPid);
479     }
480 
481     @Override
482     @Deprecated
resolveService(Intent intent, String resolvedType, @PackageManager.ResolveInfoFlagsBits long flags, int userId, int callingUid)483     public final ResolveInfo resolveService(Intent intent, String resolvedType,
484             @PackageManager.ResolveInfoFlagsBits long flags, int userId, int callingUid) {
485         return getResolveIntentHelper().resolveServiceInternal(snapshot(), intent,
486                 resolvedType, flags, userId, callingUid);
487     }
488 
489     @Override
490     @Deprecated
resolveContentProvider(String name, @PackageManager.ResolveInfoFlagsBits long flags, int userId, int callingUid)491     public final ProviderInfo resolveContentProvider(String name,
492             @PackageManager.ResolveInfoFlagsBits long flags, int userId, int callingUid) {
493         return snapshot().resolveContentProvider(name, flags, userId,callingUid);
494     }
495 
496     @Override
497     @Deprecated
getUidTargetSdkVersion(int uid)498     public final int getUidTargetSdkVersion(int uid) {
499         return snapshot().getUidTargetSdkVersion(uid);
500     }
501 
502     @Override
503     @Deprecated
getPackageTargetSdkVersion(String packageName)504     public final int getPackageTargetSdkVersion(String packageName) {
505         final PackageStateInternal packageState = getPackageStateInternal(packageName);
506         if (packageState != null && packageState.getPkg() != null) {
507             return packageState.getPkg().getTargetSdkVersion();
508         }
509         return Build.VERSION_CODES.CUR_DEVELOPMENT;
510     }
511 
512     @Override
513     @Deprecated
canAccessInstantApps(int callingUid, @UserIdInt int userId)514     public final boolean canAccessInstantApps(int callingUid, @UserIdInt int userId) {
515         return snapshot().canViewInstantApps(callingUid, userId);
516     }
517 
518     @Override
519     @Deprecated
canAccessComponent(int callingUid, @NonNull ComponentName component, @UserIdInt int userId)520     public final boolean canAccessComponent(int callingUid, @NonNull ComponentName component,
521             @UserIdInt int userId) {
522         return snapshot().canAccessComponent(callingUid, component, userId);
523     }
524 
525     @Override
526     @Deprecated
hasInstantApplicationMetadata(String packageName, int userId)527     public final boolean hasInstantApplicationMetadata(String packageName, int userId) {
528         return getInstantAppRegistry().hasInstantApplicationMetadata(packageName, userId);
529     }
530 
531     @Override
532     @Deprecated
getAppsWithSharedUserIds()533     public final SparseArray<String> getAppsWithSharedUserIds() {
534         return snapshot().getAppsWithSharedUserIds();
535     }
536 
537     @Override
538     @NonNull
539     @Deprecated
getSharedUserPackagesForPackage(String packageName, int userId)540     public final String[] getSharedUserPackagesForPackage(String packageName, int userId) {
541         return snapshot().getSharedUserPackagesForPackage(packageName, userId);
542     }
543 
544     @Override
545     @Deprecated
getProcessesForUid(int uid)546     public final ArrayMap<String, ProcessInfo> getProcessesForUid(int uid) {
547         return snapshot().getProcessesForUid(uid);
548     }
549 
550     @Override
551     @Deprecated
getPermissionGids(String permissionName, int userId)552     public final int[] getPermissionGids(String permissionName, int userId) {
553         return getPermissionManager().getPermissionGids(permissionName, userId);
554     }
555 
556     @Override
557     @Deprecated
freeStorage(String volumeUuid, long bytes, @StorageManager.AllocateFlags int flags)558     public final void freeStorage(String volumeUuid, long bytes,
559             @StorageManager.AllocateFlags int flags) throws IOException {
560         mService.freeStorage(volumeUuid, bytes, flags);
561     }
562 
563     @Override
564     @Deprecated
freeAllAppCacheAboveQuota(@onNull String volumeUuid)565     public final void freeAllAppCacheAboveQuota(@NonNull String volumeUuid) throws IOException {
566         mService.freeAllAppCacheAboveQuota(volumeUuid);
567     }
568 
569     @Override
570     @Deprecated
forEachPackageSetting(Consumer<PackageSetting> actionLocked)571     public final void forEachPackageSetting(Consumer<PackageSetting> actionLocked) {
572         mService.forEachPackageSetting(actionLocked);
573     }
574 
575     @Override
576     @Deprecated
forEachPackageState(Consumer<PackageStateInternal> action)577     public final void forEachPackageState(Consumer<PackageStateInternal> action) {
578         mService.forEachPackageState(snapshot(), action);
579     }
580 
581     @Override
582     @Deprecated
forEachPackage(Consumer<AndroidPackage> action)583     public final void forEachPackage(Consumer<AndroidPackage> action) {
584         mService.forEachPackage(snapshot(), action);
585     }
586 
587     @Override
588     @Deprecated
forEachInstalledPackage(@onNull Consumer<AndroidPackage> action, @UserIdInt int userId)589     public final void forEachInstalledPackage(@NonNull Consumer<AndroidPackage> action,
590             @UserIdInt int userId) {
591         mService.forEachInstalledPackage(snapshot(), action, userId);
592     }
593 
594     @Override
595     @Deprecated
getEnabledComponents(String packageName, int userId)596     public final ArraySet<String> getEnabledComponents(String packageName, int userId) {
597         final PackageStateInternal packageState = getPackageStateInternal(packageName);
598         if (packageState == null) {
599             return new ArraySet<>();
600         }
601         return packageState.getUserStateOrDefault(userId).getEnabledComponents();
602     }
603 
604     @Override
605     @Deprecated
getDisabledComponents(String packageName, int userId)606     public final ArraySet<String> getDisabledComponents(String packageName, int userId) {
607         final PackageStateInternal packageState = getPackageStateInternal(packageName);
608         if (packageState == null) {
609             return new ArraySet<>();
610         }
611         return packageState.getUserStateOrDefault(userId).getDisabledComponents();
612     }
613 
614     @Override
615     @Deprecated
getApplicationEnabledState( String packageName, int userId)616     public final @PackageManager.EnabledState int getApplicationEnabledState(
617             String packageName, int userId) {
618         final PackageStateInternal packageState = getPackageStateInternal(packageName);
619         if (packageState == null) {
620             return COMPONENT_ENABLED_STATE_DEFAULT;
621         }
622         return packageState.getUserStateOrDefault(userId).getEnabledState();
623     }
624 
625     @Override
626     @Deprecated
getComponentEnabledSetting( @onNull ComponentName componentName, int callingUid, int userId)627     public final @PackageManager.EnabledState int getComponentEnabledSetting(
628             @NonNull ComponentName componentName, int callingUid, int userId) {
629         return snapshot().getComponentEnabledSettingInternal(
630                 componentName, callingUid, userId);
631     }
632 
633     @Override
634     @Deprecated
setEnableRollbackCode(int token, int enableRollbackCode)635     public final void setEnableRollbackCode(int token, int enableRollbackCode) {
636         mService.setEnableRollbackCode(token, enableRollbackCode);
637     }
638 
639     @Override
640     @Deprecated
finishPackageInstall(int token, boolean didLaunch)641     public final void finishPackageInstall(int token, boolean didLaunch) {
642         mService.finishPackageInstall(token, didLaunch);
643     }
644 
645     @Override
646     @Deprecated
isApexPackage(String packageName)647     public final boolean isApexPackage(String packageName) {
648         return snapshot().isApexPackage(packageName);
649     }
650 
651     @Override
652     @Deprecated
getApksInApex(String apexPackageName)653     public final List<String> getApksInApex(String apexPackageName) {
654         return getApexManager().getApksInApex(apexPackageName);
655     }
656 
657     @Override
658     @Deprecated
isCallerInstallerOfRecord(@onNull AndroidPackage pkg, int callingUid)659     public final boolean isCallerInstallerOfRecord(@NonNull AndroidPackage pkg, int callingUid) {
660         return snapshot().isCallerInstallerOfRecord(pkg, callingUid);
661     }
662 
663     @Override
664     @Deprecated
getMimeGroup(String packageName, String mimeGroup)665     public final List<String> getMimeGroup(String packageName, String mimeGroup) {
666         return mService.getMimeGroupInternal(snapshot(), packageName, mimeGroup);
667     }
668 
669     @Override
670     @Deprecated
isSystemPackage(@onNull String packageName)671     public final boolean isSystemPackage(@NonNull String packageName) {
672         return packageName.equals(mService.ensureSystemPackageName(snapshot(), packageName));
673     }
674 
675     @Override
676     @Deprecated
unsuspendForSuspendingPackage(final String packageName, int affectedUser)677     public final void unsuspendForSuspendingPackage(final String packageName, int affectedUser) {
678         mService.unsuspendForSuspendingPackage(snapshot(), packageName, affectedUser);
679     }
680 
681     @Override
682     @Deprecated
isSuspendingAnyPackages(String suspendingPackage, int userId)683     public final boolean isSuspendingAnyPackages(String suspendingPackage, int userId) {
684         return snapshot().isSuspendingAnyPackages(suspendingPackage, userId);
685     }
686 
687     @Override
688     @Deprecated
requestChecksums(@onNull String packageName, boolean includeSplits, @Checksum.TypeMask int optional, @Checksum.TypeMask int required, @Nullable List trustedInstallers, @NonNull IOnChecksumsReadyListener onChecksumsReadyListener, int userId, @NonNull Executor executor, @NonNull Handler handler)689     public final void requestChecksums(@NonNull String packageName, boolean includeSplits,
690             @Checksum.TypeMask int optional, @Checksum.TypeMask int required,
691             @Nullable List trustedInstallers,
692             @NonNull IOnChecksumsReadyListener onChecksumsReadyListener, int userId,
693             @NonNull Executor executor, @NonNull Handler handler) {
694         mService.requestChecksumsInternal(snapshot(), packageName, includeSplits, optional,
695                 required, trustedInstallers, onChecksumsReadyListener, userId, executor,
696                 handler);
697     }
698 
699     @Override
700     @Deprecated
isPackageFrozen(@onNull String packageName, int callingUid, int userId)701     public final boolean isPackageFrozen(@NonNull String packageName,
702             int callingUid, int userId) {
703         return snapshot().getPackageStartability(mService.getSafeMode(), packageName, callingUid, userId)
704                 == PackageManagerService.PACKAGE_STARTABILITY_FROZEN;
705     }
706 
707     @Override
708     @Deprecated
deleteOatArtifactsOfPackage(String packageName)709     public final long deleteOatArtifactsOfPackage(String packageName) {
710         return mService.deleteOatArtifactsOfPackage(snapshot(), packageName);
711     }
712 
713     @Override
714     @Deprecated
reconcileAppsData(int userId, @StorageManager.StorageFlags int flags, boolean migrateAppsData)715     public final void reconcileAppsData(int userId, @StorageManager.StorageFlags int flags,
716             boolean migrateAppsData) {
717         getAppDataHelper().reconcileAppsData(userId, flags, migrateAppsData);
718     }
719 
720     @Override
721     @NonNull
getSharedUserPackages(int sharedUserAppId)722     public ArraySet<PackageStateInternal> getSharedUserPackages(int sharedUserAppId) {
723         return snapshot().getSharedUserPackages(sharedUserAppId);
724     }
725 
726     @Override
727     @Nullable
getSharedUserApi(int sharedUserAppId)728     public SharedUserApi getSharedUserApi(int sharedUserAppId) {
729         return snapshot().getSharedUser(sharedUserAppId);
730     }
731 
732     @Override
isUidPrivileged(int uid)733     public boolean isUidPrivileged(int uid) {
734         return snapshot().isUidPrivileged(uid);
735     }
736 
737     @Override
checkUidSignaturesForAllUsers(int uid1, int uid2)738     public int checkUidSignaturesForAllUsers(int uid1, int uid2) {
739         return snapshot().checkUidSignaturesForAllUsers(uid1, uid2);
740     }
741 
742     @Override
setPackageStoppedState(@onNull String packageName, boolean stopped, int userId)743     public void setPackageStoppedState(@NonNull String packageName, boolean stopped,
744             int userId) {
745         mService.setPackageStoppedState(snapshot(), packageName, stopped, userId);
746     }
747 
748     @NonNull
749     @Override
750     @Deprecated
recordInitialState()751     public final PackageStateMutator.InitialState recordInitialState() {
752         return mService.recordInitialState();
753     }
754 
755     @Nullable
756     @Override
757     @Deprecated
commitPackageStateMutation( @ullable PackageStateMutator.InitialState state, @NonNull Consumer<PackageStateMutator> consumer)758     public final PackageStateMutator.Result commitPackageStateMutation(
759             @Nullable PackageStateMutator.InitialState state,
760             @NonNull Consumer<PackageStateMutator> consumer) {
761         return mService.commitPackageStateMutation(state, consumer);
762     }
763 
764     @Override
765     @Deprecated
shutdown()766     public final void shutdown() {
767         mService.shutdown();
768     }
769 }
770