Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a98d27b authored by Jackal Guo's avatar Jackal Guo
Browse files

Migrate the usage of sCompatibilityModeEnabled

PackageManagerService still set global compatibility mode to the
Deprecated PackageParser. We should migrate the usage to the new
ParingPackageUtils.

Also replacing the usage of PackageParser#generateApplicationInfo
in PackageManagerService since we no longer set the compatibility
mode to PackageParser.

Bug: 186592266
Bug: 174723245
Test: atest -p core/java/android/content/pm \
        core/java/com/android/internal/content \
	services/core/java/com/android/server/pm \
	services/tests/servicestests/src/com/android/server/pm
Change-Id: I3f377273e06bd4adbd9311dd3bdc584af0028c77
parent 5b6127df
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -3063,6 +3063,13 @@ public class ParsingPackageUtils {
        }
    }

    /**
     * @hide
     */
    public static void setCompatibilityModeEnabled(boolean compatibilityModeEnabled) {
        sCompatibilityModeEnabled = compatibilityModeEnabled;
    }

    /**
     * @hide
     */
+21 −7
Original line number Diff line number Diff line
@@ -134,6 +134,7 @@ import static com.android.server.pm.PackageManagerServiceUtils.getLastModifiedTi
import static com.android.server.pm.PackageManagerServiceUtils.logCriticalInfo;
import static com.android.server.pm.PackageManagerServiceUtils.makeDirRecursive;
import static com.android.server.pm.PackageManagerServiceUtils.verifySignatures;
import static com.android.server.pm.parsing.PackageInfoUtils.checkUseInstalledOrHidden;
import android.Manifest;
import android.annotation.AppIdInt;
@@ -2539,8 +2540,8 @@ public class PackageManagerService extends IPackageManager.Stub
            if (DEBUG_PACKAGE_INFO) Log.v(TAG, "getActivityInfo " + component + ": " + a);
            AndroidPackage pkg = a == null ? null : mPackages.get(a.getPackageName());
            PackageSetting ps = a == null ? null : mSettings.getPackageLPr(a.getPackageName());
            if (pkg != null && mSettings.isEnabledAndMatchLPr(pkg, a, flags, userId)) {
                PackageSetting ps = mSettings.getPackageLPr(component.getPackageName());
                if (ps == null) return null;
                if (shouldFilterApplicationLocked(
                        ps, filterCallingUid, component, TYPE_ACTIVITY, userId)) {
@@ -2550,8 +2551,8 @@ public class PackageManagerService extends IPackageManager.Stub
                        a, flags, ps.readUserState(userId), userId, ps);
            }
            if (resolveComponentName().equals(component)) {
                return PackageParser.generateActivityInfo(
                        mResolveActivity, flags, new PackageUserState(), userId);
                return generateDelegateActivityInfo(pkg, ps, new PackageUserState(),
                        mResolveActivity, flags, userId);
            }
            return null;
        }
@@ -3197,8 +3198,8 @@ public class PackageManagerService extends IPackageManager.Stub
                return result;
            }
            final ResolveInfo ephemeralInstaller = new ResolveInfo(mInstantAppInstallerInfo);
            ephemeralInstaller.activityInfo = PackageParser.generateActivityInfo(
                    instantAppInstallerActivity(), 0, ps.readUserState(userId), userId);
            ephemeralInstaller.activityInfo = generateDelegateActivityInfo(ps.getPkg(), ps,
                    ps.readUserState(userId), instantAppInstallerActivity(), 0 /*flags*/, userId);
            ephemeralInstaller.match = IntentFilter.MATCH_CATEGORY_SCHEME_SPECIFIC_PART
                    | IntentFilter.MATCH_ADJUSTMENT_NORMAL;
            // add a non-generic filter
@@ -3282,7 +3283,7 @@ public class PackageManagerService extends IPackageManager.Stub
                ai.flags = ps.pkgFlags;
                ai.privateFlags = ps.pkgPrivateFlags;
                pi.applicationInfo =
                        PackageParser.generateApplicationInfo(ai, flags, state, userId);
                        PackageInfoUtils.generateApplicationInfo(p, flags, state, userId, ps);
                if (DEBUG_PACKAGE_INFO) Log.v(TAG, "ps.pkg is n/a for ["
                        + ps.name + "]. Provides a minimum info.");
@@ -3398,6 +3399,19 @@ public class PackageManagerService extends IPackageManager.Stub
            return getInstalledPackagesBody(flags, userId, callingUid);
        }
        private static ActivityInfo generateDelegateActivityInfo(@Nullable AndroidPackage pkg,
                @Nullable PackageSetting ps, @NonNull PackageUserState state,
                @Nullable ActivityInfo activity, int flags, int userId) {
            if (activity == null || pkg == null
                    || !checkUseInstalledOrHidden(pkg, ps, state, flags)) {
                return null;
            }
            final ActivityInfo info = new ActivityInfo(activity);
            info.applicationInfo =
                    PackageInfoUtils.generateApplicationInfo(pkg, flags, state, userId, ps);
            return info;
        }
        public ParceledListSlice<PackageInfo> getInstalledPackagesBody(int flags, int userId,
                                                                          int callingUid) {
            // writer
@@ -23603,7 +23617,7 @@ public class PackageManagerService extends IPackageManager.Stub
        boolean compatibilityModeEnabled = android.provider.Settings.Global.getInt(
                mContext.getContentResolver(),
                android.provider.Settings.Global.COMPATIBILITY_MODE, 1) == 1;
        PackageParser.setCompatibilityModeEnabled(compatibilityModeEnabled);
        ParsingPackageUtils.setCompatibilityModeEnabled(compatibilityModeEnabled);
        if (DEBUG_SETTINGS) {
            Log.d(TAG, "compatibility mode:" + compatibilityModeEnabled);
+1 −1
Original line number Diff line number Diff line
@@ -416,7 +416,7 @@ public class PackageInfoUtils {
     * Returns true if the package is installed and not hidden, or if the caller
     * explicitly wanted all uninstalled and hidden packages as well.
     */
    private static boolean checkUseInstalledOrHidden(AndroidPackage pkg,
    public static boolean checkUseInstalledOrHidden(AndroidPackage pkg,
            PackageSetting pkgSetting, PackageUserState state,
            @PackageManager.PackageInfoFlags int flags) {
        // Returns false if the package is hidden system app until installed.