Loading src/com/android/documentsui/ScopedAccessProvider.java +15 −6 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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"; Loading Loading @@ -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)); } Loading Loading @@ -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); } } } Loading src/com/android/documentsui/prefs/ScopedAccessLocalPreferences.java +9 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); /** Loading Loading @@ -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 + ")]"; } } Loading Loading
src/com/android/documentsui/ScopedAccessProvider.java +15 −6 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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"; Loading Loading @@ -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)); } Loading Loading @@ -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); } } } Loading
src/com/android/documentsui/prefs/ScopedAccessLocalPreferences.java +9 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); /** Loading Loading @@ -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 + ")]"; } } Loading