Commit Graph

78 Commits

Author SHA1 Message Date
Jeff Sharkey
04ec6f4f09 Only send EXTRA_STACK for private intent.
Since it's a private Parcelable class, we can't send it to other
third-party apps, since they won't know how to unpack it.

Bug: 22255387
Change-Id: Ie2ea6cf72b733bd122eb3581a5df295cec608425
2015-07-15 09:13:14 -07:00
Makoto Onuki
9feac1425c Remove default activity title to prevent talkback from...
reading the wrong title.

We get a title from DocumentProvider with an async task, and by the time we
get it, it's *usually* too late and talkback end up reading the default title.

Bug 20041072

Change-Id: I7686fe4ae4c157ebfc07bd8b895c4cfdf99c057a
2015-06-23 16:51:45 -07:00
Tomasz Mikolajewski
41ce003934 Merge "Remove the action bar icon when there is no drawer enabled." into mnc-dev 2015-06-18 00:15:52 +00:00
Tomasz Mikolajewski
0e591f95bd Allow to customize title of the dialog.
TEST=adb shell am start -a android.intent.action.OPEN_DOCUMENT -e
     android.intent.extra.TITLE 'Upload!' -t "text/plain"
BUG=19150996

Change-Id: Ibded6cfaa2de3698c5eada154efbee2b323464d4
2015-06-17 16:12:14 -07:00
Tomasz Mikolajewski
536ac48aa9 Remove the action bar icon when there is no drawer enabled.
Keep the hamburger menu though if the drawer is visible and unlocked.

TEST=Tested manually on both tablet and phone form factors.
BUG=18685509

Change-Id: Ie6f8d7064da99d2dc34315ccb92ab4db6ee321b6
2015-06-12 15:33:45 -07:00
Daichi Hirono
186efa3836 Update visibility of the stack dropdown list after the search view is collapsed.
Previously we hid the stack dropdown list just before the action bar is
collapsed. Then the dropdown list gets back to be visible when the action bar is
collapsed.

The CL updates visibility of the stack dropdown list just after the action bar
is collapsed.

BUG=20945584
Change-Id: Iaf5055bce101f8134accd311829e50f441ddc98b
2015-06-11 14:29:28 +09:00
Ben Kwa
77797400ec Enable apps to exclude their own roots from the DocumentsUI roots list.
- Add DocumentsContract.EXTRA_EXCLUDE_SELF (boolean extra)
- Add code to DocumentsActivity to cache the providers of the calling
  app if EXTRA_EXCLUDE_SELF is set on incoming Intents.
- Add code to RootsCache to exclude roots from the calling app.
- Add code to allow only system apps to use EXTRA_PACKAGE_NAME.

Change-Id: Ia7cc2a1a297676c7b26f6e583042a4607d8c9a4e
2015-06-10 11:24:55 -07:00
Steve McKay
574b4bcd1b [mnc-dev] Hide list/grid menu items for copy dest action...in mnc-dev!
BUG=21259006
Change-Id: Ic31dfa1a1cffa4340769c08db3e3cb3fb46e31d5
(cherry picked from commit e04e02d027)
2015-05-21 20:15:31 +00:00
Daichi Hirono
e9cbfe8e5a DocumentUI: Plish the design of footer bottons.
* Remove the directory name from "pick" button.
* Allign buttons at right.
* Fix bug that the pick button turns to be hidden after screen rotation.

BUG=20285152
Change-Id: I909d52f341bf67c5627431a354a9b0ccec152a05
2015-05-18 11:27:15 +09: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
Steve McKay
69aee097a3 Ensure sort menu is shown as needed.
This also hoists common code for options menu setup into BaseActivity.

Change-Id: Ie87b8188a6c142b2312c92dc0d0bd550f0b1e59f
2015-05-04 16:21:09 +00:00
Steve McKay
a78a3694b5 Update activities to clear search term when a root that doesn't support search is selected by the user.
BUG=20495230

Change-Id: Iee2e2bd80dea6d368cad0911117e3759bdfe37d9
2015-04-22 15:57:11 -07:00
Steve McKay
ef3e2cf35f Reduce code duplication between DocumentsActivity and StandaloneActivity.
Ensure StandaloneActivity has toolbar management consistent w/ DocumentsActivity.
Introduce a separate SearchManager class since there seemed to be a sufficient body of logic and state to warrant the separation.

Change-Id: I87d9da40095c6de575b124005ca34a8c0b0b4b35
2015-04-22 09:44:30 -07:00
Daichi Hirono
1a2fdb496e DocumentsUI: Move intent related constants to BaseActivity.DocumentsIntent.
BUG=None
Change-Id: I81d367d5f8d727a5fa76bc22b2fe871ae441dbcf
2015-04-15 13:43:28 +09:00
Daichi Hirono
c96e494ac7 Merge "DocumentsUI: Filter out downloads root if the source documents include directory." 2015-04-15 04:30:10 +00:00
Daichi Hirono
9be34298be DocumentsUI: Filter out downloads root if the source documents include directory.
This is the short term solution for the downloads root, which does not support
directory creation. For the long term solution, we need to add a flag to Root
model to check if the root support directory creation or not.

BUG=20186663

Change-Id: I15c4795892f38e3f968776f732a6f2160ae775fc
2015-04-15 13:27:55 +09:00
Daichi Hirono
de021abe40 DocumentsUI: Polish buttons of copy destination dialog.
* Add cancel button to directory picker dialog.
* Turns "select" label to "copy to" label for copy destination picker.

BUG=20170953

Change-Id: I66214804aed75a6fccc716d1a01163c634e73d7f
2015-04-15 12:57:53 +09: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
Daichi Hirono
bbe2292bc6 DocumentsUI: Add new private intent action to select copy destination.
The CL adds INTENT_ACTION_OPEN_COPY_DESTINATION, and implements the behavior to
respond the intent action.

The directory picker:
 * filter out read only roots
 * return document URI instead of document tree URI
for the intent action.

BUG=b:20146034
Change-Id: I96c565100c3cdaa57cc7abd8cf6d895d148941a7
2015-04-13 13:49:31 +09:00
Tomasz Mikolajewski
e1a03f8eec Show copy destination when clicking on the copy notification in Documents UI.
Change-Id: I3d955595bc46903c134c0633a6d32663cc2d0c05
2015-04-13 11:35:27 +09: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
Steve McKay
e934ce6f84 Implement a standalone file manager activity.
Change-Id: Iaf86ef416b979cea4ab3890d3a26f09741392c3d
2015-03-25 14:38:56 -07:00
Jeff Sharkey
43aef1643b Move Documents action bar update even later.
At some point Activity started restoring the Toolbar/ActionBar title
during onPostCreate(), which would clobber some of the setup we just
finished doing.  To fix, move our update to be even later in the
restore lifecycle.

Also fix grid item widths for small screen devices.

Bug: 17428127
Change-Id: I258121b6a6eec5924f92b02290a67d3ae7dd9cf6
2014-11-24 12:17:12 -08:00
Jeff Sharkey
0166ddf5bb Recent directories can't show file size.
Don't show the toggle to the user, which can avoid crashing.

Bug: 17942524
Change-Id: Iaedd61b7c69e14b57508cb9865d1e0124ca2e505
2014-10-24 13:06:32 -07:00
Jeff Sharkey
b7b30f691c DocumentsUI: Add content description for nav.
Bug: 17922955
Change-Id: I44c0107d8dd03aab36da55deeb864e328b492124
2014-10-13 12:55:18 -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
c29dd61cbf More material updates to DocumentsUI.
All assets cut as alpha variants so we apply desired tinting at
runtime.  Small script to automatically generate XML resources.

Bug: 15836082, 16658537
Change-Id: I803b3f0bf6f121194a5445fd1c6600fabaf28f60
2014-08-08 22:22:39 +00:00
Jeff Sharkey
a847d79310 Light icons for DocumentsUI.
In some cases we want to show light variants.  Also tweak drawer
sizes and grid padding.

Bug: 15836082
Change-Id: Ic6459ff0533a7d346c03db5d7deb3d6da42e7649
2014-07-30 00:35:57 +00:00
Jeff Sharkey
8a850b4c0e Latest DocumentsUI material asset drop.
Bug: 15836082
Change-Id: Ifdd8a42a963071f1c958d56b3f835228f257cf9a
2014-07-29 23:53:37 +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
Jeff Sharkey
96c620595b Extra to always show advanced devices.
Also always lower-case extension to extract MIME type correctly,
we may want to fix in MimeUtils at some point.

Bug: 11354402
Change-Id: I77d0c06a663cd0c4320c41553ff1980b6f9a7778
2013-10-25 16:30:54 -07:00
Jeff Sharkey
04d45a0bdd Show spinner while waiting for mutations.
When mutation operations are waiting for a storage backend, show a
spinner in place of the save button.

Bug: 11333249
Change-Id: I2b620b4532ad977a2b60d4bdc5caa55f89021456
2013-10-23 15:48:05 -07:00
Jeff Sharkey
15be83612c Support overriding calling package in Documents.
Calling package is only used to pick the stack to restore, not for
security purposes.  This lets other system tools (like Printing)
indicate the real caller.

Bug: 11149540
Change-Id: I155e32577eaeda7dfcb80a7d84ac3b54f281590a
2013-10-09 13:52:26 -07:00
Jeff Sharkey
d01571e6d4 Isolate calls to each remote DocumentsProvider.
All background work is going through AsyncTasks, which uses a shared
thread pool.  Even with the new ContentProviderClient logic to detect
ANRs, the UI can still appear to be unresponsive for 20 seconds, even
if the user attempted to switch to a different backend.  In the worst
case, a backlog of thumbnail requests would end up wedging Loaders
for a long time, since they all share the same THREAD_POOL_EXECUTOR.

This change isolates calls to each provider onto their own thread,
which they're free to wedge and recover from over time.

It also means we no longer need a dedicated thread pool for recents
loading, and can use a simpler Semaphore instead.

Disables thumbnails in recents on svelte devices.

Bug: 10993301, 11014856
Change-Id: I7f8a5bbb5f64437e006cb2c48b7e854136d5c38c
2013-10-02 08:54:02 -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
6efba22ce5 New roots UX, async, performance, docs.
Yet another iteration from UX on how roots should be ordered.  Since
we no longer categorize by type, remove from public API.  Updated
asset drop with new dividers.

Update public API docs to be explicit about required columns.  Hide
flags and columns that aren't required for third-party apps.

Move remainder of potentially blocking work to AsyncTasks, including
creating directories, picked root resolution, and creation of new
documents once picked.

Improve performance of layouts by removing baseline alignment and
reduce hierarchy depth.  Set alpha on ImageViews directly to avoid
offscreen rendering hit.

Limit returned recents to 45 days.  Show load in recents when still
waiting for backends.  Show empty message when no recents stacks to
create from.  Use unique key when saving recent stacks.

Bug: 10941423, 10819454, 10964412, 10960718
Change-Id: I08cf589dcda7e203acf67928f4d30322ae36ee94
2013-09-27 17:13:13 -07:00
Jeff Sharkey
e66c1778f8 Require that persistable Uri permissions be taken.
Change our Intent flag to indicate that a Uri permission grant is
persistable, but don't actually persist it until explicitly taken by
the receiving app.  This prevents apps from spamming each other if
persisted permissions aren't really required.

Remember the last time a persisted grant was taken by an app, and
use this to prune away the oldest grants when the number of grants
grows too large.  Allow apps to query persisted grants they are
holding, and allow them to release previously persisted grants. Add
public UriPermission class to return grant details and timestamp.

Track various permission strengths separately, and combine together
after each mutation pass.  Persistable grants are currently treated
like global grants, but they could be moved to have owners in the
future.  Require that grant holders trying to extend a persistable
permission actually hold a persistable permission themselves.

Bug: 10835779
Change-Id: I95b2f797c04ce7fd2612f9a644685dbd44e03759
2013-09-25 15:16:41 -07:00
Jeff Sharkey
6a20e57411 Handle null stacks gracefully.
Bug: 10928395
Change-Id: Ie7c3f7e0eb068ece0cf678a5d6346f18a413856b
2013-09-25 14:39:14 -07:00
Jeff Sharkey
deffadeb74 Freshen restored stacks, more UX bug fixes.
When restoring a persisted stack, such as last location or a location
where save occurred, freshen the DocumentStack to get the latest
details from backend, and ensure the path is still valid.

Filter Recent directories in create mode based on roots allowed by
incoming request.

Remember when user last picked an external app, and open drawer next
time user launches for GET_CONTENT.

Fix state list drawable ordering, and avoid clobbering Drawable
callback when wrapping in InsetDrawable; tricksy hobbitses!

Make grid items smaller to always fit two columns on phones.  Draw
grid items all the way to screen edge; don't clip to padding.  Better
error message when folder creation failed.  Show Recents in grid mode
when picking any visual content, not just images.

Bug: 10846100, 10903211, 10898993, 10892808, 10892058, 10892009, 10885012
Change-Id: Ia0f88d911abc6ea03645d6fd3e04271c21d5936a
2013-09-24 12:57:47 -07:00
Jeff Sharkey
1feeddf518 Latest UX asset drop, grid padding.
Bring in latest asset drop.  Apply grid padding programmatically
instead of waiting for asset.  Remove alpha from directory animation.

Update save footer background to match spec.

Bug: 10700025
Change-Id: I8eef08f36d04767b78e91b23f72bdbebfbb02f58
2013-09-21 15:26:37 -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
e20a3acdc2 Save directory state and animate.
Save scroll position and restore when rotating or going up the
directory stack.  Also show directory animations when navigating
the directory stack.

Bug: 10417201
Change-Id: Ia2c508debc2bffffe6306eb9078afefef259dfe2
2013-09-18 17:12:25 -07:00
Jeff Sharkey
f6db154975 More UX updates around picking images.
When picking images or videos, hide the titles in recents, since the
thumbnails should speak for themselves.  Also respect new flag that
allows a directory to request their titles be hidden.

Show directory icon hint in grid mode when showing a thumbnail, to
remind user it's a directory.

Filter directories out of recents.  Hide most action bar icons on
phones, even when room.  Only show drawer on first launch.  Hide most
drawer headers to match spec.

Bug: 10710331
Change-Id: I0ef1973ddd62750f57345336388366eda1449720
2013-09-13 16:02:14 -07:00
Jeff Sharkey
3e1189b359 Move search to roots; Documents root; hide empty.
Documents searches now happen root-wide, instead of only under a
subdirectory.  Updates abstract class and flags to match.  Add flag
for a root to indicate it's empty, and hide empty roots in UI unless
creating.

Define "Documents" public directory and storage backend to contain
files.

Bug: 10712057, 10710865, 10710758
Change-Id: I8716367568969f9cb1d83927b2bf5a7013809350
2013-09-13 11:35:04 -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
4ec973925f More UX work for thumbnails, search, management.
Hide non-finished downloads from normal picker UI, but keep them
around in management mode.  Uses a Uri query parameter and a hidden
API on DocumentsProvider.

Scale thumbnails to fit viewport, always show MIME icon while waiting
on thumbnails, and crossfade between them.  Cancel thumbnail tasks
when views are recycled.

Filter directories out of search results for now.  Also leave sort
ordering from backend intact, since it's custom ranking.  Fix
SearchView interaction to dismiss properly and restore across
orientation and drawer state changes.

Hide most actions when drawer is open.  Invalidate RootInfo cache
when locale changes.  Apply sort ordering when showing recent create
directories.  Hide recent summary string when icon is enough for user
to disambiguate.

Bug: 10667184, 10665663
Change-Id: I331d3272a08c497f88dc659d9e112231cb35aa69
2013-09-10 16:40:36 -07:00
Jeff Sharkey
fb3445c9b3 Sort order is sticky for session, back leaves.
Instead of persisting sort order per-directory, the order is now
sticky for that session.  Any user selected sort order takes
precedence over an ordering hinted by a backend.

When a restored DocumentStack is untouched, the back key now leaves
the dialog, instead of popping from the restored stack.

Persist list/grid mode changes async.

Bug: 10659604, 10672973
Change-Id: I9f022a081c014537447c9c2af10e19d8cd9566aa
2013-09-09 17:35:48 -07:00