summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorSudheer Shanka <sudheersai@google.com>2019-01-30 18:22:02 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-01-30 18:22:02 +0000
commitcf165b88b2b96f4947fa85e76c16be491dac8e5d (patch)
tree9e6feaa61648b99d7e5b0340beebd18c95f9b33d /src/com/android
parentb8a29fe1197577062843960c3fb85f6307279dca (diff)
parent5bf5cedcfbe27ae6febbc3871fdcc97494d3cfe6 (diff)
downloadandroid_packages_providers_DownloadProvider-cf165b88b2b96f4947fa85e76c16be491dac8e5d.tar.gz
android_packages_providers_DownloadProvider-cf165b88b2b96f4947fa85e76c16be491dac8e5d.tar.bz2
android_packages_providers_DownloadProvider-cf165b88b2b96f4947fa85e76c16be491dac8e5d.zip
Merge "Don't ignore COLUMN_MEDIA_SCANNED values from caller."
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/providers/downloads/DownloadInfo.java2
-rw-r--r--src/com/android/providers/downloads/DownloadProvider.java54
-rw-r--r--src/com/android/providers/downloads/DownloadScanner.java12
-rw-r--r--src/com/android/providers/downloads/DownloadThread.java7
4 files changed, 48 insertions, 27 deletions
diff --git a/src/com/android/providers/downloads/DownloadInfo.java b/src/com/android/providers/downloads/DownloadInfo.java
index bf9b08bf..a414bd86 100644
--- a/src/com/android/providers/downloads/DownloadInfo.java
+++ b/src/com/android/providers/downloads/DownloadInfo.java
@@ -447,7 +447,7 @@ public class DownloadInfo {
* Returns whether a file should be scanned
*/
public boolean shouldScanFile(int status) {
- return (mMediaScanned == 0)
+ return (mMediaScanned == Downloads.Impl.MEDIA_NOT_SCANNED)
&& (mDestination == Downloads.Impl.DESTINATION_EXTERNAL ||
mDestination == Downloads.Impl.DESTINATION_FILE_URI ||
mDestination == Downloads.Impl.DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD)
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java
index 55fa2a31..b4a28182 100644
--- a/src/com/android/providers/downloads/DownloadProvider.java
+++ b/src/com/android/providers/downloads/DownloadProvider.java
@@ -21,8 +21,12 @@ import static android.os.Binder.getCallingUid;
import static android.provider.BaseColumns._ID;
import static android.provider.Downloads.Impl.COLUMN_DESTINATION;
import static android.provider.Downloads.Impl.COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI;
+import static android.provider.Downloads.Impl.COLUMN_MEDIA_SCANNED;
import static android.provider.Downloads.Impl.COLUMN_OTHER_UID;
import static android.provider.Downloads.Impl.DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD;
+import static android.provider.Downloads.Impl.MEDIA_NOT_SCANNABLE;
+import static android.provider.Downloads.Impl.MEDIA_NOT_SCANNED;
+import static android.provider.Downloads.Impl.MEDIA_SCANNED;
import static android.provider.Downloads.Impl.PERMISSION_ACCESS_ALL;
import android.annotation.NonNull;
@@ -671,7 +675,6 @@ public final class DownloadProvider extends ContentProvider {
filteredValues.put(Downloads.Impl.COLUMN_TOTAL_BYTES,
values.getAsLong(Downloads.Impl.COLUMN_TOTAL_BYTES));
filteredValues.put(Downloads.Impl.COLUMN_CURRENT_BYTES, 0);
- copyInteger(Downloads.Impl.COLUMN_MEDIA_SCANNED, values, filteredValues);
copyString(Downloads.Impl._DATA, values, filteredValues);
copyBoolean(Downloads.Impl.COLUMN_ALLOW_WRITE, values, filteredValues);
} else {
@@ -738,32 +741,41 @@ public final class DownloadProvider extends ContentProvider {
copyInteger(Downloads.Impl.COLUMN_FLAGS, values, filteredValues);
}
- if (Constants.LOGVV) {
- Log.v(Constants.TAG, "initiating download with UID "
- + filteredValues.getAsInteger(Constants.UID));
- if (filteredValues.containsKey(Downloads.Impl.COLUMN_OTHER_UID)) {
- Log.v(Constants.TAG, "other UID " +
- filteredValues.getAsInteger(Downloads.Impl.COLUMN_OTHER_UID));
- }
- }
+ final Integer mediaScanned = values.getAsInteger(Downloads.Impl.COLUMN_MEDIA_SCANNED);
+ filteredValues.put(COLUMN_MEDIA_SCANNED,
+ mediaScanned == null ? MEDIA_NOT_SCANNED : mediaScanned);
- if (values.getAsInteger(COLUMN_DESTINATION) == DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD
- && values.getAsBoolean(COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI)) {
+ final boolean shouldBeVisibleToUser
+ = filteredValues.getAsBoolean(COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI)
+ || filteredValues.getAsInteger(COLUMN_MEDIA_SCANNED) == MEDIA_NOT_SCANNED;
+ if (shouldBeVisibleToUser && filteredValues.getAsInteger(COLUMN_DESTINATION)
+ == DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD) {
final CallingIdentity token = clearCallingIdentity();
try (ContentProviderClient client = getContext().getContentResolver()
.acquireContentProviderClient(MediaStore.AUTHORITY)) {
final Uri mediaStoreUri = updateMediaProvider(client, null,
convertToMediaProviderValues(filteredValues));
if (mediaStoreUri != null) {
- filteredValues.put(Downloads.Impl.COLUMN_MEDIAPROVIDER_URI,
- mediaStoreUri.toString());
filteredValues.put(Downloads.Impl.COLUMN_MEDIASTORE_URI,
mediaStoreUri.toString());
+ filteredValues.put(Downloads.Impl.COLUMN_MEDIAPROVIDER_URI,
+ mediaStoreUri.toString());
+ filteredValues.put(COLUMN_MEDIA_SCANNED, MEDIA_SCANNED);
}
} finally {
restoreCallingIdentity(token);
}
}
+
+ if (Constants.LOGVV) {
+ Log.v(Constants.TAG, "initiating download with UID "
+ + filteredValues.getAsInteger(Constants.UID));
+ if (filteredValues.containsKey(Downloads.Impl.COLUMN_OTHER_UID)) {
+ Log.v(Constants.TAG, "other UID " +
+ filteredValues.getAsInteger(Downloads.Impl.COLUMN_OTHER_UID));
+ }
+ }
+
long rowID = db.insert(DB_TABLE, null, filteredValues);
if (rowID == -1) {
Log.d(Constants.TAG, "couldn't insert into downloads database");
@@ -864,7 +876,7 @@ public final class DownloadProvider extends ContentProvider {
mediaValues.put(MediaStore.Downloads.MIME_TYPE, info.mMimeType);
mediaValues.put(MediaStore.Downloads.IS_PENDING,
Downloads.Impl.isStatusSuccess(info.mStatus) ? 0 : 1);
- mediaValues.put(Files.FileColumns.IS_DOWNLOAD, info.mIsVisibleInDownloadsUi ? 1 : 0);
+ mediaValues.put(Files.FileColumns.IS_DOWNLOAD, 1);
return mediaValues;
}
@@ -1473,6 +1485,8 @@ public final class DownloadProvider extends ContentProvider {
final ContentValues updateValues = new ContentValues();
while (cursor.moveToNext()) {
reader.updateFromDatabase(info);
+ final boolean visibleToUser = info.mIsVisibleInDownloadsUi
+ || (info.mMediaScanned != MEDIA_NOT_SCANNABLE);
if (info.mFileName == null) {
if (info.mMediaStoreUri != null) {
client.delete(Uri.parse(info.mMediaStoreUri), null, null);
@@ -1481,10 +1495,11 @@ public final class DownloadProvider extends ContentProvider {
qb.update(db, updateValues, Downloads.Impl._ID + "=?",
new String[] { Long.toString(info.mId) });
}
- } else if (info.mDestination == Downloads.Impl.DESTINATION_EXTERNAL
+ } else if ((info.mDestination == Downloads.Impl.DESTINATION_EXTERNAL
|| info.mDestination == Downloads.Impl.DESTINATION_FILE_URI
|| info.mDestination == Downloads.Impl
- .DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD) {
+ .DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD)
+ && visibleToUser) {
final Uri mediaStoreUri = updateMediaProvider(client,
info.mMediaStoreUri, convertToMediaProviderValues(info));
if (!TextUtils.equals(info.mMediaStoreUri,
@@ -1492,9 +1507,14 @@ public final class DownloadProvider extends ContentProvider {
updateValues.clear();
if (mediaStoreUri == null) {
updateValues.putNull(Downloads.Impl.COLUMN_MEDIASTORE_URI);
+ updateValues.putNull(Downloads.Impl.COLUMN_MEDIAPROVIDER_URI);
+ updateValues.put(COLUMN_MEDIA_SCANNED, MEDIA_NOT_SCANNED);
} else {
updateValues.put(Downloads.Impl.COLUMN_MEDIASTORE_URI,
mediaStoreUri.toString());
+ updateValues.put(Downloads.Impl.COLUMN_MEDIAPROVIDER_URI,
+ mediaStoreUri.toString());
+ updateValues.put(COLUMN_MEDIA_SCANNED, MEDIA_SCANNED);
}
qb.update(db, updateValues, Downloads.Impl._ID + "=?",
new String[] { Long.toString(info.mId) });
@@ -1738,7 +1758,7 @@ public final class DownloadProvider extends ContentProvider {
destination == Downloads.Impl.DESTINATION_EXTERNAL
|| destination == Downloads.Impl.DESTINATION_FILE_URI
|| destination == Downloads.Impl.DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD)
- && mediaScanned != 2;
+ && mediaScanned != Downloads.Impl.MEDIA_NOT_SCANNABLE;
} else {
throw new FileNotFoundException("Failed moveToFirst");
}
diff --git a/src/com/android/providers/downloads/DownloadScanner.java b/src/com/android/providers/downloads/DownloadScanner.java
index 4a5ba87e..a4ec0ba8 100644
--- a/src/com/android/providers/downloads/DownloadScanner.java
+++ b/src/com/android/providers/downloads/DownloadScanner.java
@@ -156,13 +156,19 @@ public class DownloadScanner implements MediaScannerConnectionClient {
return;
}
+ // File got deleted while waiting for it to be mediascanned.
+ if (uri == null) {
+ if (mLatch != null) {
+ mLatch.countDown();
+ }
+ return;
+ }
+
// Update scanned column, which will kick off a database update pass,
// eventually deciding if overall service is ready for teardown.
final ContentValues values = new ContentValues();
values.put(Downloads.Impl.COLUMN_MEDIA_SCANNED, 1);
- if (uri != null) {
- values.put(Downloads.Impl.COLUMN_MEDIAPROVIDER_URI, uri.toString());
- }
+ values.put(Downloads.Impl.COLUMN_MEDIAPROVIDER_URI, uri.toString());
final ContentResolver resolver = mContext.getContentResolver();
final Uri downloadUri = ContentUris.withAppendedId(
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java
index 54cc1a5d..bc7997f6 100644
--- a/src/com/android/providers/downloads/DownloadThread.java
+++ b/src/com/android/providers/downloads/DownloadThread.java
@@ -388,12 +388,7 @@ public class DownloadThread extends Thread {
}
boolean needsReschedule = false;
- if (Downloads.Impl.isStatusCompleted(mInfoDelta.mStatus)) {
- if (mInfo.shouldScanFile(mInfoDelta.mStatus)) {
- DownloadScanner.requestScanBlocking(mContext, mInfo.mId, mInfoDelta.mFileName,
- mInfoDelta.mMimeType);
- }
- } else if (mInfoDelta.mStatus == STATUS_WAITING_TO_RETRY
+ if (mInfoDelta.mStatus == STATUS_WAITING_TO_RETRY
|| mInfoDelta.mStatus == STATUS_WAITING_FOR_NETWORK
|| mInfoDelta.mStatus == STATUS_QUEUED_FOR_WIFI) {
needsReschedule = true;