Commit Graph

101 Commits

Author SHA1 Message Date
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
c9d7150680 Manage mode shouldn't block for other providers.
When loading DocumentsUI in management mode (for Downloads), we
normally focus on a single authority and let the other providers
keep loading async.  However, when one of the providers kicks a
change notification, we end up blocking the main thread.

Simple fix is to move the blocking into the AsyncTask.

Bug: 17452691
Change-Id: Ie5212ad825b7df719690b29941c9ae9ba2cabe4b
2014-09-10 15:27:59 -07:00
Jeff Sharkey
cbce47001e Final pass at Material DocumentsUI.
Now with treatment for disabled and selected grid items.  Inverts
text and icons in selected drawer items.  Follows upstream color
changes to accent color.  Disables some verbose logging.

Bug: 15836082, 17281688
Change-Id: I97a1c055a2f1a537388a8f5669147618e9698870
2014-08-29 15:40:19 -07:00
Alan Viverette
03d30a573b Make sure we're obtaining themed drawables correctly
Change-Id: I446a3492f7bf5a897c5d698e61327af4b7840d85
2014-08-14 19:59:50 +00: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
770a532886 Separate MIME icons for some office formats.
Bug: 12548097
Change-Id: I11808854e0a4fae2636a04f75599e022b4a8440f
2014-08-08 22:23:32 +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
fa5ec770ec Use system collator for display names.
Continue sorting directory names first, but use system collator in
case-insensitive ordering.

Bug: 13545569
Change-Id: I24b314c9ef42f397bc96f474d9593bdefc0061d1
2014-08-06 00:56:45 +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
6963148e22 First pass at Materializing DocumentsUI!
Initial Material asset drop, which still needs some tweaking.  Moved
back to framework list item selectors, giving us ripples.  Using
accent color overlay for activated items.  Align all items to new
Material grid, including insetting list divider and resizing list
items on wide screens.

Fix obscure RTL drawing bug.

Still lots of work left.

Bug: 15836082
Change-Id: I729cc7dcb0271ee62b55d1e036fc28427fc0dd3d
2014-07-28 05:41:43 +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
ef5a7d78ab am ddba067f: am f521ee6f: am e3e2c471: Merge "Set ActionMode title to the number of selected files"
* commit 'ddba067f0fa1560ce3e1aff58d512824ac2e2d7d':
  Set ActionMode title to the number of selected files
2014-05-10 19:49:20 +00:00
Jeff Sharkey
f521ee6fa9 am e3e2c471: Merge "Set ActionMode title to the number of selected files"
* commit 'e3e2c471b2504335e99ed15975c3c5c9dfbf2795':
  Set ActionMode title to the number of selected files
2014-05-10 19:42:02 +00:00
Stefan Wysocki
22d3990273 Set ActionMode title to the number of selected files
After change of orientation ActionMode is recreated without previously
set title. It needs to be updated in onCreateActionMode callback.

Change-Id: If5f36e8ad6d1b5cf04ed242611fd037969d73517
2014-04-28 10:47:34 +02: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
Kenny Root
6a0db59901 resolved conflicts for merge of e0b14ea7 to master
Change-Id: Ie018d3e2eba1eb2d655c153880e1951b68c2bd51
2013-12-13 15:59:51 -08:00
Kenny Root
62d509d24f am 37c69fdd: Merge "Use java.util.Objects instead on internal API"
* commit '37c69fdd826f3973966430adc1abfbefc19bc16e':
  Use java.util.Objects instead on internal API
2013-12-13 14:17:29 -08:00
Kenny Root
e6585b32ea Use java.util.Objects instead on internal API
Not needed since java.util.Objects implements all the needed
functionality.

Change-Id: Icd31d49a9801d1705427f028e9ac927d58e7d34c
2013-12-13 13:40:30 -08:00
John Spurlock
6090995951 Remove unused imports from frameworks/base.
Change-Id: Ia1f99bd2c1105b0b0f70aa614f1f4a67b2840906
2013-11-20 11:31:47 -05:00
Jeff Sharkey
e2515ac296 Mask OOBE when filtering recent documents.
There is a data ownership issue related to recent documents Cursors,
and the loader and UI threads can end up traversing the same Cursor
at runtime.  This change masks OOBE crashes caused by this race until
we have time to fix cleanly.

Bug: 11736668
Change-Id: I2039a5edcf341fcaedacc2f08bde96fc5a271782
2013-11-18 17:41:56 -08:00
Jeff Sharkey
33819318f6 Suppress OperationCanceledException logging.
These exceptions are normal when an app has cancelled an outstanding
thumbnail request.

Bug: 11385378
Change-Id: I8aed5721b447cda5baf447ac7afd627aa1062863
2013-10-29 11:56:37 -07:00
Jeff Sharkey
5d321d472d Guard against missing document columns.
When filtering and sorting, guard against missing columns to avoid
crashing entire app.

Bug: 11377065
Change-Id: I04f035c918d743bcc84592f05e3ef9ad0ebfadce
2013-10-29 11:48:30 -07:00
Jeff Sharkey
db5ef12500 Use inotify to update DocumentsUI.
While user is actively looking at a directory, subscribe to inotify
events and notify of content changes to trigger requeries.  Reference
count the observers, since multiple cursors are regularly open during
requeries.

Fix leaking cursors on activity rotation; crazy loader ID generation
is no longer needed.

Bug: 10999396
Change-Id: Iddeb08a056fee80c93df8499874705bcd213a1e2
2013-10-25 17:51:04 -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
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
c24bbd4ce5 Long-press on GET_CONTENT app shows its details.
Matches ResolverActivity behavior.

Bug: 11319259
Change-Id: Id7f2a73b225e4cfd9bdef3b1c7cecb77d9bd2b90
2013-10-23 16:05:56 -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
46de7b5024 Update roots when data cleared, refresh UI.
Data cleared usually means accounts went away, so kick off roots
refresh.  Also update any visible UI after a refresh finishes.

Bug: 10899793
Change-Id: Id68c80b5e635e358cfd75f4961ce13cd1c7c5f82
2013-10-23 09:59:06 -07:00
Jeff Sharkey
b3d42635aa Treat document thumbnails as preemptable.
When a more important request comes along, preempt all outstanding
thumbnail requests.

Bug: 11317901
Change-Id: I164fc8d804bb9c471e6da3f8127228043b3ca482
2013-10-23 09:23:13 -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
d2e1e810a7 Drop <meta-data> support for DocumentsProviders.
Prebuilts have finished migrating to new <intent-filter> based
approach.  Also update isDocumentUri() to match new definition.

Bug: 11109484
Change-Id: Ib95e2c3f5a9ff70b8d5e411f68ad49d1990dae8c
2013-10-09 13:31:13 -07:00
Jeff Sharkey
78b1370308 Grab Activity reference before leaving fragment.
When creating a new directory, we spawn an AsyncTask and finish the
fragment.  This change keeps an Activity reference to report the
result back to.

Bug: 11137561
Change-Id: Icfccc5e50e8f53a50dced589e1564d64457e0ed0
2013-10-08 17:11:49 -07:00
Jeff Sharkey
bcc77b502b Merge "Add <intent-filter> support to <provider>." into klp-dev 2013-10-07 21:41:45 +00:00
Jeff Sharkey
567fdd9fba Merge "When launched into empty recents, show drawer." into klp-dev 2013-10-07 21:36:25 +00:00
Jeff Sharkey
85f5f81320 Add <intent-filter> support to <provider>.
For the new documents work, we're only interested in the subset of
ContentProviders that actually implement DocumentsContract.  Instead
of returning all providers, add <intent-filter> support to make it
easier to limit the set of returned ProviderInfo.

Define a well-known action for DocumentsProviders, and start using it
when querying for roots.  Continue supporting the old <meta-data>
approach until all apps have been updated.

Bug: 8599233
Change-Id: I05f049bba21311f5421738002f99ee214447c909
2013-10-07 14:19:13 -07:00
Jeff Sharkey
a82c2e24bc When launched into empty recents, show drawer.
Pull out drawer to give users more context about meaningful places
to navigate to.  Also fix bug where restored roots weren't being
highlighted.

Bug: 10852518
Change-Id: Id294f6923477ca4dc505c4b0a21a5bdf8b722cf4
2013-10-07 14:08:20 -07:00
Jeff Sharkey
ca25db0cb3 Custom pressed states, fixed column sizes.
Use custom pressed state assets.  Use fixed column sizes to prevent
truncating of long dates on small screens.

Also tear down any active CAB when switching fragments.

Bug: 11032418, 11028212
Change-Id: I2bf3dc3f693319b4b55cc901ed460f60faceba35
2013-10-04 14:48:08 -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
ee3e1603fd Fix animations, padding in RTL mode.
Show directory animations coming in from left-side when in RTL
language.  Also fix NinePatchDrawable to correctly mirror its padding
when auto-mirrored, and fix InsetDrawable to propagate the layout
direction to the wrapped Drawable.

Bug: 10987190, 11030793
Change-Id: I1213802a07d0c4ced93438df1e6ddf5aed3df677
2013-10-01 16:03:00 -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
3d52dc9c3a Make directories always enabled, for realz.
Bug: 10946731
Change-Id: I3eb132c53e47f31d1d1723ed2262823b54b1fce0
2013-09-26 19:42:52 -07:00
Jeff Sharkey
ee2f7df9ee Tighten flags enforcement, API to test Uris.
Check and throw if callers request invalid grant flags.  Add API to
test if a Uri is backend by a DocumentsProvider.

Bug: 10919391, 10935608
Change-Id: Ifa6afefb95983558c8c64dc15ddf650e9fe07080
2013-09-26 13:14:45 -07:00
Jeff Sharkey
2a030b05a9 Directories are always enabled; update assets.
Fix bug where item enabled state depended on FLAG_SUPPORTS_WRITE;
directories are now always enabled.  Also unifies enabled testing.

Bug: 10903210, 10946731
Change-Id: I241533d273dfe4a2146bb322a8bd93066bf4ef55
2013-09-26 10:54:19 -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