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

Commit e78597ec authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Added column for volume UUID on ScopedAccessProvider."

parents cc6a27cf 3bacad42
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 + ")]";
        }
    }