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

Commit a5de0eb5 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android Git Automerger
Browse files

am 7c5b5f71: Merge "Fix issue #22023824: Download folder is not created in...

am 7c5b5f71: Merge "Fix issue #22023824: Download folder is not created in internal storage" into mnc-dev

* commit '7c5b5f71':
  Fix issue #22023824: Download folder is not created in internal storage
parents 5805765d 7c5b5f71
Loading
Loading
Loading
Loading
+25 −0
Original line number Original line Diff line number Diff line
@@ -204,6 +204,10 @@ public final class Pm {
            return runGrantRevokePermission(false);
            return runGrantRevokePermission(false);
        }
        }


        if ("reset-permissions".equals(op)) {
            return runResetPermissions();
        }

        if ("set-permission-enforced".equals(op)) {
        if ("set-permission-enforced".equals(op)) {
            return runSetPermissionEnforced();
            return runSetPermissionEnforced();
        }
        }
@@ -1636,6 +1640,24 @@ public final class Pm {
        }
        }
    }
    }


    private int runResetPermissions() {
        try {
            mPm.resetRuntimePermissions();
            return 0;
        } catch (RemoteException e) {
            System.err.println(e.toString());
            System.err.println(PM_NOT_RUNNING_ERR);
            return 1;
        } catch (IllegalArgumentException e) {
            System.err.println("Bad argument: " + e.toString());
            showUsage();
            return 1;
        } catch (SecurityException e) {
            System.err.println("Operation not allowed: " + e.toString());
            return 1;
        }
    }

    private int runSetPermissionEnforced() {
    private int runSetPermissionEnforced() {
        final String permission = nextArg();
        final String permission = nextArg();
        if (permission == null) {
        if (permission == null) {
@@ -1911,6 +1933,7 @@ public final class Pm {
        System.err.println("       pm unhide [--user USER_ID] PACKAGE_OR_COMPONENT");
        System.err.println("       pm unhide [--user USER_ID] PACKAGE_OR_COMPONENT");
        System.err.println("       pm grant [--user USER_ID] PACKAGE PERMISSION");
        System.err.println("       pm grant [--user USER_ID] PACKAGE PERMISSION");
        System.err.println("       pm revoke [--user USER_ID] PACKAGE PERMISSION");
        System.err.println("       pm revoke [--user USER_ID] PACKAGE PERMISSION");
        System.err.println("       pm reset-permissions");
        System.err.println("       pm set-install-location [0/auto] [1/internal] [2/external]");
        System.err.println("       pm set-install-location [0/auto] [1/internal] [2/external]");
        System.err.println("       pm get-install-location");
        System.err.println("       pm get-install-location");
        System.err.println("       pm set-permission-enforced PERMISSION [true|false]");
        System.err.println("       pm set-permission-enforced PERMISSION [true|false]");
@@ -1988,6 +2011,8 @@ public final class Pm {
        System.err.println("    manifest, be runtime permissions (protection level dangerous),");
        System.err.println("    manifest, be runtime permissions (protection level dangerous),");
        System.err.println("    and the app targeting SDK greater than Lollipop MR1.");
        System.err.println("    and the app targeting SDK greater than Lollipop MR1.");
        System.err.println("");
        System.err.println("");
        System.err.println("pm reset-permissions: revert all runtime permissions to their default state.");
        System.err.println("");
        System.err.println("pm get-install-location: returns the current install location.");
        System.err.println("pm get-install-location: returns the current install location.");
        System.err.println("    0 [auto]: Let system decide the best location");
        System.err.println("    0 [auto]: Let system decide the best location");
        System.err.println("    1 [internal]: Install on internal device storage");
        System.err.println("    1 [internal]: Install on internal device storage");
+2 −0
Original line number Original line Diff line number Diff line
@@ -102,6 +102,8 @@ interface IPackageManager {


    void revokeRuntimePermission(String packageName, String permissionName, int userId);
    void revokeRuntimePermission(String packageName, String permissionName, int userId);


    void resetRuntimePermissions();

    int getPermissionFlags(String permissionName, String packageName, int userId);
    int getPermissionFlags(String permissionName, String packageName, int userId);


    void updatePermissionFlags(String permissionName, String packageName, int flagMask,
    void updatePermissionFlags(String permissionName, String packageName, int flagMask,
+37 −0
Original line number Original line Diff line number Diff line
@@ -17,11 +17,13 @@
package com.android.server.pm;
package com.android.server.pm;


import android.Manifest;
import android.Manifest;
import android.app.DownloadManager;
import android.content.Intent;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal.PackagesProvider;
import android.content.pm.PackageManagerInternal.PackagesProvider;
import android.content.pm.PackageParser;
import android.content.pm.PackageParser;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.net.Uri;
import android.os.Build;
import android.os.Build;
@@ -228,6 +230,7 @@ final class DefaultPermissionGrantPolicy {
            for (int i = 0; i < installerCount; i++) {
            for (int i = 0; i < installerCount; i++) {
                PackageParser.Package installPackage = installerPackages.get(i);
                PackageParser.Package installPackage = installerPackages.get(i);
                grantInstallPermissionsLPw(installPackage, INSTALLER_PERMISSIONS, userId);
                grantInstallPermissionsLPw(installPackage, INSTALLER_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(installPackage, STORAGE_PERMISSIONS, userId);
            }
            }


            // Verifiers
            // Verifiers
@@ -239,6 +242,7 @@ final class DefaultPermissionGrantPolicy {
            for (int i = 0; i < verifierCount; i++) {
            for (int i = 0; i < verifierCount; i++) {
                PackageParser.Package verifierPackage = verifierPackages.get(i);
                PackageParser.Package verifierPackage = verifierPackages.get(i);
                grantInstallPermissionsLPw(verifierPackage, VERIFIER_PERMISSIONS, userId);
                grantInstallPermissionsLPw(verifierPackage, VERIFIER_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(verifierPackage, STORAGE_PERMISSIONS, userId);
            }
            }


            // SetupWizard
            // SetupWizard
@@ -273,6 +277,30 @@ final class DefaultPermissionGrantPolicy {
                    && doesPackageSupportRuntimePermissions(cameraPackage)) {
                    && doesPackageSupportRuntimePermissions(cameraPackage)) {
                grantRuntimePermissionsLPw(cameraPackage, CAMERA_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(cameraPackage, CAMERA_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(cameraPackage, MICROPHONE_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(cameraPackage, MICROPHONE_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(cameraPackage, STORAGE_PERMISSIONS, userId);
            }

            // Media provider
            PackageParser.Package mediaStorePackage = getDefaultProviderAuthorityPackageLPr(
                    MediaStore.AUTHORITY, userId);
            if (mediaStorePackage != null) {
                grantRuntimePermissionsLPw(mediaStorePackage, STORAGE_PERMISSIONS, userId);
            }

            // Downloads provider
            PackageParser.Package downloadsPackage = getDefaultProviderAuthorityPackageLPr(
                    "downloads", userId);
            if (downloadsPackage != null) {
                grantRuntimePermissionsLPw(downloadsPackage, STORAGE_PERMISSIONS, userId);
            }

            // Downloads UI
            Intent downloadsUiIntent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS);
            PackageParser.Package downloadsUiPackage = getDefaultSystemHandlerActvityPackageLPr(
                    downloadsUiIntent, userId);
            if (downloadsUiPackage != null
                    && doesPackageSupportRuntimePermissions(downloadsUiPackage)) {
                grantRuntimePermissionsLPw(downloadsUiPackage, STORAGE_PERMISSIONS, userId);
            }
            }


            // Messaging
            // Messaging
@@ -452,6 +480,15 @@ final class DefaultPermissionGrantPolicy {
        return null;
        return null;
    }
    }


    private PackageParser.Package getDefaultProviderAuthorityPackageLPr(
            String authority, int userId) {
        ProviderInfo provider = mService.resolveContentProvider(authority, 0, userId);
        if (provider != null) {
            return getSystemPackageLPr(provider.packageName);
        }
        return null;
    }

    private PackageParser.Package getSystemPackageLPr(String packageName) {
    private PackageParser.Package getSystemPackageLPr(String packageName) {
        PackageParser.Package pkg = mService.mPackages.get(packageName);
        PackageParser.Package pkg = mService.mPackages.get(packageName);
        if (pkg != null && pkg.isSystemApp()) {
        if (pkg != null && pkg.isSystemApp()) {
+39 −4
Original line number Original line Diff line number Diff line
@@ -3339,6 +3339,27 @@ public class PackageManagerService extends IPackageManager.Stub {
        killSettingPackagesForUser(sb, userId, KILL_APP_REASON_PERMISSIONS_REVOKED);
        killSettingPackagesForUser(sb, userId, KILL_APP_REASON_PERMISSIONS_REVOKED);
    }
    }
    @Override
    public void resetRuntimePermissions() {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.GRANT_REVOKE_PERMISSIONS,
                "revokeRuntimePermission");
        int callingUid = Binder.getCallingUid();
        if (callingUid != Process.SYSTEM_UID && callingUid != 0) {
            mContext.enforceCallingOrSelfPermission(
                    android.Manifest.permission.INTERACT_ACROSS_USERS_FULL,
                    "resetRuntimePermissions");
        }
        synchronized (mPackages) {
            updatePermissionsLPw(null, null, UPDATE_PERMISSIONS_ALL);
            for (int userId : UserManagerService.getInstance().getUserIds()) {
                mDefaultPermissionPolicy.grantDefaultPermissions(userId);
            }
        }
    }
    @Override
    @Override
    public int getPermissionFlags(String name, String packageName, int userId) {
    public int getPermissionFlags(String name, String packageName, int userId) {
        if (!sUserManager.exists(userId)) {
        if (!sUserManager.exists(userId)) {
@@ -14190,6 +14211,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        boolean checkin = false;
        boolean checkin = false;
        String packageName = null;
        String packageName = null;
        ArraySet<String> permissionNames = null;
        int opti = 0;
        int opti = 0;
        while (opti < args.length) {
        while (opti < args.length) {
@@ -14213,6 +14235,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                pw.println("    k[eysets]: print known keysets");
                pw.println("    k[eysets]: print known keysets");
                pw.println("    r[esolvers]: dump intent resolvers");
                pw.println("    r[esolvers]: dump intent resolvers");
                pw.println("    perm[issions]: dump permissions");
                pw.println("    perm[issions]: dump permissions");
                pw.println("    permission [name ...]: dump declaration and use of given permission");
                pw.println("    pref[erred]: print preferred package settings");
                pw.println("    pref[erred]: print preferred package settings");
                pw.println("    preferred-xml [--full]: print preferred package settings as xml");
                pw.println("    preferred-xml [--full]: print preferred package settings as xml");
                pw.println("    prov[iders]: dump content providers");
                pw.println("    prov[iders]: dump content providers");
@@ -14254,6 +14277,18 @@ public class PackageManagerService extends IPackageManager.Stub {
                dumpState.setDump(DumpState.DUMP_RESOLVERS);
                dumpState.setDump(DumpState.DUMP_RESOLVERS);
            } else if ("perm".equals(cmd) || "permissions".equals(cmd)) {
            } else if ("perm".equals(cmd) || "permissions".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_PERMISSIONS);
                dumpState.setDump(DumpState.DUMP_PERMISSIONS);
            } else if ("permission".equals(cmd)) {
                if (opti >= args.length) {
                    pw.println("Error: permission requires permission name");
                    return;
                }
                permissionNames = new ArraySet<>();
                while (opti < args.length) {
                    permissionNames.add(args[opti]);
                    opti++;
                }
                dumpState.setDump(DumpState.DUMP_PERMISSIONS
                        | DumpState.DUMP_PACKAGES | DumpState.DUMP_SHARED_USERS);
            } else if ("pref".equals(cmd) || "preferred".equals(cmd)) {
            } else if ("pref".equals(cmd) || "preferred".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_PREFERRED);
                dumpState.setDump(DumpState.DUMP_PREFERRED);
            } else if ("preferred-xml".equals(cmd)) {
            } else if ("preferred-xml".equals(cmd)) {
@@ -14536,8 +14571,8 @@ public class PackageManagerService extends IPackageManager.Stub {
            }
            }
            if (!checkin && dumpState.isDumping(DumpState.DUMP_PERMISSIONS)) {
            if (!checkin && dumpState.isDumping(DumpState.DUMP_PERMISSIONS)) {
                mSettings.dumpPermissionsLPr(pw, packageName, dumpState);
                mSettings.dumpPermissionsLPr(pw, packageName, permissionNames, dumpState);
                if (packageName == null) {
                if (packageName == null && permissionNames == null) {
                    for (int iperm=0; iperm<mAppOpPermissionPackages.size(); iperm++) {
                    for (int iperm=0; iperm<mAppOpPermissionPackages.size(); iperm++) {
                        if (iperm == 0) {
                        if (iperm == 0) {
                            if (dumpState.onTitlePrinted())
                            if (dumpState.onTitlePrinted())
@@ -14597,11 +14632,11 @@ public class PackageManagerService extends IPackageManager.Stub {
            }
            }
            if (dumpState.isDumping(DumpState.DUMP_PACKAGES)) {
            if (dumpState.isDumping(DumpState.DUMP_PACKAGES)) {
                mSettings.dumpPackagesLPr(pw, packageName, dumpState, checkin);
                mSettings.dumpPackagesLPr(pw, packageName, permissionNames, dumpState, checkin);
            }
            }
            if (dumpState.isDumping(DumpState.DUMP_SHARED_USERS)) {
            if (dumpState.isDumping(DumpState.DUMP_SHARED_USERS)) {
                mSettings.dumpSharedUsersLPr(pw, packageName, dumpState, checkin);
                mSettings.dumpSharedUsersLPr(pw, packageName, permissionNames, dumpState, checkin);
            }
            }
            if (!checkin && dumpState.isDumping(DumpState.DUMP_INSTALLS) && packageName == null) {
            if (!checkin && dumpState.isDumping(DumpState.DUMP_INSTALLS) && packageName == null) {
+17 −1
Original line number Original line Diff line number Diff line
@@ -218,6 +218,22 @@ public final class PermissionsState {
        return permissionData != null && permissionData.isGranted(userId);
        return permissionData != null && permissionData.isGranted(userId);
    }
    }


    /**
     * Returns whether the state has any known request for the given permission name,
     * whether or not it has been granted.
     */
    public boolean hasRequestedPermission(ArraySet<String> names) {
        if (mPermissions == null) {
            return false;
        }
        for (int i=names.size()-1; i>=0; i--) {
            if (mPermissions.get(names.valueAt(i)) != null) {
                return true;
            }
        }
        return false;
    }

    /**
    /**
     * Gets all permissions for a given device user id regardless if they
     * Gets all permissions for a given device user id regardless if they
     * are install time or runtime permissions.
     * are install time or runtime permissions.
Loading