diff options
author | Steve Howard <showard@google.com> | 2010-07-21 11:41:30 -0700 |
---|---|---|
committer | Steve Howard <showard@google.com> | 2010-07-21 19:03:51 -0700 |
commit | 0a77c62a82503b38c484e0079648f0231dd85d53 (patch) | |
tree | b6e9999d7f527bc8addf005aa881005e3e66ba3c /src/com/android/providers/downloads/DownloadReceiver.java | |
parent | b5629da794cb3c1ca1970d206343743b165b9644 (diff) | |
download | android_packages_providers_DownloadProvider-0a77c62a82503b38c484e0079648f0231dd85d53.tar.gz android_packages_providers_DownloadProvider-0a77c62a82503b38c484e0079648f0231dd85d53.tar.bz2 android_packages_providers_DownloadProvider-0a77c62a82503b38c484e0079648f0231dd85d53.zip |
Public API support for broadcasts and connectivity control.
* Three new DB fields, one indicating whether a download was initiated by the public API or not, two to hold connectivity control info. DB migration to add these fields and code in DownloadProvider.insert() to handle them.
* Change broadcast intent code to match public API spec, for public API downloads only. (Legacy code can go away once existing clients are converted over to the new API.)
* Introduce SystemFacade methods for sending broadcasts and checking package ownership; this facilitates new tests of broadcast code.
* Change DownloadInfo.canUseNetwork() to obey new connectivity controls available in public API, but again, retain legacy behavior for downloads initiated directly through DownloadProvider
* New test cases to cover the new behavior
Also made a couple changes to reduce some test flakiness I was observing:
* in tearDown(), wait for any running UpdateThread to complete
* in PublicApiFunctionalTest.setUp(), if the test directory already exists, remove it rather than aborting
DB changes for broadcast + roaming support
Change-Id: I60f39fc133f678f3510880ea6eb9f639358914b4
Diffstat (limited to 'src/com/android/providers/downloads/DownloadReceiver.java')
-rw-r--r-- | src/com/android/providers/downloads/DownloadReceiver.java | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/com/android/providers/downloads/DownloadReceiver.java b/src/com/android/providers/downloads/DownloadReceiver.java index 0b4a12da..98c37103 100644 --- a/src/com/android/providers/downloads/DownloadReceiver.java +++ b/src/com/android/providers/downloads/DownloadReceiver.java @@ -16,6 +16,8 @@ package com.android.providers.downloads; +import com.google.common.annotations.VisibleForTesting; + import android.app.NotificationManager; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; @@ -25,6 +27,7 @@ import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.ConnectivityManager; +import android.net.DownloadManager; import android.net.NetworkInfo; import android.net.Uri; import android.provider.Downloads; @@ -37,7 +40,7 @@ import java.io.File; * Receives system broadcasts (boot, network connectivity) */ public class DownloadReceiver extends BroadcastReceiver { - + @VisibleForTesting SystemFacade mSystemFacade = null; public void onReceive(Context context, Intent intent) { @@ -133,18 +136,29 @@ public class DownloadReceiver extends BroadcastReceiver { Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE); int classColumn = cursor.getColumnIndexOrThrow( Downloads.Impl.COLUMN_NOTIFICATION_CLASS); + int isPublicApiColumn = cursor.getColumnIndex( + Downloads.Impl.COLUMN_IS_PUBLIC_API); String pckg = cursor.getString(packageColumn); String clazz = cursor.getString(classColumn); - if (pckg != null && clazz != null) { - Intent appIntent = - new Intent(Downloads.Impl.ACTION_NOTIFICATION_CLICKED); - appIntent.setClassName(pckg, clazz); - if (intent.getBooleanExtra("multiple", true)) { - appIntent.setData(Downloads.Impl.CONTENT_URI); - } else { - appIntent.setData(intent.getData()); + boolean isPublicApi = cursor.getInt(isPublicApiColumn) != 0; + + if (pckg != null) { + Intent appIntent = null; + if (isPublicApi) { + appIntent = new Intent(DownloadManager.ACTION_NOTIFICATION_CLICKED); + appIntent.setPackage(pckg); + } else if (clazz != null) { // legacy behavior + appIntent = new Intent(Downloads.Impl.ACTION_NOTIFICATION_CLICKED); + appIntent.setClassName(pckg, clazz); + if (intent.getBooleanExtra("multiple", true)) { + appIntent.setData(Downloads.Impl.CONTENT_URI); + } else { + appIntent.setData(intent.getData()); + } + } + if (appIntent != null) { + mSystemFacade.sendBroadcast(appIntent); } - context.sendBroadcast(appIntent); } } } |