summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/downloads/DownloadProvider.java
diff options
context:
space:
mode:
authorSteve Howard <showard@google.com>2010-07-14 11:38:58 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-07-14 11:38:58 -0700
commit736f45c45b7c2b08814f70a5d23e2c8e7e09d1fa (patch)
tree05934e491639ac95aec1890417d45dfe6a747f63 /src/com/android/providers/downloads/DownloadProvider.java
parent6de02c9ee3b38bb0322839ac50d6d83b05f8c99e (diff)
parent2c80c37546b89dfd31875f6f6e977e9610cdb22b (diff)
downloadandroid_packages_providers_DownloadProvider-736f45c45b7c2b08814f70a5d23e2c8e7e09d1fa.tar.gz
android_packages_providers_DownloadProvider-736f45c45b7c2b08814f70a5d23e2c8e7e09d1fa.tar.bz2
android_packages_providers_DownloadProvider-736f45c45b7c2b08814f70a5d23e2c8e7e09d1fa.zip
am 2c80c375: am 6d9b9828: Support for file URI destinations + last modified timestamp
Merge commit '2c80c37546b89dfd31875f6f6e977e9610cdb22b' * commit '2c80c37546b89dfd31875f6f6e977e9610cdb22b': Support for file URI destinations + last modified timestamp
Diffstat (limited to 'src/com/android/providers/downloads/DownloadProvider.java')
-rw-r--r--src/com/android/providers/downloads/DownloadProvider.java23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java
index 20430cfa..4203f7d1 100644
--- a/src/com/android/providers/downloads/DownloadProvider.java
+++ b/src/com/android/providers/downloads/DownloadProvider.java
@@ -16,6 +16,8 @@
package com.android.providers.downloads;
+import com.google.common.annotations.VisibleForTesting;
+
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
@@ -110,6 +112,9 @@ public final class DownloadProvider extends ContentProvider {
private int mSystemUid = -1;
private int mDefContainerUid = -1;
+ @VisibleForTesting
+ SystemFacade mSystemFacade;
+
/**
* Creates and updated database on demand when opening it.
* Helper class to create database the first time the provider is
@@ -172,6 +177,10 @@ public final class DownloadProvider extends ContentProvider {
*/
@Override
public boolean onCreate() {
+ if (mSystemFacade == null) {
+ mSystemFacade = new RealSystemFacade();
+ }
+
mOpenHelper = new DatabaseHelper(getContext());
// Initialize the system uid
mSystemUid = Process.SYSTEM_UID;
@@ -294,9 +303,16 @@ public final class DownloadProvider extends ContentProvider {
if (getContext().checkCallingPermission(Downloads.Impl.PERMISSION_ACCESS_ADVANCED)
!= PackageManager.PERMISSION_GRANTED
&& dest != Downloads.Impl.DESTINATION_EXTERNAL
- && dest != Downloads.Impl.DESTINATION_CACHE_PARTITION_PURGEABLE) {
+ && dest != Downloads.Impl.DESTINATION_CACHE_PARTITION_PURGEABLE
+ && dest != Downloads.Impl.DESTINATION_FILE_URI) {
throw new SecurityException("unauthorized destination code");
}
+ if (dest == Downloads.Impl.DESTINATION_FILE_URI) {
+ getContext().enforcePermission(
+ android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ Binder.getCallingPid(), Binder.getCallingUid(),
+ "need WRITE_EXTERNAL_STORAGE permission to use DESTINATION_FILE_URI");
+ }
filteredValues.put(Downloads.Impl.COLUMN_DESTINATION, dest);
}
Integer vis = values.getAsInteger(Downloads.Impl.COLUMN_VISIBILITY);
@@ -313,7 +329,8 @@ public final class DownloadProvider extends ContentProvider {
}
copyInteger(Downloads.Impl.COLUMN_CONTROL, values, filteredValues);
filteredValues.put(Downloads.Impl.COLUMN_STATUS, Downloads.Impl.STATUS_PENDING);
- filteredValues.put(Downloads.Impl.COLUMN_LAST_MODIFICATION, System.currentTimeMillis());
+ filteredValues.put(Downloads.Impl.COLUMN_LAST_MODIFICATION,
+ mSystemFacade.currentTimeMillis());
String pckg = values.getAsString(Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE);
String clazz = values.getAsString(Downloads.Impl.COLUMN_NOTIFICATION_CLASS);
if (pckg != null && clazz != null) {
@@ -729,7 +746,7 @@ public final class DownloadProvider extends ContentProvider {
throw new FileNotFoundException("couldn't open file");
} else {
ContentValues values = new ContentValues();
- values.put(Downloads.Impl.COLUMN_LAST_MODIFICATION, System.currentTimeMillis());
+ values.put(Downloads.Impl.COLUMN_LAST_MODIFICATION, mSystemFacade.currentTimeMillis());
update(uri, values, null, null);
}
return ret;