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

Commit 0d5d43c7 authored by Philip P. Moltmann's avatar Philip P. Moltmann Committed by Android (Google) Code Review
Browse files

Merge changes from topic "AlwaysExpandLocationQ" into qt-dev

* changes:
  Do not modify location perms on upgrade
  Only update permissions of one app
parents e945aa8b d11400ac
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();
@@ -21222,8 +21222,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
@@ -22213,8 +22213,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();
@@ -23247,7 +23247,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);
        }
    }
+6 −60
Original line number Diff line number Diff line
@@ -34,10 +34,10 @@ import static android.content.pm.PackageManager.FLAG_PERMISSION_REVOKE_WHEN_REQU
import static android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED;
import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET;
import static android.content.pm.PackageManager.MASK_PERMISSION_FLAGS_ALL;
import static android.content.pm.PackageManager.FLAG_PERMISSION_WHITELIST_INSTALLER;
import static android.content.pm.PackageManager.FLAG_PERMISSION_WHITELIST_SYSTEM;
import static android.content.pm.PackageManager.FLAG_PERMISSION_WHITELIST_UPGRADE;
import static android.content.pm.PackageManager.MASK_PERMISSION_FLAGS_ALL;
import static android.content.pm.PackageManager.RESTRICTED_PERMISSIONS_ENABLED;
import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
import static android.os.UserHandle.getAppId;
@@ -69,7 +69,6 @@ import android.content.pm.PermissionInfo;
import android.metrics.LogMaker;
import android.os.Binder;
import android.os.Build;
import android.os.Debug;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Process;
@@ -82,7 +81,6 @@ import android.os.storage.StorageManagerInternal;
import android.permission.PermissionControllerManager;
import android.permission.PermissionManager;
import android.permission.PermissionManagerInternal;
import android.provider.Settings;
import android.permission.PermissionManagerInternal.OnRuntimePermissionStateChangedListener;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -2458,9 +2456,8 @@ public class PermissionManagerService {
        }

        if (updatePermissions) {
            // Update app permissions to take into account the new whitelist state.
            updatePermissions(pkg.packageName, pkg, getVolumeUuidForPackage(pkg),
                    0 /*flags*/, null /*allPackages*/, callback);
            // Update permission of this app to take into account the new whitelist state.
            restorePermissionState(pkg, false, pkg.packageName, callback);

            // If this resulted in losing a permission we need to kill the app.
            if (oldGrantedRestrictedPermissions != null) {
@@ -2605,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,
@@ -3150,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);

    /**