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

Commit d11400ac authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Do not modify location perms on upgrade

(this code moved into permission controller)

Bug: 129340674
Test: Upgraded P->Q and saw new behavior
Change-Id: I61a11a7d709e2ae5afe4bfea43a70f1378465794
parent ba742068
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -3051,7 +3051,7 @@ public class PackageManagerService extends IPackageManager.Stub
                        + mSdkVersion + "; regranting permissions for internal storage");
            }
            mPermissionManager.updateAllPermissions(
                    StorageManager.UUID_PRIVATE_INTERNAL, sdkUpdated, false, mPackages.values(),
                    StorageManager.UUID_PRIVATE_INTERNAL, sdkUpdated, mPackages.values(),
                    mPermissionCallback);
            ver.sdkVersion = mSdkVersion;
@@ -5569,7 +5569,7 @@ public class PackageManagerService extends IPackageManager.Stub
        synchronized (mPackages) {
            mPermissionManager.updateAllPermissions(
                    StorageManager.UUID_PRIVATE_INTERNAL, false, false, mPackages.values(),
                    StorageManager.UUID_PRIVATE_INTERNAL, false, mPackages.values(),
                    mPermissionCallback);
            for (int userId : UserManagerService.getInstance().getUserIds()) {
                final int packageCount = mPackages.size();
@@ -21213,8 +21213,8 @@ public class PackageManagerService extends IPackageManager.Stub
        // try optimizing this.
        synchronized (mPackages) {
            mPermissionManager.updateAllPermissions(
                    StorageManager.UUID_PRIVATE_INTERNAL, false, mIsPreQUpgrade,
                    mPackages.values(), mPermissionCallback);
                    StorageManager.UUID_PRIVATE_INTERNAL, false, mPackages.values(),
                    mPermissionCallback);
        }
        // Watch for external volumes that come and go over time
@@ -22204,8 +22204,8 @@ public class PackageManagerService extends IPackageManager.Stub
                logCriticalInfo(Log.INFO, "Platform changed from " + ver.sdkVersion + " to "
                        + mSdkVersion + "; regranting permissions for " + volumeUuid);
            }
            mPermissionManager.updateAllPermissions(volumeUuid, sdkUpdated, false,
                    mPackages.values(), mPermissionCallback);
            mPermissionManager.updateAllPermissions(volumeUuid, sdkUpdated, mPackages.values(),
                    mPermissionCallback);
            // Yay, everything is now upgraded
            ver.forceCurrent();
@@ -23238,7 +23238,7 @@ public class PackageManagerService extends IPackageManager.Stub
        synchronized(mPackages) {
            // NOTE: This adds UPDATE_PERMISSIONS_REPLACE_PKG
            mPermissionManager.updateAllPermissions(
                    StorageManager.UUID_PRIVATE_INTERNAL, true, false, mPackages.values(),
                    StorageManager.UUID_PRIVATE_INTERNAL, true, mPackages.values(),
                    mPermissionCallback);
        }
    }
+3 −55
Original line number Diff line number Diff line
@@ -82,7 +82,6 @@ import android.permission.PermissionControllerManager;
import android.permission.PermissionManager;
import android.permission.PermissionManagerInternal;
import android.permission.PermissionManagerInternal.OnRuntimePermissionStateChangedListener;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -2603,62 +2602,12 @@ public class PermissionManagerService {
    }

    private void updateAllPermissions(String volumeUuid, boolean sdkUpdated,
            boolean updatePermissionsOnPreQUpdate, Collection<PackageParser.Package> allPackages,
            PermissionCallback callback) {
            Collection<PackageParser.Package> allPackages, PermissionCallback callback) {
        final int flags = UPDATE_PERMISSIONS_ALL |
                (sdkUpdated
                        ? UPDATE_PERMISSIONS_REPLACE_PKG | UPDATE_PERMISSIONS_REPLACE_ALL
                        : 0);
        updatePermissions(null, null, volumeUuid, flags, allPackages, callback);

        if (updatePermissionsOnPreQUpdate) {
            final int[] userIds = UserManagerService.getInstance().getUserIds();

            for (PackageParser.Package pkg : allPackages) {
                final PackageSetting ps = (PackageSetting) pkg.mExtras;
                if (ps == null) {
                    return;
                }

                final boolean appSupportsRuntimePermissions =
                        pkg.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.M;
                final PermissionsState permsState = ps.getPermissionsState();

                for (String permName : new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
                        Manifest.permission.ACCESS_COARSE_LOCATION,
                        Manifest.permission.ACCESS_BACKGROUND_LOCATION}) {
                    final BasePermission bp = mSettings.getPermissionLocked(permName);

                    for (int userId : userIds) {
                        if (Settings.Secure.getIntForUser(mContext.getContentResolver(),
                                Settings.Secure.LOCATION_PERMISSIONS_UPGRADE_TO_Q_MODE, 0, userId)
                                != 0) {
                            continue;
                        }

                        final PermissionState permState = permsState.getRuntimePermissionState(
                                permName, userId);

                        if (permState != null
                                && (permState.getFlags() & BLOCKING_PERMISSION_FLAGS) == 0) {
                            if (permState.isGranted()) {
                                permsState.updatePermissionFlags(bp, userId,
                                        USER_PERMISSION_FLAGS, 0);
                            }

                            if (appSupportsRuntimePermissions) {
                                permsState.revokeRuntimePermission(bp, userId);
                            } else {
                                // Force a review even for apps that were already installed
                                permsState.updatePermissionFlags(bp, userId,
                                        FLAG_PERMISSION_REVIEW_REQUIRED,
                                        FLAG_PERMISSION_REVIEW_REQUIRED);
                            }
                        }
                    }
                }
            }
        }
    }

    private void updatePermissions(String changingPkgName, PackageParser.Package changingPkg,
@@ -3148,10 +3097,9 @@ public class PermissionManagerService {
        }
        @Override
        public void updateAllPermissions(String volumeUuid, boolean sdkUpdated,
                boolean updatePermissionsOnPreQUpdate, Collection<PackageParser.Package> allPackages,
                PermissionCallback callback) {
                Collection<PackageParser.Package> allPackages, PermissionCallback callback) {
            PermissionManagerService.this.updateAllPermissions(
                    volumeUuid, sdkUpdated, updatePermissionsOnPreQUpdate, allPackages, callback);
                    volumeUuid, sdkUpdated, allPackages, callback);
        }
        @Override
        public String[] getAppOpPermissionPackages(String permName) {
+0 −1
Original line number Diff line number Diff line
@@ -93,7 +93,6 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
            @Nullable PackageParser.Package pkg, boolean replaceGrant,
            @NonNull Collection<PackageParser.Package> allPacakges, PermissionCallback callback);
    public abstract void updateAllPermissions(@Nullable String volumeUuid, boolean sdkUpdate,
            boolean updatePermissionsOnPreQUpdate,
            @NonNull Collection<PackageParser.Package> allPacakges, PermissionCallback callback);

    /**