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

Commit 9cc4f43c 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:
  Expand location permissions on upgrade
  Remove code resetting the loc perm on upgrade
parents e2cb18be 941f867c
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -20,11 +20,9 @@ import static android.content.Context.MODE_PRIVATE;
import static android.content.pm.PackageManager.FLAG_PERMISSION_POLICY_FIXED;
import static android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
import static android.content.pm.PackageManager.GET_PERMISSIONS;
import static android.provider.Settings.Secure.LOCATION_PERMISSIONS_UPGRADE_TO_Q_MODE;
import static android.util.Xml.newSerializer;

import static com.android.packageinstaller.Constants.DELAYED_RESTORE_PERMISSIONS_FILE;
import static com.android.packageinstaller.permission.utils.Utils.getGroupOfPlatformPermission;

import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
import static org.xmlpull.v1.XmlPullParser.END_TAG;
@@ -32,7 +30,6 @@ import static org.xmlpull.v1.XmlPullParser.START_TAG;

import static java.nio.charset.StandardCharsets.UTF_8;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -40,8 +37,6 @@ import android.os.Build;
import android.os.UserHandle;
import android.permission.PermissionManager;
import android.permission.PermissionManager.SplitPermissionInfo;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.util.Xml;

@@ -62,7 +57,6 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
@@ -415,15 +409,6 @@ public class BackupHelper {
                        + ATTR_PERMISSION_NAME);
            }

            // Clear location permission on upgrade to Q or later
            String group = getGroupOfPlatformPermission(permName);
            if (backupPlatformVersion < Build.VERSION_CODES.Q && TextUtils.equals(group,
                    Manifest.permission_group.LOCATION)
                    && Settings.Secure.getInt(context.getContentResolver(),
                    LOCATION_PERMISSIONS_UPGRADE_TO_Q_MODE, 0) == 0) {
                return Collections.emptyList();
            }

            ArrayList<String> expandedPermissions = new ArrayList<>();
            expandedPermissions.add(permName);

+45 −7
Original line number Diff line number Diff line
@@ -21,10 +21,12 @@ import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.permission.PermissionManager;
import android.text.TextUtils;
import android.util.Log;

import androidx.annotation.NonNull;

import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.utils.Utils;

import java.util.List;
@@ -33,9 +35,10 @@ import java.util.List;
 * This class handles upgrading the runtime permissions database
 */
class RuntimePermissionsUpgradeController {
    private static final String LOG_TAG = RuntimePermissionsUpgradeController.class.getSimpleName();

    // The latest version of the runtime permissions database
    private static final int LATEST_VERSION = 1;
    private static final int LATEST_VERSION = 2;

    private RuntimePermissionsUpgradeController() {
        /* do nothing - hide constructor */
@@ -70,18 +73,19 @@ class RuntimePermissionsUpgradeController {
     * @param currentVersion The current db version.
     */
    private static int onUpgradeLocked(@NonNull Context context, int currentVersion) {
        // Grandfather SMS and CallLog permissions.
        final List<PackageInfo> apps = context.getPackageManager()
                .getInstalledPackages(PackageManager.MATCH_ALL
                        | PackageManager.GET_PERMISSIONS);
        final int appCount = apps.size();

        if (currentVersion <= 0) {
            Log.i(LOG_TAG, "Grandfathering SMS and CallLog permissions");

            final List<String> smsPermissions = Utils.getPlatformPermissionNamesOfGroup(
                    android.Manifest.permission_group.SMS);
            final List<String> callLogPermissions = Utils.getPlatformPermissionNamesOfGroup(
                    Manifest.permission_group.CALL_LOG);

            final List<PackageInfo> apps = context.getPackageManager()
                    .getInstalledPackages(PackageManager.MATCH_ALL
                            | PackageManager.GET_PERMISSIONS);

            final int appCount = apps.size();
            for (int i = 0; i < appCount; i++) {
                final PackageInfo app = apps.get(i);
                if (app.requestedPermissions == null) {
@@ -100,6 +104,40 @@ class RuntimePermissionsUpgradeController {
            currentVersion = 1;
        }

        if (currentVersion <= 1) {
            Log.i(LOG_TAG, "Expanding location permissions");

            for (int i = 0; i < appCount; i++) {
                final PackageInfo app = apps.get(i);
                if (app.requestedPermissions == null) {
                    continue;
                }

                for (String perm : app.requestedPermissions) {
                    String groupName = Utils.getGroupOfPlatformPermission(perm);

                    if (!TextUtils.equals(groupName, Manifest.permission_group.LOCATION)) {
                        continue;
                    }

                    final AppPermissionGroup group = AppPermissionGroup.create(context, app, perm,
                            false);
                    final AppPermissionGroup bgGroup = group.getBackgroundPermissions();

                    if (group.areRuntimePermissionsGranted()
                            && bgGroup != null
                            && !bgGroup.isUserSet() && !bgGroup.isSystemFixed()
                            && !bgGroup.isPolicyFixed()) {
                        bgGroup.grantRuntimePermissions(group.isUserFixed());
                    }

                    break;
                }
            }

            currentVersion = 2;
        }

        // XXX: Add new upgrade steps above this point.

        return currentVersion;