summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeon Scroggins <scroggo@google.com>2010-01-22 09:35:34 -0500
committerLeon Scroggins <scroggo@google.com>2010-01-22 09:39:07 -0500
commit581abbbbeba49e64219e5f11f8a8474760a2f902 (patch)
treeaf303eb84ae79ec25c967c7d843e4e7ccfd50e27
parent4d3a380d338b1f6ee120fb9de2001f138be398ff (diff)
downloadandroid_packages_providers_DownloadProvider-581abbbbeba49e64219e5f11f8a8474760a2f902.tar.gz
android_packages_providers_DownloadProvider-581abbbbeba49e64219e5f11f8a8474760a2f902.tar.bz2
android_packages_providers_DownloadProvider-581abbbbeba49e64219e5f11f8a8474760a2f902.zip
Revert "Download files even if there is no activity to launch them."
This reverts commit 0f1aae327a9e4c68044d767e9bafbac747b6d985. I misunderstood the bug. We do not want to be able to download files for which there is currently no Activity to launch them.
-rw-r--r--src/com/android/providers/downloads/DownloadNotification.java13
-rw-r--r--src/com/android/providers/downloads/DownloadService.java39
-rw-r--r--src/com/android/providers/downloads/Helpers.java27
3 files changed, 68 insertions, 11 deletions
diff --git a/src/com/android/providers/downloads/DownloadNotification.java b/src/com/android/providers/downloads/DownloadNotification.java
index 4c7cec4e..abd975bc 100644
--- a/src/com/android/providers/downloads/DownloadNotification.java
+++ b/src/com/android/providers/downloads/DownloadNotification.java
@@ -21,7 +21,6 @@ import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.provider.Downloads;
@@ -235,8 +234,7 @@ class DownloadNotification {
Downloads.Impl.COLUMN_STATUS,
Downloads.Impl._DATA,
Downloads.Impl.COLUMN_LAST_MODIFICATION,
- Downloads.Impl.COLUMN_DESTINATION,
- Downloads.Impl.COLUMN_MIME_TYPE
+ Downloads.Impl.COLUMN_DESTINATION
},
WHERE_COMPLETED, null, Downloads.Impl._ID);
@@ -256,7 +254,6 @@ class DownloadNotification {
final int filenameColumnId = 8;
final int lastModColumnId = 9;
final int destinationColumnId = 10;
- final int mimeTypeColumnId = 11;
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
// Add the notifications
@@ -285,13 +282,7 @@ class DownloadNotification {
} else {
caption = mContext.getResources()
.getString(R.string.notification_download_complete);
- if (c.getInt(destinationColumnId) == Downloads.Impl.DESTINATION_EXTERNAL
- // If there is no Activity to view the file, show the
- // list
- && null != mContext.getPackageManager().resolveActivity(
- new Intent().setDataAndType(Uri.fromParts("file", "",
- null), c.getString(mimeTypeColumnId)),
- PackageManager.MATCH_DEFAULT_ONLY)) {
+ if (c.getInt(destinationColumnId) == Downloads.Impl.DESTINATION_EXTERNAL) {
intent = new Intent(Constants.ACTION_OPEN);
} else {
intent = new Intent(Constants.ACTION_LIST);
diff --git a/src/com/android/providers/downloads/DownloadService.java b/src/com/android/providers/downloads/DownloadService.java
index 5b56f686..9e890ea0 100644
--- a/src/com/android/providers/downloads/DownloadService.java
+++ b/src/com/android/providers/downloads/DownloadService.java
@@ -27,6 +27,8 @@ import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.database.CharArrayBuffer;
import android.database.ContentObserver;
import android.database.Cursor;
@@ -610,6 +612,43 @@ public class DownloadService extends Service {
mDownloads.add(arrayPos, info);
+ if (info.mStatus == 0
+ && (info.mDestination == Downloads.Impl.DESTINATION_EXTERNAL
+ || info.mDestination == Downloads.Impl.DESTINATION_CACHE_PARTITION_PURGEABLE)
+ && info.mMimeType != null
+ && !DrmRawContent.DRM_MIMETYPE_MESSAGE_STRING.equalsIgnoreCase(info.mMimeType)) {
+ // Check to see if we are allowed to download this file. Only files
+ // that can be handled by the platform can be downloaded.
+ // special case DRM files, which we should always allow downloading.
+ Intent mimetypeIntent = new Intent(Intent.ACTION_VIEW);
+
+ // We can provide data as either content: or file: URIs,
+ // so allow both. (I think it would be nice if we just did
+ // everything as content: URIs)
+ // Actually, right now the download manager's UId restrictions
+ // prevent use from using content: so it's got to be file: or
+ // nothing
+
+ mimetypeIntent.setDataAndType(Uri.fromParts("file", "", null), info.mMimeType);
+ ResolveInfo ri = getPackageManager().resolveActivity(mimetypeIntent,
+ PackageManager.MATCH_DEFAULT_ONLY);
+ //Log.i(Constants.TAG, "*** QUERY " + mimetypeIntent + ": " + list);
+
+ if (ri == null) {
+ if (Config.LOGD) {
+ Log.d(Constants.TAG, "no application to handle MIME type " + info.mMimeType);
+ }
+ info.mStatus = Downloads.Impl.STATUS_NOT_ACCEPTABLE;
+
+ Uri uri = ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI, info.mId);
+ ContentValues values = new ContentValues();
+ values.put(Downloads.Impl.COLUMN_STATUS, Downloads.Impl.STATUS_NOT_ACCEPTABLE);
+ getContentResolver().update(uri, values, null, null);
+ info.sendIntentIfRequested(uri, this);
+ return;
+ }
+ }
+
if (info.canUseNetwork(networkAvailable, networkRoaming)) {
if (info.isReadyToStart(now)) {
if (Constants.LOGV) {
diff --git a/src/com/android/providers/downloads/Helpers.java b/src/com/android/providers/downloads/Helpers.java
index 0847b78e..0113ac4d 100644
--- a/src/com/android/providers/downloads/Helpers.java
+++ b/src/com/android/providers/downloads/Helpers.java
@@ -19,6 +19,8 @@ package com.android.providers.downloads;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.drm.mobile1.DrmRawContent;
import android.net.ConnectivityManager;
@@ -97,6 +99,31 @@ public class Helpers {
}
return new DownloadFileInfo(null, null, Downloads.Impl.STATUS_NOT_ACCEPTABLE);
}
+ if (!DrmRawContent.DRM_MIMETYPE_MESSAGE_STRING.equalsIgnoreCase(mimeType)) {
+ // Check to see if we are allowed to download this file. Only files
+ // that can be handled by the platform can be downloaded.
+ // special case DRM files, which we should always allow downloading.
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+
+ // We can provide data as either content: or file: URIs,
+ // so allow both. (I think it would be nice if we just did
+ // everything as content: URIs)
+ // Actually, right now the download manager's UId restrictions
+ // prevent use from using content: so it's got to be file: or
+ // nothing
+
+ PackageManager pm = context.getPackageManager();
+ intent.setDataAndType(Uri.fromParts("file", "", null), mimeType);
+ ResolveInfo ri = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
+ //Log.i(Constants.TAG, "*** FILENAME QUERY " + intent + ": " + list);
+
+ if (ri == null) {
+ if (Config.LOGD) {
+ Log.d(Constants.TAG, "no handler found for type " + mimeType);
+ }
+ return new DownloadFileInfo(null, null, Downloads.Impl.STATUS_NOT_ACCEPTABLE);
+ }
+ }
}
String filename = chooseFilename(
url, hint, contentDisposition, contentLocation, destination);