diff options
-rw-r--r-- | AndroidManifest.xml | 1 | ||||
-rw-r--r-- | src/com/android/browser/BrowserActivity.java | 2 | ||||
-rw-r--r-- | src/com/android/browser/OpenDownloadReceiver.java | 89 |
3 files changed, 54 insertions, 38 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8e6934c..9fea44a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -232,7 +232,6 @@ <receiver android:name=".OpenDownloadReceiver"> <intent-filter> <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"/> - <data android:scheme="content" android:mimeType="vnd.android.cursor.item/download"/> </intent-filter> </receiver> </application> diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index 072a0b1..799a8da 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -3187,6 +3187,8 @@ public class BrowserActivity extends Activity request.setDescription(webAddress.getHost()); String cookies = CookieManager.getInstance().getCookie(url); request.addRequestHeader("cookie", cookies); + request.setNotificationVisibility( + DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); if (mimetype == null) { ContentValues values = new ContentValues(); values.put(FetchUrlMimeType.URI, addressString); 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); + } } |