60 Commits

Author SHA1 Message Date
Daichi Hirono
50da0ac660 Use mipmap instead of drawable for app icon of DocumentsUI.
App icon can be redered in various size and mipmap automatically
switches to high-resolution resources regardless of screen size when the
icon is rendered in large size.

BUG=27804140

Change-Id: Ib14a4d8ec8ac601f46510ad50ab18f28408b8fc1
2016-03-23 14:40:05 +09:00
Daichi Hirono
c469585cf7 Merge "Change the title of DocumentsUI from "Files" to "Downloads"." into nyc-dev 2016-03-22 01:20:26 +00:00
Jeff Sharkey
e090b7963c Avoid spinning up DocumentsProviders at boot.
Bug: 27743087
Change-Id: Ia89465c5d13a74f3b78a0d84f1ecfe5fd2a6e744
2016-03-18 15:22:27 -06:00
Daichi Hirono
2917fa9dd5 Change the title of DocumentsUI from "Files" to "Downloads".
BUG=27683277

Change-Id: I429cae8804b8f318f58039fc63d081c2a864fad0
2016-03-18 17:46:57 +09:00
Jeff Sharkey
8731408b11 Offer to cache ContentResolver-related Bundles.
There are a handful of core system services that collect data from
third-party ContentProviders by spinning them up and then caching the
results locally in memory.  However, if those apps are killed due to
low-memory pressure, they lose that cached data and have to collect
it again from scratch.  It's impossible for those apps to maintain a
correct cache when not running, since they'll miss out on Uri change
notifications.

To work around this, this change introducing a narrowly-scoped
caching mechanism that maps from Uris to Bundles.  The cache is
isolated per-user and per-calling-package, and internally it's
optimized to keep the Uri notification flow as fast as possible.
Each Bundle is invalidated whenever a notification event for a Uri
key is sent, or when the package hosting the provider is changed.

This change also wires up DocumentsUI to use this new mechanism,
which improves cold-start performance from 3300ms to 1800ms.  The
more DocumentsProviders a system has, the more pronounced this
benefit is.  Use BOOT_COMPLETED to build the cache at boot.

Add more permission docs, send a missing extra in DATA_CLEARED
broadcast.

Bug: 18406595
Change-Id: If3eae14bb3c69a8b83a65f530e081efc3b34d4bc
2016-03-14 11:45:50 -06:00
Steve McKay
6ce903d7b7 Delete downloads activity.
Delete "MANAGE_ROOT" activity.
Add intent filter for "BROWSE_DOWNLOADS".
Open by default on Downloads directory.

Bug: 27563427
Change-Id: I1f85dc17a0bc94b439a272847e4ab3bb347ead23
2016-03-10 11:34:03 -08:00
Steve McKay
080d71b130 Revert "Hide Files app launcher icon."
This reverts commit 24e46045956da911b385be33cff473bdacebf780.

Un-hiding this for continued development in nyc-dev.

Based on conversations between those at higher paygrades, we'll either leave this visible or re-hide prior to next dev release.

Change-Id: I235eb0f593daa7b34ea10ed4c9df4eaa6c68078c
2016-03-04 19:52:55 +00:00
Steve McKay
24e4604595 Hide Files app launcher icon.
Bug: 27498061

Change-Id: Ifc76ef731a623e95839252a6c9483ce3546c9930
2016-03-04 11:33:46 -08:00
Felipe Leme
560d23a28f Improved OpenExternalDirectoryActivity so it returns right away when an
app already has the requested permission.

BUG: 26742218

Change-Id: Ib441c17ed1462b19621f893dc2ee9d6d485518c9
2016-02-17 17:51:59 -08:00
Felipe Leme
34a9d52719 Removed Intent.OPEN_EXTERNAL_DIRECTORY.
Such intent is now encapsulated by StorageVolume.createAccessIntent().

BUG: 26742218

Change-Id: I2e2bd71126ecd74981f77b0af7d069f51aaece74
2016-02-17 14:38:25 -08:00
Tomasz Mikolajewski
a6120da1e3 Open zip files nicely from the Download app with Files app.
Bug: 26321218
Change-Id: I8a7a7e914d290ea1b6f424ee5fbd38a4b09c362d
2016-02-03 11:56:54 +09:00
Steve McKay
5fe5c458dc Files always visible, same for new window menu.
Remove "productivity_device" bit.

Change-Id: I28ee3e210fc5f8c367d45a74edab0e04667ddd5e
2016-01-28 11:43:08 -08:00
Steve McKay
de3f4c89ca Merge "Revert "Eliminate the "productivity_device" setting."" 2016-01-27 19:25:07 +00:00
Steve McKay
8fa9ffcdc0 Revert "Eliminate the "productivity_device" setting."
This reverts commit d0a0fc2cd1fbb629f329cf10e0413a674a8e54b6.

Missed a use. Prema-revert.

Change-Id: I6bce595646e2e2bf1e506388a2da9e1cd8f61a09
2016-01-27 19:24:25 +00:00
Ben Kwa
3ca3a3db5e Merge "Eliminate the "productivity_device" setting." 2016-01-27 18:48:01 +00:00
Felipe Leme
b012f913cb Initial implementation of OPEN_EXTERNAL_DIRECTORY.
It opens a an alert dialog that tells user application X is requesting
access to folder Y on volume Z; if user accepts, it returns the proper
URI, otherwise it returns RESULT_CANCELED.

The requested path must satisfy the following requirements:

1.It's directory (getName()) must be one of the pre-definied folders on
  Environment.
2.It's root (getParent()) must be a valid external storage root.

In order to satisfy #2, DocumentsUI calls the ExternalStorageProvider,
through a custom call() implementation.

BUG:  23011462
Change-Id: I8e491e82ae320df88f7b8923286c4c1ad050ae80
2016-01-27 08:52:58 -08:00
Steve McKay
d0a0fc2cd1 Eliminate the "productivity_device" setting.
Files will be available  to all in N.

Change-Id: I964b581c06dea6dfa848624c36566090544509f1
2016-01-26 16:58:12 -08:00
Steve McKay
14e827a958 CopyService generalization.
Make the service operation agnostic, so we can also move delete operations to it.
In a followup change we'll see about adding support for multiple concurrent
    operations. We'll need to evaluate how to do this in IntentService (which
    serializes requests....a major limitation).

Change-Id: I03eca9c1ecaba519af42d88edffeb0dce78bd1da
2016-01-07 16:29:36 -08:00
Steve McKay
a8f03a2d81 Eliminate dialog mode from DocumentsUI.
DocumentsActivity to Use standard drawer layout at all display resolutions.

Bug: 26208032
Change-Id: I3b93c81bf97045744074a299e92cdea4aae7628d
2015-12-17 09:44:57 -08:00
Steve McKay
8fd086a18d Fix broken copy after recent copy related chagnes.
Also, add a label to Downloads app, and enabled drag and drop by default.
Cleanued up menu handling in BaseActivity (use switch statement).

Bug: 26033335
Change-Id: I3cef89a4a9f9e30b4e926411e94cf06bc2dc0f8d
2015-12-04 14:24:48 -08:00
Steve McKay
02794193c9 Show share button in downloads.
Also, rename "ManagerRootActivity" to "DownloadsActivity"
    since because...well, it is almost always Downloads
    and is specialized for this case.

Bug: 25809806
Change-Id: I496d34393d269d2120c8e214413cb87df8bf171d
2015-12-01 16:21:34 -08:00
Steve McKay
6c88085547 Intent-filter for BROWSE action.
Missing from ag/777423
Bug: 25806013

Change-Id: I79ac0946f0d4548efab23e363dfa864ad8b1426a
2015-11-20 08:52:00 -08:00
Ben Kwa
a7e9eb04e2 Update DocumentUI styles to match mocks.
BUG=24870921

Change-Id: Ic91c9fbbe8c577c2276a4afc79753ba702c53733
2015-10-29 15:43:23 -07:00
Jeff Sharkey
38f4313707 am 386d7900: am e0210648: am a0ef1048: am d473a144: Merge "Hold wake-lock during copy operations." into mnc-dr-dev
* commit '386d7900467ca52d48daf70d07498f10ae48aa80':
  Hold wake-lock during copy operations.
2015-10-08 17:29:50 +00:00
Steve McKay
c2dbc74942 Don't explicitly foreground tasks.
Get out of the way of documentLaunchMode, let ActivityManager do the work for us.
Quiet some noisy logging.

Bug: 24413182
Change-Id: Ia48244871296f5c6b83a838dcde6496acbd45793
2015-10-05 14:49:16 -07:00
Jeff Sharkey
3c12a7c6d7 Hold wake-lock during copy operations.
If the CPU goes to sleep during the copy, certain devices will
collapse the USB OTG power domain, which can cause user data loss.

Bug: 24574575
Change-Id: I8e26caac8784490d2dee324b38e6085cd55eb8bb
2015-10-02 08:55:22 -07:00
Steve McKay
9f9d5b432d Add support for opening multiple windows.
Installs an intermediate activity that manages tasks.

Bug: 20562850
Change-Id: If2d0a125b0630c27af07666b0f6a712f58243e9f
2015-09-25 14:46:14 -07:00
Steve McKay
83df8c072d Merge BROWSE and BROWSE_ALL actions.
Open Files app when exploring from settings.
Force visibility of file size in this mode.
Don't hide empty media providers.

Bug: 24136618, 24140864
Change-Id: I6f238586725f9b6255812e3082bb8d8655219a7d
2015-09-23 12:25:13 -07:00
Ben Kwa
0f7078f004 Refactor DocsUI to break out a new ManageRootActivity.
- Split all ACTION_MANAGE-related functionality off from
  DocumentsActivity, into a new activity.
- Create new full-screen layouts for said activity.
- Fix some styling issues in {Documents,Files}Activity.

Change-Id: I0384715ad3c7d70a3a3daf510f1a09e8c5732348
2015-09-11 13:58:41 -07:00
Steve McKay
12055474a7 Show a drawer when in portrait mode.
This makes more space available for content.
Rename all the "Standalone" stuff to just "Files".
Move layout inflation into base class.
Move backbutton > drawer interaction into BaseActivity.

Change-Id: Ie778b323c6e80122389f029be148dd9e0c4bfb6e
2015-08-24 09:05:51 -07:00
Steve McKay
825324369a Improved files icon and activity label.
Change-Id: I7df661b88ce859f94d5f0bbd6687950140cbf39d
2015-07-27 12:03:26 -07:00
Steve McKay
1dfc482cc0 Allow Files app to be enabled via overlay.
Actual changes to Andromeda overlay are in: http://ag/733602/

Change-Id: Iad5a4cb2d087d574613ba6e9c9c9c69bd8611e8c
2015-07-23 16:41:31 -07:00
Steve McKay
6e02dc8cd6 Delete StandaloneActivity from M (DO NOT MERGE)
The activity is already disabled by default.
Fix an issue where copy support error handling was attempting to invoke StandaloneActivity.

Change-Id: If15c312a183cae1b2a84517e7f7b3123c11bd619
2015-05-11 16:19:00 +00:00
Jeff Sharkey
1407d4c777 DocumentsUI roots can have settings.
Roots use a flag to indicate they have settings, and DocumentsUI
offers to launch towards someone who handles a new Settings intent.

Slight rename of browse intent for clarity.

Bug: 19993667
Change-Id: I86302ec1cfac5e435d8bc5701bdb85fb9b0dcbae
2015-04-12 22:02:44 -07:00
Jeff Sharkey
59d577a518 Browse mode for DocumentsUI, removed volume state.
The existing management mode is too specific, and requires that
storage backends add queryChildDocumentsForManage(), etc.  Instead,
to offer more natural browsing support, add a new BROWSE_ROOT intent.

It behaves mostly like MANAGE_ROOT, except that it doesn't mutate
its Uris with setManageMode(), and it shortcuts straight to VIEW on
clicked documents.

It can be launched like this:

$ adb shell am start -a android.provider.action.BROWSE_ROOT
    -d content://com.android.externalstorage.documents/root/8405-1DFB
    -c android.intent.category.DEFAULT

Also rename a MetricsConstants to make it clearer, and don't
auto-mount all emulated volumes.

Fix bugs around parceling of DiskInfo/VolumeInfo.  Method to resolve
the best description for a VolumeInfo, which might need to fall
back to DiskInfo.

Add back "removed" volume state so we send broadcast when a volume
is destroyed, matching the expected public API behavior.

Bug: 19993667
Change-Id: I13aff32c5e11dfc63da44aee9e93a27f4690a43f
2015-04-12 16:03:50 -07:00
Ben Kwa
d99109fca8 Enable directory selection. Add an IntentService to copy files.
Change-Id: I0bec0224aa1b52766664c23f77d60affec702111
2015-04-03 13:49:24 -07:00
Steve McKay
e934ce6f84 Implement a standalone file manager activity.
Change-Id: Iaf86ef416b979cea4ab3890d3a26f09741392c3d
2015-03-25 14:38:56 -07:00
Jeff Sharkey
669f8e7c70 Move DocumentsUI settings into overflow menu.
Also use different strings based on device type to make clearer.

Bug: 13437894
Change-Id: I4053780de2c7197fb45cc53aee7659e9d0d75c0a
2014-08-08 23:00:55 +00:00
Jeff Sharkey
f52773fd62 More DocumentsUI material iteration.
Move to using Toolbar for all actions.  Drawer contains its own
Toolbar with separate title, and hamburger is always visible.  Change
drawer items to match spec.  Switching to Toolbar allows us to remove
nasty dialog-on-tablet hacks, yay!  This also means we can finally
get real IME resizing support.

Move to using elevation for all shadows; this removes more nasty
hacks around drawing directory shadows.

Bug: 15836082
Change-Id: Iba70b898f385a7debd8aabfc98ff39d20bca860d
2014-07-29 23:19:45 +00:00
Jeff Sharkey
b9fbb7290b Refactor directory API to "opening document tree."
Cleans up API so it consistently refers to opening or working with a
subtree of documents.  Also separates isChildDocument() support from
the concept of directory tree selection.

Bug: 15429194
Change-Id: Ice66a751ff4bd0cc4d34c44c5da13a0dc4186dc9
2014-06-09 17:07:58 -07:00
Jeff Sharkey
21de56a946 Add directory selection to DocumentsProvider.
Introduce new ACTION_PICK_DIRECTORY that allows users to grant access
to an entire document subtree.  Instead of requiring grants for each
individual document, this leverages new prefix URI permission grants
by defining new "via"-style URIs:

content://com.example/via/12/document/24/

This references document 24 by using a prefix grant given for
document 12.  Internally, we use isChildDocument() to enforce that
24 is actually a descendant (child, grandchild, etc) of 12.  Since
this is an optional API, providers indicate support with
Root.FLAG_SUPPORTS_DIR_SELECTION.

Extend DocumentsUI to support picking directories.  Expose
createDocument() API to work with returned directories.

Offer to canonicalize via-style URIs into direct URIs, generating
exact permission grants along the way.  Override openAssetFile()
to pass through CancellationSignal.  Move testing code into ApiDemos.

Bug: 10607375
Change-Id: Ifffc1cff878870f8152eb6ca0199c5d014b9cb07
2014-04-22 22:18:21 -07:00
Alan Viverette
6259933ec9 Switch framework Holo references to Quantum.Light
Change-Id: Ib545a143f1959b6104adbc9d594dd626851d90b3
2014-04-01 14:57:39 -07:00
Jeff Sharkey
758f97e46d Remove persisted stacks when app removed/cleared.
When an app's data is cleared, or it's uninstalled, remove any
persisted stacks.

Bug: 11355566
Change-Id: I4e5cf0ec710591ad62f1ad52c2e358616631af41
2013-10-24 11:22:20 -07:00
Jeff Sharkey
7aa7601c09 Detect wedged ContentProviders, treat as ANR.
All ContentProvider calls are currently blocking, making it hard for
an app to recover when a remote provider is wedged.  This change adds
hidden support to ContentProviderClient to timeout remote calls,
treating them as ANRs.  This behavior is disabled by default.

Update DocumentsUI to use a 20 second timeout whenever interacting
with a storage provider.

Bug: 10993301, 10819461, 10852518
Change-Id: I10fa3c425c6a7225fff9cb7a0a07659028230cd3
2013-10-01 09:50:41 -07:00
Jeff Sharkey
5545f56f75 Create unique files, root ordering, UI bugs.
When a file already exists on disk, try adding a counter suffix to
make a unique name.  Move services near top of roots list, just below
recents.  Remove "Documents" root.

Increase number of recents allowed from single provider, and add more
logging to diagnose wedged loaders.

When launching GET_CONTENT apps, wait for successful result before
relaying result; canceled requests now return to DocumentsUI.

Add CloseGuard to ContentProviderClients, since leaked instances can
keep the remote process alive.

Fix UI bug around trailing breadcrumbs.  Fix bug that dropped Recents
from roots list.  Add up action to Settings activity.  Give our
activity a default icon while waiting for async roots to load.

Bug: 10818683, 10819461, 10819461, 10819196, 10860199
Change-Id: I7b9e26b1cf8353dd3175458b23da2b4bda6c5831
2013-09-21 14:07:16 -07:00
Jeff Sharkey
a9ce049db8 Load RootInfo in background, invalidation.
Move all RootInfo queries to background threads to avoid janking
the UI.  Update passes happen on spawed task, which swaps out updated
cache results when finished.  Support partial updates when only a
single package/authority has changed.  Watch for change notifications
for roots, since flags can change over time.

Ignore stopped packages when in background, but query them for roots
when launching any picker UI.

Optimize management launches by treating as one-shot requests that
don't need to wait for all RootInfo.

Bug: 10600454, 10745490
Change-Id: Ibc7b15688ef6b41bd7e9dd0d7564b501e60e49a9
2013-09-19 19:53:32 -07:00
Jeff Sharkey
88f322c311 DocumentsUI tablet support.
Shows as a faux dialog on larger tablets, since the normal dialog
themes from framework don't support action bars.  Instead, this hacks
itself to look like a dialog with an InsetDrawable.  Detects touches
in dim area to dismiss dialog.

Show all action bar icons on tablets, and roots panel is always
visible with a different shadow. Show settings in dialog. Allow mode
switches in recents.

Bug: 10329832
Change-Id: Id02982ce7b0d4694962d32f8d5286fdfcc207208
2013-09-12 16:39:50 -07:00
Jeff Sharkey
a61dc8e03e Separate root and document management.
Two hidden intents for managing roots and documents, used to support
Downloads UI.  Touching an item tries launching as MANAGE_DOCUMENT
first before falling back to VIEW.  Provide MIME type for roots.

Bug: 10446265, 10531347, 10599641
Change-Id: Ia5584bd6ce3e5a9b0048e8caf1447e3053664413
2013-09-06 08:08:18 -07:00
Jeff Sharkey
b51331116e Instance state, fix sharing, Durable objects.
Remember instance state across configuration changes, and enable
rotation.  This remembers current modes and in-progress traversals.

Always finish action modes after launching an action.  Fix sharing
by always putting Uris in extras, and always wrap in a chooser.  Find
common MIME types when sharing multiple documents.  Fix downloads
launching by following directory MIME type change.

Introduce "Durable" which is like Parcelable, but can be used for
both byte[] storage and Parcel transport.  Make both DocumentInfo
and DocumentStack durable.

Disable recents until new behavior is implemented.

Bug: 10460236, 10446265, 10533674, 10456344, 10456702
Change-Id: I4eaf2b0b4cde611c69a1e7b5f1586f6b02019b27
2013-09-01 18:59:38 -07:00
Jeff Sharkey
aeb16e2435 Stronger DocumentsProvider contract.
Using a contract class requires that a provider implement it exactly
with little help. This change introduces a DocumentsProvider abstract
class that provides a client-side implementation of the contract that
greatly reduces developer burden, and improves correctness.

This also moves to first-class DocumentRoot objects, and moves calls
with complex side effects to be ContentProvider.call() invocations,
offering more granular permission control over Uri operations that
shouldn't be available through Uri grants.

This new design also relaxes the requirement that root information be
burned into every Uri.  Migrate ExternalDocumentsProvider and
DocumentsUI to adopt new API.

Bug: 10497206
Change-Id: I6f2b3f519bfd62a9d693223ea5628a971ce2e743
2013-08-28 20:49:42 -07:00