New URI structure with "my_downloads" and "all_downloads"
authorSteve Howard <showard@google.com>
Mon, 13 Sep 2010 01:53:31 +0000 (18:53 -0700)
committerSteve Howard <showard@google.com>
Wed, 15 Sep 2010 02:00:40 +0000 (19:00 -0700)
commit3d55d829c03fe78ad8cdab119293efb6c6e49c64
treefb8feb9c23b83108546048b0488033279de63635
parent33671e9c1e9ffa3776ed987bddeb70a04daa7cfe
New URI structure with "my_downloads" and "all_downloads"

This change introduces a second view into the download manager
database via a set of URIs starting with /all_downloads, renaming the
original /download URIs to /my_downloads.  In addition to making
things more clear, this change allows the downloads UI to grant
permissions on individual downloads to viewer apps.

The old semantics were:

* for ordinary callers, /download included only downloads initiated by
  the calling UID
* for intraprocess calls or calls by root, /download included all
  downloads

The new semantics are

* /my_downloads always includes only downloads initiated by the
  calling UID, and requires only INTERNET permission.  It could just
  as well require no permission, but that's not possible in the
  framework, since path-permissions can only broaden access, not
  tighten it.  It doesn't matter, because these URIs are useless
  without INTERNET permission -- if a user can't initiate downloads,
  there's no reason to read this.
* /all_downloads always includes all downloads on the system, and
  requires the new permission ACCESS_ALL_DOWNLOADS.  This permission
  is currently protectionLevel=signature -- this could be relaxed
  later to support third-party download managers.

All download manager code has been changed to use /all_downloads URIs,
except when passing a URI to another app.  In making this change
across the download manager code, I've taken some liberties in
cleaning things up.  Other apps are unchanged and will use
/my_downloads.

Finally, this incorporates changes to DownloadManager to return a
content URI for /cache downloads -- the download UI no longer assumes
it's a file URI, and it grants permissions to the receiver of the VIEW
intent.  The public API test has also been updated.

I've also fixed some null cursor checking in DownloadManager.

Change-Id: I05a501eb4388249fe80c43724405657c950d7238
12 files changed:
AndroidManifest.xml
res/values/strings.xml
src/com/android/providers/downloads/DownloadInfo.java
src/com/android/providers/downloads/DownloadNotification.java
src/com/android/providers/downloads/DownloadProvider.java
src/com/android/providers/downloads/DownloadService.java
src/com/android/providers/downloads/DownloadThread.java
src/com/android/providers/downloads/Helpers.java
tests/src/com/android/providers/downloads/AbstractDownloadManagerFunctionalTest.java
tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
ui/AndroidManifest.xml
ui/src/com/android/providers/downloads/ui/DownloadList.java