Commit b3bdf1b3 authored by Finnur Thorarinsson's avatar Finnur Thorarinsson Committed by Commit Bot

Photo Picker: Further changes for Q SDK support.

The new permission they added in earlier betas has been removed and
a new RELATIVE_PATH column has been added, which replaces the DATA
column (being deprecated).

Bug: 905257, 656015

Change-Id: Ie30d234a031920fdb6487732c8d5a719267d9e21
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1602719
Commit-Queue: Finnur Thorarinsson <finnur@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#658511}
parent e5c6dafe
......@@ -48,9 +48,6 @@ by a child template that "extends" this file.
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
{% if target_sdk_version|int > 28 or target_sdk_version == "Q" %}
<uses-permission-sdk-23 android:name="android.permission.READ_MEDIA_IMAGES"/>
{% endif %}
<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
......
......@@ -70,9 +70,8 @@ class FileEnumWorkerTask extends AsyncTask<List<PickerBitmap>> {
/**
* Retrieves the DCIM/camera directory.
*/
private File getCameraDirectory() {
return new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),
SAMPLE_DCIM_SOURCE_SUB_DIRECTORY);
private String getCameraDirectory() {
return Environment.DIRECTORY_DCIM + File.separator + SAMPLE_DCIM_SOURCE_SUB_DIRECTORY;
}
/**
......@@ -88,37 +87,41 @@ class FileEnumWorkerTask extends AsyncTask<List<PickerBitmap>> {
List<PickerBitmap> pickerBitmaps = new ArrayList<>();
// The DATA column is deprecated in the Android Q SDK. Replaced by relative_path.
String directoryColumnName =
BuildInfo.isAtLeastQ() ? "relative_path" : MediaStore.Images.Media.DATA;
final String[] selectColumns = {MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATE_TAKEN, MediaStore.Images.Media.DATA};
MediaStore.Images.Media.DATE_TAKEN, directoryColumnName};
String whereClause = null;
String whereClause = "(" + directoryColumnName + " LIKE ? OR " + directoryColumnName
+ " LIKE ? OR " + directoryColumnName + " LIKE ?) AND " + directoryColumnName
+ " NOT LIKE ?";
String[] whereArgs = null;
// Looks like we loose access to the filter, starting with the Q SDK.
String cameraDir = getCameraDirectory();
String picturesDir = Environment.DIRECTORY_PICTURES;
String downloadsDir = Environment.DIRECTORY_DOWNLOADS;
String screenshotsDir = Environment.DIRECTORY_PICTURES + "/Screenshots";
if (!BuildInfo.isAtLeastQ()) {
whereClause = "(" + MediaStore.Images.Media.DATA + " LIKE ? OR "
+ MediaStore.Images.Media.DATA + " LIKE ? OR " + MediaStore.Images.Media.DATA
+ " LIKE ?) AND " + MediaStore.Images.Media.DATA + " NOT LIKE ?";
whereArgs = new String[] {
// Include:
getCameraDirectory().toString() + "%",
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
+ "%",
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
+ "%",
// Exclude low-quality sources, such as the screenshots directory:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
+ "/Screenshots/"
+ "%"};
cameraDir = Environment.getExternalStoragePublicDirectory(cameraDir).toString();
picturesDir = Environment.getExternalStoragePublicDirectory(picturesDir).toString();
downloadsDir = Environment.getExternalStoragePublicDirectory(downloadsDir).toString();
screenshotsDir =
Environment.getExternalStoragePublicDirectory(screenshotsDir).toString();
}
whereArgs = new String[] {
// Include:
cameraDir + "%", picturesDir + "%", downloadsDir + "%",
// Exclude low-quality sources, such as the screenshots directory:
screenshotsDir + "%"};
final String orderBy = MediaStore.Images.Media.DATE_TAKEN + " DESC";
Cursor imageCursor = mContentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
selectColumns, whereClause, whereArgs, orderBy);
while (imageCursor.moveToNext()) {
int dataIndex = imageCursor.getColumnIndex(MediaStore.Images.Media.DATA);
int dateTakenIndex = imageCursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);
int idIndex = imageCursor.getColumnIndex(MediaStore.Images.ImageColumns._ID);
Uri uri = ContentUris.withAppendedId(
......
......@@ -19,7 +19,6 @@ import android.provider.MediaStore;
import android.text.TextUtils;
import android.webkit.MimeTypeMap;
import org.chromium.base.BuildInfo;
import org.chromium.base.ContentUriUtils;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
......@@ -155,9 +154,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick
new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION));
List<String> missingPermissions = new ArrayList<>();
String storagePermission = BuildInfo.isAtLeastQ()
? "android.permission.READ_MEDIA_IMAGES"
: Manifest.permission.READ_EXTERNAL_STORAGE;
String storagePermission = Manifest.permission.READ_EXTERNAL_STORAGE;
boolean shouldUsePhotoPicker = shouldUsePhotoPicker();
if (shouldUsePhotoPicker) {
if (!window.hasPermission(storagePermission)) missingPermissions.add(storagePermission);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment