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

Commit 6e84285b authored by Hai Zhang's avatar Hai Zhang
Browse files

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

Test: build
Fixes: 150877494
Change-Id: Ieca5f7a46241032f6722bb379fc08206b9600ddc
parent d944bcf2
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