summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser/OpenDownloadReceiver.java
diff options
context:
space:
mode:
authorLeon Scroggins <scroggo@google.com>2010-10-28 16:22:24 -0400
committerLeon Scroggins <scroggo@google.com>2010-11-15 09:44:46 -0500
commit09ccfc737f764131c16334a444c7b96ab751c402 (patch)
tree83c35c643d6338f9dfdef5f0a18f38f1ad965695 /src/com/android/browser/OpenDownloadReceiver.java
parente16c9b42064a533cc466f0d893c2bab6b5676080 (diff)
downloadpackages_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.java89
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);
+ }
}