Loading services/core/java/android/content/pm/PackageManagerInternal.java +3 −1 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import com.android.server.pm.PackageSetting; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.pkg.AndroidPackageApi; import com.android.server.pm.pkg.PackageState; import com.android.server.pm.pkg.PackageStateInternal; import java.io.IOException; import java.lang.annotation.Retention; Loading Loading @@ -657,7 +658,8 @@ public abstract class PackageManagerInternal implements PackageSettingsSnapshotP @Nullable public abstract AndroidPackageApi getAndroidPackage(@NonNull String packageName); public abstract @Nullable PackageSetting getPackageSetting(@NonNull String packageName); @Nullable public abstract PackageStateInternal getPackageStateInternal(@NonNull String packageName); public abstract @Nullable PackageState getPackageState(@NonNull String packageName); Loading services/core/java/android/content/pm/PackageSettingsSnapshotProvider.java +9 −7 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.annotation.NonNull; import com.android.internal.util.FunctionalUtils; import com.android.server.pm.PackageManagerService; import com.android.server.pm.PackageSetting; import com.android.server.pm.pkg.PackageStateInternal; import java.util.function.Consumer; import java.util.function.Function; Loading @@ -29,28 +30,28 @@ import java.util.function.Function; public interface PackageSettingsSnapshotProvider { /** * Run a function block that requires access to {@link PackageSetting} data. This will * Run a function block that requires access to {@link PackageStateInternal} data. This will * ensure the {@link PackageManagerService} lock is taken before any caller's internal lock * to avoid deadlock. Note that this method may or may not lock. If a snapshot is available * and valid, it will iterate the snapshot set of data. */ void withPackageSettingsSnapshot( @NonNull Consumer<Function<String, PackageSetting>> block); @NonNull Consumer<Function<String, PackageStateInternal>> block); /** * Variant which returns a value to the caller. * @see #withPackageSettingsSnapshot(Consumer) */ <Output> Output withPackageSettingsSnapshotReturning( @NonNull FunctionalUtils.ThrowingFunction<Function<String, PackageSetting>, Output> block); @NonNull FunctionalUtils.ThrowingFunction<Function<String, PackageStateInternal>, Output> block); /** * Variant which throws. * @see #withPackageSettingsSnapshot(Consumer) */ <ExceptionType extends Exception> void withPackageSettingsSnapshotThrowing( @NonNull FunctionalUtils.ThrowingCheckedConsumer<Function<String, PackageSetting>, @NonNull FunctionalUtils.ThrowingCheckedConsumer<Function<String, PackageStateInternal>, ExceptionType> block) throws ExceptionType; /** Loading @@ -60,7 +61,8 @@ public interface PackageSettingsSnapshotProvider { <ExceptionOne extends Exception, ExceptionTwo extends Exception> void withPackageSettingsSnapshotThrowing2( @NonNull FunctionalUtils.ThrowingChecked2Consumer< Function<String, PackageSetting>, ExceptionOne, ExceptionTwo> block) Function<String, PackageStateInternal>, ExceptionOne, ExceptionTwo> block) throws ExceptionOne, ExceptionTwo; /** Loading @@ -70,6 +72,6 @@ public interface PackageSettingsSnapshotProvider { <Output, ExceptionType extends Exception> Output withPackageSettingsSnapshotReturningThrowing( @NonNull FunctionalUtils.ThrowingCheckedFunction< Function<String, PackageSetting>, Output, ExceptionType> block) Function<String, PackageStateInternal>, Output, ExceptionType> block) throws ExceptionType; } services/core/java/com/android/server/appop/AppOpsService.java +1 −1 Original line number Diff line number Diff line Loading @@ -3321,7 +3321,7 @@ public class AppOpsService extends IAppOpsService.Stub { private boolean isPackageExisted(String packageName) { return LocalServices.getService(PackageManagerInternal.class) .getPackageSetting(packageName) != null; .getPackageStateInternal(packageName) != null; } /** Loading services/core/java/com/android/server/pm/AppsFilter.java +57 −50 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import com.android.server.compat.CompatChange; import com.android.server.om.OverlayReferenceMapper; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.utils.Snappable; import com.android.server.utils.SnapshotCache; import com.android.server.utils.Snapshots; Loading Loading @@ -166,7 +167,7 @@ public class AppsFilter implements Watchable, Snappable { /** * This structure maps uid -> uid and indicates whether access from the first should be * filtered to the second. It's essentially a cache of the * {@link #shouldFilterApplicationInternal(int, SettingBase, PackageSetting, int)} call. * {@link #shouldFilterApplicationInternal(int, Object, PackageStateInternal, int)} call. * NOTE: It can only be relied upon after the system is ready to avoid unnecessary update on * initial scam and is null until {@link #onSystemReady()} is called. */ Loading Loading @@ -311,7 +312,8 @@ public class AppsFilter implements Watchable, Snappable { void runWithState(CurrentStateCallback callback); interface CurrentStateCallback { void currentState(ArrayMap<String, PackageSetting> settings, UserInfo[] users); void currentState(ArrayMap<String, ? extends PackageStateInternal> settings, UserInfo[] users); } } Loading Loading @@ -343,7 +345,7 @@ public class AppsFilter implements Watchable, Snappable { * * @param removed true if adding, false if removing */ void updatePackageState(PackageSetting setting, boolean removed); void updatePackageState(PackageStateInternal setting, boolean removed); } private static class FeatureConfigImpl implements FeatureConfig, CompatChange.ChangeListener { Loading Loading @@ -467,7 +469,7 @@ public class AppsFilter implements Watchable, Snappable { } @Override public void updatePackageState(PackageSetting setting, boolean removed) { public void updatePackageState(PackageStateInternal setting, boolean removed) { final boolean enableLogging = setting.getPkg() != null && !removed && (setting.getPkg().isTestOnly() || setting.getPkg().isDebuggable()); enableLogging(setting.getAppId(), enableLogging); Loading Loading @@ -538,7 +540,7 @@ public class AppsFilter implements Watchable, Snappable { && querying.getQueriesPackages().contains(potentialTarget.getPackageName()); } private static boolean canQueryAsInstaller(PackageSetting querying, private static boolean canQueryAsInstaller(PackageStateInternal querying, AndroidPackage potentialTarget) { final InstallSource installSource = querying.getInstallSource(); if (potentialTarget.getPackageName().equals(installSource.installerPackageName)) { Loading Loading @@ -689,7 +691,7 @@ public class AppsFilter implements Watchable, Snappable { * @param newPkgSetting the new setting being added * @param isReplace if the package is being replaced and may need extra cleanup. */ public void addPackage(PackageSetting newPkgSetting, boolean isReplace) { public void addPackage(PackageStateInternal newPkgSetting, boolean isReplace) { if (DEBUG_TRACING) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "filter.addPackage"); } Loading @@ -708,7 +710,8 @@ public class AppsFilter implements Watchable, Snappable { if (additionalChangedPackages != null) { for (int index = 0; index < additionalChangedPackages.size(); index++) { String changedPackage = additionalChangedPackages.valueAt(index); PackageSetting changedPkgSetting = settings.get(changedPackage); PackageStateInternal changedPkgSetting = settings.get(changedPackage); if (changedPkgSetting == null) { // It's possible for the overlay mapper to know that an actor // package changed via an explicit reference, even if the actor Loading Loading @@ -737,14 +740,14 @@ public class AppsFilter implements Watchable, Snappable { * to be updated in the cache. Returns null if there are no additional packages. */ @Nullable private ArraySet<String> addPackageInternal(PackageSetting newPkgSetting, ArrayMap<String, PackageSetting> existingSettings) { private ArraySet<String> addPackageInternal(PackageStateInternal newPkgSetting, ArrayMap<String, ? extends PackageStateInternal> existingSettings) { if (Objects.equals("android", newPkgSetting.getPackageName())) { // let's set aside the framework signatures mSystemSigningDetails = newPkgSetting.getSigningDetails(); // and since we add overlays before we add the framework, let's revisit already added // packages for signature matches for (PackageSetting setting : existingSettings.values()) { for (PackageStateInternal setting : existingSettings.values()) { if (isSystemSigned(mSystemSigningDetails, setting)) { mForceQueryable.add(setting.getAppId()); } Loading Loading @@ -775,7 +778,7 @@ public class AppsFilter implements Watchable, Snappable { } for (int i = existingSettings.size() - 1; i >= 0; i--) { final PackageSetting existingSetting = existingSettings.valueAt(i); final PackageStateInternal existingSetting = existingSettings.valueAt(i); if (existingSetting.getAppId() == newPkgSetting.getAppId() || existingSetting.getPkg() == null) { continue; Loading Loading @@ -823,7 +826,7 @@ public class AppsFilter implements Watchable, Snappable { int existingSize = existingSettings.size(); ArrayMap<String, AndroidPackage> existingPkgs = new ArrayMap<>(existingSize); for (int index = 0; index < existingSize; index++) { PackageSetting pkgSetting = existingSettings.valueAt(index); PackageStateInternal pkgSetting = existingSettings.valueAt(index); if (pkgSetting.getPkg() != null) { existingPkgs.put(pkgSetting.getPackageName(), pkgSetting.getPkg()); } Loading Loading @@ -881,7 +884,8 @@ public class AppsFilter implements Watchable, Snappable { } private WatchedSparseBooleanMatrix updateEntireShouldFilterCacheInner( ArrayMap<String, PackageSetting> settings, UserInfo[] users, int subjectUserId) { ArrayMap<String, ? extends PackageStateInternal> settings, UserInfo[] users, int subjectUserId) { final WatchedSparseBooleanMatrix cache; if (subjectUserId == USER_ALL) { cache = new WatchedSparseBooleanMatrix(users.length * settings.size()); Loading @@ -900,7 +904,7 @@ public class AppsFilter implements Watchable, Snappable { private void updateEntireShouldFilterCacheAsync() { mBackgroundExecutor.execute(() -> { final ArrayMap<String, PackageSetting> settingsCopy = new ArrayMap<>(); final ArrayMap<String, PackageStateInternal> settingsCopy = new ArrayMap<>(); final ArrayMap<String, AndroidPackage> packagesCache = new ArrayMap<>(); final UserInfo[][] usersRef = new UserInfo[1][]; mStateProvider.runWithState((settings, users) -> { Loading Loading @@ -977,10 +981,11 @@ public class AppsFilter implements Watchable, Snappable { } private void updateShouldFilterCacheForPackage(WatchedSparseBooleanMatrix cache, @Nullable String skipPackageName, PackageSetting subjectSetting, ArrayMap<String, PackageSetting> allSettings, UserInfo[] allUsers, int subjectUserId, int maxIndex) { @Nullable String skipPackageName, PackageStateInternal subjectSetting, ArrayMap<String, ? extends PackageStateInternal> allSettings, UserInfo[] allUsers, int subjectUserId, int maxIndex) { for (int i = Math.min(maxIndex, allSettings.size() - 1); i >= 0; i--) { PackageSetting otherSetting = allSettings.valueAt(i); PackageStateInternal otherSetting = allSettings.valueAt(i); if (subjectSetting.getAppId() == otherSetting.getAppId()) { continue; } Loading @@ -1002,8 +1007,8 @@ public class AppsFilter implements Watchable, Snappable { } private void updateShouldFilterCacheForUser(WatchedSparseBooleanMatrix cache, PackageSetting subjectSetting, UserInfo[] allUsers, PackageSetting otherSetting, int subjectUserId) { PackageStateInternal subjectSetting, UserInfo[] allUsers, PackageStateInternal otherSetting, int subjectUserId) { for (int ou = 0; ou < allUsers.length; ou++) { int otherUser = allUsers[ou].id; int subjectUid = UserHandle.getUid(subjectUserId, subjectSetting.getAppId()); Loading Loading @@ -1041,16 +1046,17 @@ public class AppsFilter implements Watchable, Snappable { } private static boolean isSystemSigned(@NonNull SigningDetails sysSigningDetails, PackageSetting pkgSetting) { PackageStateInternal pkgSetting) { return pkgSetting.isSystem() && pkgSetting.getSigningDetails().signaturesMatchExactly(sysSigningDetails); } private ArraySet<String> collectProtectedBroadcasts( ArrayMap<String, PackageSetting> existingSettings, @Nullable String excludePackage) { ArrayMap<String, ? extends PackageStateInternal> existingSettings, @Nullable String excludePackage) { ArraySet<String> ret = new ArraySet<>(); for (int i = existingSettings.size() - 1; i >= 0; i--) { PackageSetting setting = existingSettings.valueAt(i); PackageStateInternal setting = existingSettings.valueAt(i); if (setting.getPkg() == null || setting.getPkg().getPackageName().equals( excludePackage)) { continue; Loading @@ -1065,13 +1071,13 @@ public class AppsFilter implements Watchable, Snappable { /** * This method recomputes all component / intent-based visibility and is intended to match the * relevant logic of {@link #addPackageInternal(PackageSetting, ArrayMap)} * relevant logic of {@link #addPackageInternal(PackageStateInternal, ArrayMap)} */ private void recomputeComponentVisibility( ArrayMap<String, PackageSetting> existingSettings) { ArrayMap<String, ? extends PackageStateInternal> existingSettings) { mQueriesViaComponent.clear(); for (int i = existingSettings.size() - 1; i >= 0; i--) { PackageSetting setting = existingSettings.valueAt(i); PackageStateInternal setting = existingSettings.valueAt(i); if (setting.getPkg() == null || requestsQueryAllPackages(setting.getPkg())) { continue; } Loading @@ -1079,7 +1085,7 @@ public class AppsFilter implements Watchable, Snappable { if (i == j) { continue; } final PackageSetting otherSetting = existingSettings.valueAt(j); final PackageStateInternal otherSetting = existingSettings.valueAt(j); if (otherSetting.getPkg() == null || mForceQueryable.contains( otherSetting.getAppId())) { continue; Loading Loading @@ -1108,8 +1114,8 @@ public class AppsFilter implements Watchable, Snappable { * applied. */ @Nullable public SparseArray<int[]> getVisibilityAllowList(PackageSetting setting, int[] users, ArrayMap<String, PackageSetting> existingSettings) { public SparseArray<int[]> getVisibilityAllowList(PackageStateInternal setting, int[] users, ArrayMap<String, ? extends PackageStateInternal> existingSettings) { if (mForceQueryable.contains(setting.getAppId())) { return null; } Loading @@ -1121,7 +1127,7 @@ public class AppsFilter implements Watchable, Snappable { int[] buffer = null; int allowListSize = 0; for (int i = existingSettings.size() - 1; i >= 0; i--) { final PackageSetting existingSetting = existingSettings.valueAt(i); final PackageStateInternal existingSetting = existingSettings.valueAt(i); final int existingAppId = existingSetting.getAppId(); if (existingAppId < Process.FIRST_APPLICATION_UID) { continue; Loading Loading @@ -1152,17 +1158,17 @@ public class AppsFilter implements Watchable, Snappable { */ @VisibleForTesting(visibility = PRIVATE) @Nullable SparseArray<int[]> getVisibilityAllowList(PackageSetting setting, int[] users, WatchedArrayMap<String, PackageSetting> existingSettings) { SparseArray<int[]> getVisibilityAllowList(PackageStateInternal setting, int[] users, WatchedArrayMap<String, ? extends PackageStateInternal> existingSettings) { return getVisibilityAllowList(setting, users, existingSettings.untrackedStorage()); } /** * Equivalent to calling {@link #addPackage(PackageSetting, boolean)} with {@code isReplace} * equal to {@code false}. * @see AppsFilter#addPackage(PackageSetting, boolean) * Equivalent to calling {@link #addPackage(PackageStateInternal, boolean)} with * {@code isReplace} equal to {@code false}. * @see AppsFilter#addPackage(PackageStateInternal, boolean) */ public void addPackage(PackageSetting newPkgSetting) { public void addPackage(PackageStateInternal newPkgSetting) { addPackage(newPkgSetting, false /* isReplace */); } Loading @@ -1172,7 +1178,7 @@ public class AppsFilter implements Watchable, Snappable { * @param setting the setting of the package being removed. * @param isReplace if the package is being replaced. */ public void removePackage(PackageSetting setting, boolean isReplace) { public void removePackage(PackageStateInternal setting, boolean isReplace) { mStateProvider.runWithState((settings, users) -> { final int userCount = users.length; for (int u = 0; u < userCount; u++) { Loading Loading @@ -1244,7 +1250,8 @@ public class AppsFilter implements Watchable, Snappable { removeAppIdFromVisibilityCache(setting.getAppId()); if (mShouldFilterCache != null && setting.getSharedUser() != null) { for (int i = setting.getSharedUser().packages.size() - 1; i >= 0; i--) { PackageSetting siblingSetting = setting.getSharedUser().packages.valueAt(i); PackageStateInternal siblingSetting = setting.getSharedUser().packages.valueAt(i); if (siblingSetting == setting) { continue; } Loading @@ -1258,7 +1265,7 @@ public class AppsFilter implements Watchable, Snappable { if (additionalChangedPackages != null) { for (int index = 0; index < additionalChangedPackages.size(); index++) { String changedPackage = additionalChangedPackages.valueAt(index); PackageSetting changedPkgSetting = settings.get(changedPackage); PackageStateInternal changedPkgSetting = settings.get(changedPackage); if (changedPkgSetting == null) { // It's possible for the overlay mapper to know that an actor // package changed via an explicit reference, even if the actor Loading Loading @@ -1287,8 +1294,8 @@ public class AppsFilter implements Watchable, Snappable { * @param targetPkgSetting the package being accessed * @param userId the user in which this access is being attempted */ public boolean shouldFilterApplication(int callingUid, @Nullable SettingBase callingSetting, PackageSetting targetPkgSetting, int userId) { public boolean shouldFilterApplication(int callingUid, @Nullable Object callingSetting, PackageStateInternal targetPkgSetting, int userId) { if (DEBUG_TRACING) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "shouldFilterApplication"); } Loading Loading @@ -1333,8 +1340,8 @@ public class AppsFilter implements Watchable, Snappable { } } private boolean shouldFilterApplicationInternal(int callingUid, SettingBase callingSetting, PackageSetting targetPkgSetting, int targetUserId) { private boolean shouldFilterApplicationInternal(int callingUid, Object callingSetting, PackageStateInternal targetPkgSetting, int targetUserId) { if (DEBUG_TRACING) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "shouldFilterApplicationInternal"); } Loading @@ -1350,19 +1357,19 @@ public class AppsFilter implements Watchable, Snappable { Slog.wtf(TAG, "No setting found for non system uid " + callingUid); return true; } final PackageSetting callingPkgSetting; final ArraySet<PackageSetting> callingSharedPkgSettings; final PackageStateInternal callingPkgSetting; final ArraySet<? extends PackageStateInternal> callingSharedPkgSettings; if (DEBUG_TRACING) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "callingSetting instanceof"); } if (callingSetting instanceof PackageSetting) { if (((PackageSetting) callingSetting).getSharedUser() == null) { callingPkgSetting = (PackageSetting) callingSetting; if (callingSetting instanceof PackageStateInternal) { if (((PackageStateInternal) callingSetting).getSharedUser() == null) { callingPkgSetting = (PackageStateInternal) callingSetting; callingSharedPkgSettings = null; } else { callingPkgSetting = null; callingSharedPkgSettings = ((PackageSetting) callingSetting).getSharedUser().packages; ((PackageStateInternal) callingSetting).getSharedUser().packages; } } else { callingPkgSetting = null; Loading Loading @@ -1544,7 +1551,7 @@ public class AppsFilter implements Watchable, Snappable { if (callingSharedPkgSettings != null) { int size = callingSharedPkgSettings.size(); for (int index = 0; index < size; index++) { PackageSetting pkgSetting = callingSharedPkgSettings.valueAt(index); PackageStateInternal pkgSetting = callingSharedPkgSettings.valueAt(index); if (mOverlayReferenceMapper.isValidActor(targetName, pkgSetting.getPackageName())) { if (DEBUG_LOGGING) { Loading Loading @@ -1642,7 +1649,7 @@ public class AppsFilter implements Watchable, Snappable { } } private static void log(SettingBase callingSetting, PackageSetting targetPkgSetting, private static void log(Object callingSetting, PackageStateInternal targetPkgSetting, String description) { Slog.i(TAG, "interaction: " + (callingSetting == null ? "system" : callingSetting) + " -> " Loading services/core/java/com/android/server/pm/ComponentResolver.java +22 −23 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
services/core/java/android/content/pm/PackageManagerInternal.java +3 −1 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import com.android.server.pm.PackageSetting; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.pkg.AndroidPackageApi; import com.android.server.pm.pkg.PackageState; import com.android.server.pm.pkg.PackageStateInternal; import java.io.IOException; import java.lang.annotation.Retention; Loading Loading @@ -657,7 +658,8 @@ public abstract class PackageManagerInternal implements PackageSettingsSnapshotP @Nullable public abstract AndroidPackageApi getAndroidPackage(@NonNull String packageName); public abstract @Nullable PackageSetting getPackageSetting(@NonNull String packageName); @Nullable public abstract PackageStateInternal getPackageStateInternal(@NonNull String packageName); public abstract @Nullable PackageState getPackageState(@NonNull String packageName); Loading
services/core/java/android/content/pm/PackageSettingsSnapshotProvider.java +9 −7 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.annotation.NonNull; import com.android.internal.util.FunctionalUtils; import com.android.server.pm.PackageManagerService; import com.android.server.pm.PackageSetting; import com.android.server.pm.pkg.PackageStateInternal; import java.util.function.Consumer; import java.util.function.Function; Loading @@ -29,28 +30,28 @@ import java.util.function.Function; public interface PackageSettingsSnapshotProvider { /** * Run a function block that requires access to {@link PackageSetting} data. This will * Run a function block that requires access to {@link PackageStateInternal} data. This will * ensure the {@link PackageManagerService} lock is taken before any caller's internal lock * to avoid deadlock. Note that this method may or may not lock. If a snapshot is available * and valid, it will iterate the snapshot set of data. */ void withPackageSettingsSnapshot( @NonNull Consumer<Function<String, PackageSetting>> block); @NonNull Consumer<Function<String, PackageStateInternal>> block); /** * Variant which returns a value to the caller. * @see #withPackageSettingsSnapshot(Consumer) */ <Output> Output withPackageSettingsSnapshotReturning( @NonNull FunctionalUtils.ThrowingFunction<Function<String, PackageSetting>, Output> block); @NonNull FunctionalUtils.ThrowingFunction<Function<String, PackageStateInternal>, Output> block); /** * Variant which throws. * @see #withPackageSettingsSnapshot(Consumer) */ <ExceptionType extends Exception> void withPackageSettingsSnapshotThrowing( @NonNull FunctionalUtils.ThrowingCheckedConsumer<Function<String, PackageSetting>, @NonNull FunctionalUtils.ThrowingCheckedConsumer<Function<String, PackageStateInternal>, ExceptionType> block) throws ExceptionType; /** Loading @@ -60,7 +61,8 @@ public interface PackageSettingsSnapshotProvider { <ExceptionOne extends Exception, ExceptionTwo extends Exception> void withPackageSettingsSnapshotThrowing2( @NonNull FunctionalUtils.ThrowingChecked2Consumer< Function<String, PackageSetting>, ExceptionOne, ExceptionTwo> block) Function<String, PackageStateInternal>, ExceptionOne, ExceptionTwo> block) throws ExceptionOne, ExceptionTwo; /** Loading @@ -70,6 +72,6 @@ public interface PackageSettingsSnapshotProvider { <Output, ExceptionType extends Exception> Output withPackageSettingsSnapshotReturningThrowing( @NonNull FunctionalUtils.ThrowingCheckedFunction< Function<String, PackageSetting>, Output, ExceptionType> block) Function<String, PackageStateInternal>, Output, ExceptionType> block) throws ExceptionType; }
services/core/java/com/android/server/appop/AppOpsService.java +1 −1 Original line number Diff line number Diff line Loading @@ -3321,7 +3321,7 @@ public class AppOpsService extends IAppOpsService.Stub { private boolean isPackageExisted(String packageName) { return LocalServices.getService(PackageManagerInternal.class) .getPackageSetting(packageName) != null; .getPackageStateInternal(packageName) != null; } /** Loading
services/core/java/com/android/server/pm/AppsFilter.java +57 −50 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import com.android.server.compat.CompatChange; import com.android.server.om.OverlayReferenceMapper; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.utils.Snappable; import com.android.server.utils.SnapshotCache; import com.android.server.utils.Snapshots; Loading Loading @@ -166,7 +167,7 @@ public class AppsFilter implements Watchable, Snappable { /** * This structure maps uid -> uid and indicates whether access from the first should be * filtered to the second. It's essentially a cache of the * {@link #shouldFilterApplicationInternal(int, SettingBase, PackageSetting, int)} call. * {@link #shouldFilterApplicationInternal(int, Object, PackageStateInternal, int)} call. * NOTE: It can only be relied upon after the system is ready to avoid unnecessary update on * initial scam and is null until {@link #onSystemReady()} is called. */ Loading Loading @@ -311,7 +312,8 @@ public class AppsFilter implements Watchable, Snappable { void runWithState(CurrentStateCallback callback); interface CurrentStateCallback { void currentState(ArrayMap<String, PackageSetting> settings, UserInfo[] users); void currentState(ArrayMap<String, ? extends PackageStateInternal> settings, UserInfo[] users); } } Loading Loading @@ -343,7 +345,7 @@ public class AppsFilter implements Watchable, Snappable { * * @param removed true if adding, false if removing */ void updatePackageState(PackageSetting setting, boolean removed); void updatePackageState(PackageStateInternal setting, boolean removed); } private static class FeatureConfigImpl implements FeatureConfig, CompatChange.ChangeListener { Loading Loading @@ -467,7 +469,7 @@ public class AppsFilter implements Watchable, Snappable { } @Override public void updatePackageState(PackageSetting setting, boolean removed) { public void updatePackageState(PackageStateInternal setting, boolean removed) { final boolean enableLogging = setting.getPkg() != null && !removed && (setting.getPkg().isTestOnly() || setting.getPkg().isDebuggable()); enableLogging(setting.getAppId(), enableLogging); Loading Loading @@ -538,7 +540,7 @@ public class AppsFilter implements Watchable, Snappable { && querying.getQueriesPackages().contains(potentialTarget.getPackageName()); } private static boolean canQueryAsInstaller(PackageSetting querying, private static boolean canQueryAsInstaller(PackageStateInternal querying, AndroidPackage potentialTarget) { final InstallSource installSource = querying.getInstallSource(); if (potentialTarget.getPackageName().equals(installSource.installerPackageName)) { Loading Loading @@ -689,7 +691,7 @@ public class AppsFilter implements Watchable, Snappable { * @param newPkgSetting the new setting being added * @param isReplace if the package is being replaced and may need extra cleanup. */ public void addPackage(PackageSetting newPkgSetting, boolean isReplace) { public void addPackage(PackageStateInternal newPkgSetting, boolean isReplace) { if (DEBUG_TRACING) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "filter.addPackage"); } Loading @@ -708,7 +710,8 @@ public class AppsFilter implements Watchable, Snappable { if (additionalChangedPackages != null) { for (int index = 0; index < additionalChangedPackages.size(); index++) { String changedPackage = additionalChangedPackages.valueAt(index); PackageSetting changedPkgSetting = settings.get(changedPackage); PackageStateInternal changedPkgSetting = settings.get(changedPackage); if (changedPkgSetting == null) { // It's possible for the overlay mapper to know that an actor // package changed via an explicit reference, even if the actor Loading Loading @@ -737,14 +740,14 @@ public class AppsFilter implements Watchable, Snappable { * to be updated in the cache. Returns null if there are no additional packages. */ @Nullable private ArraySet<String> addPackageInternal(PackageSetting newPkgSetting, ArrayMap<String, PackageSetting> existingSettings) { private ArraySet<String> addPackageInternal(PackageStateInternal newPkgSetting, ArrayMap<String, ? extends PackageStateInternal> existingSettings) { if (Objects.equals("android", newPkgSetting.getPackageName())) { // let's set aside the framework signatures mSystemSigningDetails = newPkgSetting.getSigningDetails(); // and since we add overlays before we add the framework, let's revisit already added // packages for signature matches for (PackageSetting setting : existingSettings.values()) { for (PackageStateInternal setting : existingSettings.values()) { if (isSystemSigned(mSystemSigningDetails, setting)) { mForceQueryable.add(setting.getAppId()); } Loading Loading @@ -775,7 +778,7 @@ public class AppsFilter implements Watchable, Snappable { } for (int i = existingSettings.size() - 1; i >= 0; i--) { final PackageSetting existingSetting = existingSettings.valueAt(i); final PackageStateInternal existingSetting = existingSettings.valueAt(i); if (existingSetting.getAppId() == newPkgSetting.getAppId() || existingSetting.getPkg() == null) { continue; Loading Loading @@ -823,7 +826,7 @@ public class AppsFilter implements Watchable, Snappable { int existingSize = existingSettings.size(); ArrayMap<String, AndroidPackage> existingPkgs = new ArrayMap<>(existingSize); for (int index = 0; index < existingSize; index++) { PackageSetting pkgSetting = existingSettings.valueAt(index); PackageStateInternal pkgSetting = existingSettings.valueAt(index); if (pkgSetting.getPkg() != null) { existingPkgs.put(pkgSetting.getPackageName(), pkgSetting.getPkg()); } Loading Loading @@ -881,7 +884,8 @@ public class AppsFilter implements Watchable, Snappable { } private WatchedSparseBooleanMatrix updateEntireShouldFilterCacheInner( ArrayMap<String, PackageSetting> settings, UserInfo[] users, int subjectUserId) { ArrayMap<String, ? extends PackageStateInternal> settings, UserInfo[] users, int subjectUserId) { final WatchedSparseBooleanMatrix cache; if (subjectUserId == USER_ALL) { cache = new WatchedSparseBooleanMatrix(users.length * settings.size()); Loading @@ -900,7 +904,7 @@ public class AppsFilter implements Watchable, Snappable { private void updateEntireShouldFilterCacheAsync() { mBackgroundExecutor.execute(() -> { final ArrayMap<String, PackageSetting> settingsCopy = new ArrayMap<>(); final ArrayMap<String, PackageStateInternal> settingsCopy = new ArrayMap<>(); final ArrayMap<String, AndroidPackage> packagesCache = new ArrayMap<>(); final UserInfo[][] usersRef = new UserInfo[1][]; mStateProvider.runWithState((settings, users) -> { Loading Loading @@ -977,10 +981,11 @@ public class AppsFilter implements Watchable, Snappable { } private void updateShouldFilterCacheForPackage(WatchedSparseBooleanMatrix cache, @Nullable String skipPackageName, PackageSetting subjectSetting, ArrayMap<String, PackageSetting> allSettings, UserInfo[] allUsers, int subjectUserId, int maxIndex) { @Nullable String skipPackageName, PackageStateInternal subjectSetting, ArrayMap<String, ? extends PackageStateInternal> allSettings, UserInfo[] allUsers, int subjectUserId, int maxIndex) { for (int i = Math.min(maxIndex, allSettings.size() - 1); i >= 0; i--) { PackageSetting otherSetting = allSettings.valueAt(i); PackageStateInternal otherSetting = allSettings.valueAt(i); if (subjectSetting.getAppId() == otherSetting.getAppId()) { continue; } Loading @@ -1002,8 +1007,8 @@ public class AppsFilter implements Watchable, Snappable { } private void updateShouldFilterCacheForUser(WatchedSparseBooleanMatrix cache, PackageSetting subjectSetting, UserInfo[] allUsers, PackageSetting otherSetting, int subjectUserId) { PackageStateInternal subjectSetting, UserInfo[] allUsers, PackageStateInternal otherSetting, int subjectUserId) { for (int ou = 0; ou < allUsers.length; ou++) { int otherUser = allUsers[ou].id; int subjectUid = UserHandle.getUid(subjectUserId, subjectSetting.getAppId()); Loading Loading @@ -1041,16 +1046,17 @@ public class AppsFilter implements Watchable, Snappable { } private static boolean isSystemSigned(@NonNull SigningDetails sysSigningDetails, PackageSetting pkgSetting) { PackageStateInternal pkgSetting) { return pkgSetting.isSystem() && pkgSetting.getSigningDetails().signaturesMatchExactly(sysSigningDetails); } private ArraySet<String> collectProtectedBroadcasts( ArrayMap<String, PackageSetting> existingSettings, @Nullable String excludePackage) { ArrayMap<String, ? extends PackageStateInternal> existingSettings, @Nullable String excludePackage) { ArraySet<String> ret = new ArraySet<>(); for (int i = existingSettings.size() - 1; i >= 0; i--) { PackageSetting setting = existingSettings.valueAt(i); PackageStateInternal setting = existingSettings.valueAt(i); if (setting.getPkg() == null || setting.getPkg().getPackageName().equals( excludePackage)) { continue; Loading @@ -1065,13 +1071,13 @@ public class AppsFilter implements Watchable, Snappable { /** * This method recomputes all component / intent-based visibility and is intended to match the * relevant logic of {@link #addPackageInternal(PackageSetting, ArrayMap)} * relevant logic of {@link #addPackageInternal(PackageStateInternal, ArrayMap)} */ private void recomputeComponentVisibility( ArrayMap<String, PackageSetting> existingSettings) { ArrayMap<String, ? extends PackageStateInternal> existingSettings) { mQueriesViaComponent.clear(); for (int i = existingSettings.size() - 1; i >= 0; i--) { PackageSetting setting = existingSettings.valueAt(i); PackageStateInternal setting = existingSettings.valueAt(i); if (setting.getPkg() == null || requestsQueryAllPackages(setting.getPkg())) { continue; } Loading @@ -1079,7 +1085,7 @@ public class AppsFilter implements Watchable, Snappable { if (i == j) { continue; } final PackageSetting otherSetting = existingSettings.valueAt(j); final PackageStateInternal otherSetting = existingSettings.valueAt(j); if (otherSetting.getPkg() == null || mForceQueryable.contains( otherSetting.getAppId())) { continue; Loading Loading @@ -1108,8 +1114,8 @@ public class AppsFilter implements Watchable, Snappable { * applied. */ @Nullable public SparseArray<int[]> getVisibilityAllowList(PackageSetting setting, int[] users, ArrayMap<String, PackageSetting> existingSettings) { public SparseArray<int[]> getVisibilityAllowList(PackageStateInternal setting, int[] users, ArrayMap<String, ? extends PackageStateInternal> existingSettings) { if (mForceQueryable.contains(setting.getAppId())) { return null; } Loading @@ -1121,7 +1127,7 @@ public class AppsFilter implements Watchable, Snappable { int[] buffer = null; int allowListSize = 0; for (int i = existingSettings.size() - 1; i >= 0; i--) { final PackageSetting existingSetting = existingSettings.valueAt(i); final PackageStateInternal existingSetting = existingSettings.valueAt(i); final int existingAppId = existingSetting.getAppId(); if (existingAppId < Process.FIRST_APPLICATION_UID) { continue; Loading Loading @@ -1152,17 +1158,17 @@ public class AppsFilter implements Watchable, Snappable { */ @VisibleForTesting(visibility = PRIVATE) @Nullable SparseArray<int[]> getVisibilityAllowList(PackageSetting setting, int[] users, WatchedArrayMap<String, PackageSetting> existingSettings) { SparseArray<int[]> getVisibilityAllowList(PackageStateInternal setting, int[] users, WatchedArrayMap<String, ? extends PackageStateInternal> existingSettings) { return getVisibilityAllowList(setting, users, existingSettings.untrackedStorage()); } /** * Equivalent to calling {@link #addPackage(PackageSetting, boolean)} with {@code isReplace} * equal to {@code false}. * @see AppsFilter#addPackage(PackageSetting, boolean) * Equivalent to calling {@link #addPackage(PackageStateInternal, boolean)} with * {@code isReplace} equal to {@code false}. * @see AppsFilter#addPackage(PackageStateInternal, boolean) */ public void addPackage(PackageSetting newPkgSetting) { public void addPackage(PackageStateInternal newPkgSetting) { addPackage(newPkgSetting, false /* isReplace */); } Loading @@ -1172,7 +1178,7 @@ public class AppsFilter implements Watchable, Snappable { * @param setting the setting of the package being removed. * @param isReplace if the package is being replaced. */ public void removePackage(PackageSetting setting, boolean isReplace) { public void removePackage(PackageStateInternal setting, boolean isReplace) { mStateProvider.runWithState((settings, users) -> { final int userCount = users.length; for (int u = 0; u < userCount; u++) { Loading Loading @@ -1244,7 +1250,8 @@ public class AppsFilter implements Watchable, Snappable { removeAppIdFromVisibilityCache(setting.getAppId()); if (mShouldFilterCache != null && setting.getSharedUser() != null) { for (int i = setting.getSharedUser().packages.size() - 1; i >= 0; i--) { PackageSetting siblingSetting = setting.getSharedUser().packages.valueAt(i); PackageStateInternal siblingSetting = setting.getSharedUser().packages.valueAt(i); if (siblingSetting == setting) { continue; } Loading @@ -1258,7 +1265,7 @@ public class AppsFilter implements Watchable, Snappable { if (additionalChangedPackages != null) { for (int index = 0; index < additionalChangedPackages.size(); index++) { String changedPackage = additionalChangedPackages.valueAt(index); PackageSetting changedPkgSetting = settings.get(changedPackage); PackageStateInternal changedPkgSetting = settings.get(changedPackage); if (changedPkgSetting == null) { // It's possible for the overlay mapper to know that an actor // package changed via an explicit reference, even if the actor Loading Loading @@ -1287,8 +1294,8 @@ public class AppsFilter implements Watchable, Snappable { * @param targetPkgSetting the package being accessed * @param userId the user in which this access is being attempted */ public boolean shouldFilterApplication(int callingUid, @Nullable SettingBase callingSetting, PackageSetting targetPkgSetting, int userId) { public boolean shouldFilterApplication(int callingUid, @Nullable Object callingSetting, PackageStateInternal targetPkgSetting, int userId) { if (DEBUG_TRACING) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "shouldFilterApplication"); } Loading Loading @@ -1333,8 +1340,8 @@ public class AppsFilter implements Watchable, Snappable { } } private boolean shouldFilterApplicationInternal(int callingUid, SettingBase callingSetting, PackageSetting targetPkgSetting, int targetUserId) { private boolean shouldFilterApplicationInternal(int callingUid, Object callingSetting, PackageStateInternal targetPkgSetting, int targetUserId) { if (DEBUG_TRACING) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "shouldFilterApplicationInternal"); } Loading @@ -1350,19 +1357,19 @@ public class AppsFilter implements Watchable, Snappable { Slog.wtf(TAG, "No setting found for non system uid " + callingUid); return true; } final PackageSetting callingPkgSetting; final ArraySet<PackageSetting> callingSharedPkgSettings; final PackageStateInternal callingPkgSetting; final ArraySet<? extends PackageStateInternal> callingSharedPkgSettings; if (DEBUG_TRACING) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "callingSetting instanceof"); } if (callingSetting instanceof PackageSetting) { if (((PackageSetting) callingSetting).getSharedUser() == null) { callingPkgSetting = (PackageSetting) callingSetting; if (callingSetting instanceof PackageStateInternal) { if (((PackageStateInternal) callingSetting).getSharedUser() == null) { callingPkgSetting = (PackageStateInternal) callingSetting; callingSharedPkgSettings = null; } else { callingPkgSetting = null; callingSharedPkgSettings = ((PackageSetting) callingSetting).getSharedUser().packages; ((PackageStateInternal) callingSetting).getSharedUser().packages; } } else { callingPkgSetting = null; Loading Loading @@ -1544,7 +1551,7 @@ public class AppsFilter implements Watchable, Snappable { if (callingSharedPkgSettings != null) { int size = callingSharedPkgSettings.size(); for (int index = 0; index < size; index++) { PackageSetting pkgSetting = callingSharedPkgSettings.valueAt(index); PackageStateInternal pkgSetting = callingSharedPkgSettings.valueAt(index); if (mOverlayReferenceMapper.isValidActor(targetName, pkgSetting.getPackageName())) { if (DEBUG_LOGGING) { Loading Loading @@ -1642,7 +1649,7 @@ public class AppsFilter implements Watchable, Snappable { } } private static void log(SettingBase callingSetting, PackageSetting targetPkgSetting, private static void log(Object callingSetting, PackageStateInternal targetPkgSetting, String description) { Slog.i(TAG, "interaction: " + (callingSetting == null ? "system" : callingSetting) + " -> " Loading
services/core/java/com/android/server/pm/ComponentResolver.java +22 −23 File changed.Preview size limit exceeded, changes collapsed. Show changes