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

Commit 782d17dd authored by Rhed Jao's avatar Rhed Jao
Browse files

Clean up uses-native-library targetSdkVersion check

Instead of the explicit version check, using the PlatformCompat
api to check whether the feature is enabled or not.

Bug: 160928779
Test: atest android.appmanifest.cts.UsesNativeLibraryTestCase
Change-Id: I316ef37804f75ea05503fb82c021de1701789133
parent 01f110bf
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -167,6 +167,28 @@ public class PlatformCompat extends IPlatformCompat.Stub {
        return enabled;
    }

    /**
     * Called by the package manager to check if a given change is enabled for a given package name
     * and the target sdk version while the package is in the parsing state.
     *
     * <p>Does not perform costly permission check.
     *
     * @param changeId the ID of the change in question
     * @param packageName package name to check for
     * @param targetSdkVersion target sdk version to check for
     * @return {@code true} if the change would be enabled for this package name.
     */
    public boolean isChangeEnabledInternal(long changeId, String packageName,
            int targetSdkVersion) {
        if (mCompatConfig.willChangeBeEnabled(changeId, packageName)) {
            final ApplicationInfo appInfo = new ApplicationInfo();
            appInfo.packageName = packageName;
            appInfo.targetSdkVersion = targetSdkVersion;
            return isChangeEnabledInternalNoLogging(changeId, appInfo);
        }
        return false;
    }

    @Override
    public void setOverrides(CompatibilityChangeConfig overrides, String packageName) {
        checkCompatChangeOverridePermission();
+8 −7
Original line number Diff line number Diff line
@@ -12753,7 +12753,8 @@ public class PackageManagerService extends IPackageManager.Stub
            Map<String, AndroidPackage> availablePackages)
            throws PackageManagerException {
        final ArrayList<SharedLibraryInfo> sharedLibraryInfos = collectSharedLibraryInfos(
                pkgSetting.pkg, availablePackages, mSharedLibraries, null);
                pkgSetting.pkg, availablePackages, mSharedLibraries, null /* newLibraries */,
                mInjector.getCompatibility());
        executeSharedLibrariesUpdateLPr(pkg, pkgSetting, changingLib, changingLibSetting,
                sharedLibraryInfos, mUserManager.getUserIds());
    }
@@ -12761,8 +12762,8 @@ public class PackageManagerService extends IPackageManager.Stub
    private static ArrayList<SharedLibraryInfo> collectSharedLibraryInfos(AndroidPackage pkg,
            Map<String, AndroidPackage> availablePackages,
            @NonNull final Map<String, WatchedLongSparseArray<SharedLibraryInfo>> existingLibraries,
            @Nullable final Map<String, WatchedLongSparseArray<SharedLibraryInfo>> newLibraries)
            throws PackageManagerException {
            @Nullable final Map<String, WatchedLongSparseArray<SharedLibraryInfo>> newLibraries,
            PlatformCompat platformCompat) throws PackageManagerException {
        if (pkg == null) {
            return null;
        }
@@ -12786,9 +12787,9 @@ public class PackageManagerService extends IPackageManager.Stub
                    null, null, pkg.getPackageName(), false, pkg.getTargetSdkVersion(),
                    usesLibraryInfos, availablePackages, existingLibraries, newLibraries);
        }
        // TODO(b/160928779) gate this behavior using ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES
        if (pkg.getTargetSdkVersion() > 30) {
            if (!pkg.getUsesNativeLibraries().isEmpty() && pkg.getTargetSdkVersion() > 30) {
        if (platformCompat.isChangeEnabledInternal(ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES,
                pkg.getPackageName(), pkg.getTargetSdkVersion())) {
            if (!pkg.getUsesNativeLibraries().isEmpty()) {
                usesLibraryInfos = collectSharedLibraryInfos(pkg.getUsesNativeLibraries(), null,
                        null, pkg.getPackageName(), true, pkg.getTargetSdkVersion(),
                        usesLibraryInfos, availablePackages, existingLibraries, newLibraries);
@@ -18924,7 +18925,7 @@ public class PackageManagerService extends IPackageManager.Stub
                result.get(installPackageName).collectedSharedLibraryInfos =
                        collectSharedLibraryInfos(scanResult.request.parsedPackage,
                                combinedPackages, request.sharedLibrarySource,
                                incomingSharedLibraries);
                                incomingSharedLibraries, injector.getCompatibility());
            } catch (PackageManagerException e) {
                throw new ReconcileFailure(e.error, e.getMessage());