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

Commit b90f0f26 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "DO NOT MERGE Implement suggested changes in API review for permission...

Merge "DO NOT MERGE Implement suggested changes in API review for permission mainline." into rvc-dev am: a865f9e1 am: 59f9a0ec am: af2d200f

Change-Id: Ic4a76f9d9c706a63bf74be7ca1cc036da3da1494
parents 6baa57c1 af2d200f
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ public interface RuntimePermissionsPersistence {
     * @return the runtime permissions read
     */
    @Nullable
    RuntimePermissionsState readAsUser(@NonNull UserHandle user);
    RuntimePermissionsState readForUser(@NonNull UserHandle user);

    /**
     * Write the runtime permissions to persistence.
@@ -50,7 +50,8 @@ public interface RuntimePermissionsPersistence {
     * @param runtimePermissions the runtime permissions to write
     * @param user the user to write for
     */
    void writeAsUser(@NonNull RuntimePermissionsState runtimePermissions, @NonNull UserHandle user);
    void writeForUser(@NonNull RuntimePermissionsState runtimePermissions,
            @NonNull UserHandle user);

    /**
     * Delete the runtime permissions from persistence.
@@ -59,7 +60,7 @@ public interface RuntimePermissionsPersistence {
     *
     * @param user the user to delete for
     */
    void deleteAsUser(@NonNull UserHandle user);
    void deleteForUser(@NonNull UserHandle user);

    /**
     * Create a new instance of {@link RuntimePermissionsPersistence} implementation.
+3 −3
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ public class RuntimePermissionsPersistenceImpl implements RuntimePermissionsPers

    @Nullable
    @Override
    public RuntimePermissionsState readAsUser(@NonNull UserHandle user) {
    public RuntimePermissionsState readForUser(@NonNull UserHandle user) {
        File file = getFile(user);
        try (FileInputStream inputStream = new AtomicFile(file).openRead()) {
            XmlPullParser parser = Xml.newPullParser();
@@ -172,7 +172,7 @@ public class RuntimePermissionsPersistenceImpl implements RuntimePermissionsPers
    }

    @Override
    public void writeAsUser(@NonNull RuntimePermissionsState runtimePermissions,
    public void writeForUser(@NonNull RuntimePermissionsState runtimePermissions,
            @NonNull UserHandle user) {
        File file = getFile(user);
        AtomicFile atomicFile = new AtomicFile(file);
@@ -252,7 +252,7 @@ public class RuntimePermissionsPersistenceImpl implements RuntimePermissionsPers
    }

    @Override
    public void deleteAsUser(@NonNull UserHandle user) {
    public void deleteForUser(@NonNull UserHandle user) {
        getFile(user).delete();
    }

+93 −3
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.annotation.SystemApi.Client;

import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * State of all runtime permissions.
@@ -61,6 +62,14 @@ public final class RuntimePermissionsState {
    @NonNull
    private final Map<String, List<PermissionState>> mSharedUserPermissions;

    /**
     * Create a new instance of this class.
     *
     * @param version the version of the runtime permissions
     * @param fingerprint the fingerprint of the runtime permissions
     * @param packagePermissions the runtime permissions by packages
     * @param sharedUserPermissions the runtime permissions by shared users
     */
    public RuntimePermissionsState(int version, @Nullable String fingerprint,
            @NonNull Map<String, List<PermissionState>> packagePermissions,
            @NonNull Map<String, List<PermissionState>> sharedUserPermissions) {
@@ -70,32 +79,72 @@ public final class RuntimePermissionsState {
        mSharedUserPermissions = sharedUserPermissions;
    }

    /**
     * Get the version of the runtime permissions.
     *
     * @return the version of the runtime permissions
     */
    public int getVersion() {
        return mVersion;
    }

    /**
     * Get the fingerprint of the runtime permissions.
     *
     * @return the fingerprint of the runtime permissions
     */
    @Nullable
    public String getFingerprint() {
        return mFingerprint;
    }

    /**
     * Get the runtime permissions by packages.
     *
     * @return the runtime permissions by packages
     */
    @NonNull
    public Map<String, List<PermissionState>> getPackagePermissions() {
        return mPackagePermissions;
    }

    /**
     * Get the runtime permissions by shared users.
     *
     * @return the runtime permissions by shared users
     */
    @NonNull
    public Map<String, List<PermissionState>> getSharedUserPermissions() {
        return mSharedUserPermissions;
    }

    @Override
    public boolean equals(Object object) {
        if (this == object) {
            return true;
        }
        if (object == null || getClass() != object.getClass()) {
            return false;
        }
        RuntimePermissionsState that = (RuntimePermissionsState) object;
        return mVersion == that.mVersion
                && Objects.equals(mFingerprint, that.mFingerprint)
                && Objects.equals(mPackagePermissions, that.mPackagePermissions)
                && Objects.equals(mSharedUserPermissions, that.mSharedUserPermissions);
    }

    @Override
    public int hashCode() {
        return Objects.hash(mVersion, mFingerprint, mPackagePermissions, mSharedUserPermissions);
    }

    /**
     * State of a single permission.
     */
    public static class PermissionState {
    public static final class PermissionState {

        /**
         * Name of the permission.
         * The name of the permission.
         */
        @NonNull
        private final String mName;
@@ -106,27 +155,68 @@ public final class RuntimePermissionsState {
        private final boolean mGranted;

        /**
         * Flags of the permission.
         * The flags of the permission.
         */
        private final int mFlags;

        /**
         * Create a new instance of this class.
         *
         * @param name the name of the permission
         * @param granted whether the permission is granted
         * @param flags the flags of the permission
         */
        public PermissionState(@NonNull String name, boolean granted, int flags) {
            mName = name;
            mGranted = granted;
            mFlags = flags;
        }

        /**
         * Get the name of the permission.
         *
         * @return the name of the permission
         */
        @NonNull
        public String getName() {
            return mName;
        }

        /**
         * Get whether the permission is granted.
         *
         * @return whether the permission is granted
         */
        public boolean isGranted() {
            return mGranted;
        }

        /**
         * Get the flags of the permission.
         *
         * @return the flags of the permission
         */
        public int getFlags() {
            return mFlags;
        }

        @Override
        public boolean equals(Object object) {
            if (this == object) {
                return true;
            }
            if (object == null || getClass() != object.getClass()) {
                return false;
            }
            PermissionState that = (PermissionState) object;
            return mGranted == that.mGranted
                    && mFlags == that.mFlags
                    && Objects.equals(mName, that.mName);
        }

        @Override
        public int hashCode() {
            return Objects.hash(mName, mGranted, mFlags);
        }
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ public interface RolesPersistence {
     * @return the roles read
     */
    @Nullable
    RolesState readAsUser(@NonNull UserHandle user);
    RolesState readForUser(@NonNull UserHandle user);

    /**
     * Write the roles to persistence.
@@ -50,7 +50,7 @@ public interface RolesPersistence {
     * @param roles the roles to write
     * @param user the user to write for
     */
    void writeAsUser(@NonNull RolesState roles, @NonNull UserHandle user);
    void writeForUser(@NonNull RolesState roles, @NonNull UserHandle user);

    /**
     * Delete the roles from persistence.
@@ -59,7 +59,7 @@ public interface RolesPersistence {
     *
     * @param user the user to delete for
     */
    void deleteAsUser(@NonNull UserHandle user);
    void deleteForUser(@NonNull UserHandle user);

    /**
     * Create a new instance of {@link RolesPersistence} implementation.
+3 −3
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ public class RolesPersistenceImpl implements RolesPersistence {

    @Nullable
    @Override
    public RolesState readAsUser(@NonNull UserHandle user) {
    public RolesState readForUser(@NonNull UserHandle user) {
        File file = getFile(user);
        try (FileInputStream inputStream = new AtomicFile(file).openRead()) {
            XmlPullParser parser = Xml.newPullParser();
@@ -146,7 +146,7 @@ public class RolesPersistenceImpl implements RolesPersistence {
    }

    @Override
    public void writeAsUser(@NonNull RolesState roles, @NonNull UserHandle user) {
    public void writeForUser(@NonNull RolesState roles, @NonNull UserHandle user) {
        File file = getFile(user);
        AtomicFile atomicFile = new AtomicFile(file);
        FileOutputStream outputStream = null;
@@ -205,7 +205,7 @@ public class RolesPersistenceImpl implements RolesPersistence {
    }

    @Override
    public void deleteAsUser(@NonNull UserHandle user) {
    public void deleteForUser(@NonNull UserHandle user) {
        getFile(user).delete();
    }

Loading