diff options
author | Leon Scroggins <scroggo@google.com> | 2010-10-28 16:22:24 -0400 |
---|---|---|
committer | Leon Scroggins <scroggo@google.com> | 2010-11-15 09:44:46 -0500 |
commit | 09ccfc737f764131c16334a444c7b96ab751c402 (patch) | |
tree | 83c35c643d6338f9dfdef5f0a18f38f1ad965695 /src/com/android/browser/OpenDownloadReceiver.java | |
parent | e16c9b42064a533cc466f0d893c2bab6b5676080 (diff) | |
download | packages_apps_Browser-09ccfc737f764131c16334a444c7b96ab751c402.zip packages_apps_Browser-09ccfc737f764131c16334a444c7b96ab751c402.tar.gz packages_apps_Browser-09ccfc737f764131c16334a444c7b96ab751c402.tar.bz2 |
Open downloads from notifications.
Bug:3116742
When moving to the public API, notifications no longer
worked as expected. Make downloads show after completing,
and use the public API in OpenDownloadReceiver.
Change-Id: Ia15000de4a66e8728b43fc53f428e098503b003b
Diffstat (limited to 'src/com/android/browser/OpenDownloadReceiver.java')
-rw-r--r-- | src/com/android/browser/OpenDownloadReceiver.java | 89 |
1 files changed, 52 insertions, 37 deletions
diff --git a/src/com/android/browser/OpenDownloadReceiver.java b/src/com/android/browser/OpenDownloadReceiver.java index f66c332..34cc6b9 100644 --- a/src/com/android/browser/OpenDownloadReceiver.java +++ b/src/com/android/browser/OpenDownloadReceiver.java @@ -19,12 +19,10 @@ package com.android.browser; import android.app.DownloadManager; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; -import android.provider.Downloads; import android.widget.Toast; import java.io.File; @@ -36,49 +34,66 @@ import java.io.File; * a complete, successful download will open the file. */ public class OpenDownloadReceiver extends BroadcastReceiver { + @Override public void onReceive(Context context, Intent intent) { - ContentResolver cr = context.getContentResolver(); - Uri data = intent.getData(); + String action = intent.getAction(); + if (!DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) { + openDownloadsPage(context); + return; + } + long ids[] = intent.getLongArrayExtra( + DownloadManager.EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS); + if (ids == null || ids.length == 0) { + openDownloadsPage(context); + return; + } + long id = ids[0]; + DownloadManager.Query query = new DownloadManager.Query(); + query.setFilterById(id); + DownloadManager manager = (DownloadManager) context.getSystemService( + Context.DOWNLOAD_SERVICE); Cursor cursor = null; try { - cursor = cr.query(data, - new String[] { Downloads.Impl._ID, Downloads.Impl._DATA, - Downloads.Impl.COLUMN_MIME_TYPE, Downloads.Impl.COLUMN_STATUS }, - null, null, null); - if (cursor.moveToFirst()) { - String filename = cursor.getString(1); - String mimetype = cursor.getString(2); - String action = intent.getAction(); - if (Downloads.Impl.ACTION_NOTIFICATION_CLICKED.equals(action)) { - int status = cursor.getInt(3); - if (Downloads.Impl.isStatusCompleted(status) - && Downloads.Impl.isStatusSuccess(status)) { - Intent launchIntent = new Intent(Intent.ACTION_VIEW); - Uri path = Uri.parse(filename); - // If there is no scheme, then it must be a file - if (path.getScheme() == null) { - path = Uri.fromFile(new File(filename)); - } - launchIntent.setDataAndType(path, mimetype); - launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - try { - context.startActivity(launchIntent); - } catch (ActivityNotFoundException ex) { - Toast.makeText(context, - R.string.download_no_application_title, - Toast.LENGTH_LONG).show(); - } - } else { - // Open the downloads page - Intent pageView = new Intent( - DownloadManager.ACTION_VIEW_DOWNLOADS); - pageView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(pageView); + cursor = manager.query(query); + if (cursor != null && cursor.moveToFirst()) { + int status = cursor.getInt(cursor.getColumnIndexOrThrow( + DownloadManager.COLUMN_STATUS)); + if (DownloadManager.STATUS_SUCCESSFUL == status) { + Intent launchIntent = new Intent(Intent.ACTION_VIEW); + int uriCol = cursor.getColumnIndexOrThrow( + DownloadManager.COLUMN_LOCAL_FILENAME); + String filename = cursor.getString(uriCol); + Uri path = Uri.parse(filename); + // If there is no scheme, then it must be a file + if (path.getScheme() == null) { + path = Uri.fromFile(new File(filename)); } + int typeCol = cursor.getColumnIndexOrThrow( + DownloadManager.COLUMN_MEDIA_TYPE); + String mimetype = cursor.getString(typeCol); + launchIntent.setDataAndType(path, mimetype); + launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(launchIntent); + } else { + // Open the downloads page + openDownloadsPage(context); } } + } catch (ActivityNotFoundException ex) { + Toast.makeText(context, R.string.download_no_application_title, + Toast.LENGTH_LONG).show(); } finally { if (cursor != null) cursor.close(); } } + + /** + * Open the Activity which shows a list of all downloads. + * @param context + */ + private void openDownloadsPage(Context context) { + Intent pageView = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS); + pageView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(pageView); + } } |