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

Commit 3bacad42 authored by Felipe Leme's avatar Felipe Leme
Browse files

Added column for volume UUID on ScopedAccessProvider.

Test: echo 'Not yet!'
Bug: 63720392

Change-Id: I5867c8cddd2e91388a698b494a02af562f906ac5
parent be868446
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -57,7 +57,9 @@ import java.util.stream.Collectors;
 * (column ({@link #COL_PACKAGE}) that had a scoped access directory permission granted or denied.
 * <li>{@link #TABLE_PERMISSIONS}: writable table with the name of all packages
 * (column ({@link #COL_PACKAGE}) that had a scoped access directory
 * (column ({@link #COL_DIRECTORY}) permission granted or denied (column ({@link #COL_GRANTED}).
 * (column ({@link #COL_DIRECTORY}) permission for a volume (column {@link #COL_VOLUME_UUID}, which
 * contains the volume UUID or {@code null} if it's the primary partition) granted or denied
 * (column ({@link #COL_GRANTED}).
 * </ul>
 *
 * <p><b>Note:</b> the {@code query()} methods return all entries; it does not support selection or
@@ -82,6 +84,7 @@ public class ScopedAccessProvider extends ContentProvider {

    // Columns
    private static final String COL_PACKAGE = "package_name";
    private static final String COL_VOLUME_UUID = "volume_uuid";
    private static final String COL_DIRECTORY = "directory";
    private static final String COL_GRANTED = "granted";

@@ -141,14 +144,16 @@ public class ScopedAccessProvider extends ContentProvider {
                .filter(permission -> permission.status == PERMISSION_ASK_AGAIN
                        || permission.status == PERMISSION_NEVER_ASK)
                .map(permission ->
                        new Object[] { permission.pkg, permission.directory, Integer.valueOf(1) })
                        new Object[] { permission.pkg, permission.uuid, permission.directory,
                                Integer.valueOf(1) })
                .collect(Collectors.toList());

        // TODO(b/63720392): also need to query AM for granted permissions

        // Then create the cursor
        final MatrixCursor cursor = new MatrixCursor(
                new String[] {COL_PACKAGE, COL_DIRECTORY, COL_GRANTED}, permissions.size());
                new String[] {COL_PACKAGE, COL_VOLUME_UUID, COL_DIRECTORY, COL_GRANTED},
                permissions.size());
        for (int i = 0; i < permissions.size(); i++) {
            cursor.addRow(permissions.get(i));
        }
@@ -219,9 +224,13 @@ public class ScopedAccessProvider extends ContentProvider {
            } else {
                pw.println(cursor.getCount());
                while (cursor.moveToNext()) {
                    pw.print(prefix); pw.print(cursor.getString(0));
                    pw.print(" / "); pw.print(cursor.getString(1));
                    pw.print(": "); pw.println(cursor.getInt(2) == 1);
                    pw.print(prefix); pw.print(cursor.getString(0)); pw.print('/');
                    final String uuid = cursor.getString(1);
                    if (uuid != null) {
                        pw.print(uuid); pw.print('>');
                    }
                    pw.print(cursor.getString(2));
                    pw.print(": "); pw.println(cursor.getInt(3) == 1);
                }
            }
        }
+9 −5
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.UserHandle;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;

@@ -56,7 +57,7 @@ public class ScopedAccessLocalPreferences {
    @Retention(RetentionPolicy.SOURCE)
    public @interface PermissionStatus {}

    private static final String KEY_REGEX = "^.+\\|(.+)\\|.*\\|(.+)$";
    private static final String KEY_REGEX = "^.+\\|(.+)\\|(.*)\\|(.+)$";
    private static final Pattern KEY_PATTERN = Pattern.compile(KEY_REGEX);

    /**
@@ -182,25 +183,28 @@ public class ScopedAccessLocalPreferences {
        if (!matcher.matches()) return null;

        final String pkg = matcher.group(1);
        final String directory = matcher.group(2);
        final String uuid = matcher.group(2);
        final String directory = matcher.group(3);

        return new Permission(pkg, directory, status);
        return new Permission(pkg, uuid, directory, status);
    }

    public static final class Permission {
        public final String pkg;
        public final String uuid;
        public final String directory;
        public final int status;

        private Permission(String pkg, String directory, Integer status) {
        private Permission(String pkg, String uuid, String directory, Integer status) {
            this.pkg = pkg;
            this.uuid = TextUtils.isEmpty(uuid) ? null : uuid;
            this.directory = directory;
            this.status = status.intValue();
        }

        @Override
        public String toString() {
            return "Permission: [pkg=" + pkg + ", dir=" + directory + ", status="
            return "Permission: [pkg=" + pkg + ", uuid=" + uuid + ", dir=" + directory + ", status="
                    + statusAsString(status) + " (" + status + ")]";
        }
    }