diff options
author | Leon Scroggins <scroggo@google.com> | 2010-01-22 09:35:34 -0500 |
---|---|---|
committer | Leon Scroggins <scroggo@google.com> | 2010-01-22 09:39:07 -0500 |
commit | 581abbbbeba49e64219e5f11f8a8474760a2f902 (patch) | |
tree | af303eb84ae79ec25c967c7d843e4e7ccfd50e27 /src/com/android | |
parent | 4d3a380d338b1f6ee120fb9de2001f138be398ff (diff) | |
download | android_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.
Diffstat (limited to 'src/com/android')
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); |