47 Commits

Author SHA1 Message Date
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
5bbae10c4c Normalize and improve menu fiddling.
Also, don't show copy/paste menu items (though they can still be invoked via keyboard).
Show copy to /move to instead.

Change-Id: I6e7bdf35bf370ea30d4f12a5a200ad38ff0221f4
2015-10-02 09:48:27 -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
Ben Kwa
91bec536ac DocumentsUI: Add an error screen to DirectoryFragment.
- Reorganize the directory fragment.
- Repurpose the "empty" view to hold a message and a button.
- Message is set to the "No items" message if a directory is empty.
- Message is set to the error message if a query error occurs.
- Don't close DocumentsUI when a query error occurs.

Change-Id: I4e1e96f23040606b410ac746252dcb0ab9286f04
2015-09-24 15:06:14 -07:00
Ben Kwa
3b19e31e18 Replace error/info footers with a message bar.
- Remove footers from DirectoryFragment.
- Add a new MessageBar fragment that can display error/info messages.

BUG=22638983

Change-Id: I2075ae8e4dca8954a09c1fc57ed62bb6d3bff7a9
2015-09-18 13:53:41 -07:00
Ben Kwa
304895a8bf Implement undo deletion.
Add a snackbar that pops up upon deleting files, giving the user a chance to
undo the operation.  If the user takes no action, the files are deleted.

This feature basically hides the files temporarily and pops up the said
snackbar, and if the user doesn' hit "undo", the files will be actually
deleted when the snackbar times out.

BUG=23518578

Change-Id: I181395aff967e62ca9287ed6fea2c7c8b8c09a71
2015-09-02 14:07:32 -07:00
Steve McKay
825324369a Improved files icon and activity label.
Change-Id: I7df661b88ce859f94d5f0bbd6687950140cbf39d
2015-07-27 12:03:26 -07:00
Jeff Sharkey
7f9cbf94f4 am 2656fa06: am 415cc610: am 8a265146: Merge "Selected count string needs plurals." into mnc-dev
* commit '2656fa065f820873695ba7743ad0a2ff7d913567':
  Selected count string needs plurals.
2015-06-11 18:47:58 +00:00
Jeff Sharkey
f491c72e4a Selected count string needs plurals.
Bug: 21717427
Change-Id: Ie0db8ac30244b022ca5838969fb085230bfc4499
2015-06-11 09:19:37 -07:00
Jeff Sharkey
9c9661f1b7 am 51b055d3: am e1844c83: am 5fc24733: New strings!
* commit '51b055d330279f5d0a38ad1c33540189e71356e8':
  New strings!
2015-06-11 02:34:28 +00:00
Daichi Hirono
0fe674db7e Merge "DocumentUI: Plish the design of footer bottons." 2015-06-11 01:10:30 +00:00
Jeff Sharkey
5fc247338d New strings!
Bug: 21737573, 21666225, 21756698, 21737666, 21471429
Change-Id: If1c5882d48f798d311f6d2b86277d3c13f06824e
2015-06-10 16:49:11 -07:00
Steve McKay
549636b2aa Fix typo in paste warning string.
BUG=21545788
Change-Id: I6e6265104bb8759c092f247223aef6c0426d844a
2015-06-03 11:23:45 -07:00
Ben Kwa
371dee33df Merge "Fix text on move notifications and toasts." 2015-06-02 14:20:36 +00:00
Ben Kwa
05b7b15310 Fix text on move notifications and toasts.
Some of these still said "copying" instead of "moving".

BUG=21366117

Change-Id: Ib50aaa05617f4f8a88069436a954b56f7be15a44
2015-05-28 16:34:24 -07:00
Daichi Hirono
ac990ceb38 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-27 15:32:30 -07:00
Steve McKay
bdbd0ffdf2 Add copy/paste menus to StandaloneMode.
Execute encoding/decoding of clipboard data in background...
was seeing a lot of red flashes for large file selections.
Move the majority of the Clipboard management code into a
shared DocumentClipper class.

Hide the copy-to and move-to menus in same.

BUG=20915675
Change-Id: Iff59e846afe6f1e90e6be816f5860d8b7efe3ae1
2015-05-27 14:55:14 -07:00
Ben Kwa
cc3452136e Fix UI for file moves.
Change the destination picker to have a "MOVE" button when moving files.

BUG=20880263

Change-Id: I69686a2f13daa0f0048113e1a2ad71dd37b3de1c
2015-05-19 15:22:36 -07: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
Ben Kwa
ed6fcb5929 Merge "Add a move feature to DocumentsUI." 2015-05-15 16:10:30 +00:00
Ben Kwa
0b4a3c47c6 Add a move feature to DocumentsUI.
Add a menu item (protected behind a system property) for moving files.
Add an extra to the copy intent for transfer mode (copy/move).
Add code to CopyService to delete files after copy when in move mode.
Add tests.

BUG=20559838

Change-Id: I983f57a528327d1e7a12982b599094aad2c856ed
2015-05-15 07:48:28 -07:00
Steve McKay
3da8afcf30 Add rudimentary keyboard operation support.
Currently only select-all/copy/paste of files is supported.
Note, I wasn't able to push all code into DirectoryFragment,
as Jeff Sharkey suggested, as it doesn't have direct access
to KeyEvents. Bridged this from StandaloneActivity.

Change-Id: I082c457c9c4372e689d3acbca9ae11cd5c554a63
2015-05-06 15:31:19 -07:00
Tomasz Mikolajewski
eafb267bd9 Update strings for the copy error dialog to match the latest specs.
Change-Id: I9adeff3e7e9435237b4b3337e4c687eec39b0335
2015-04-23 19:10:14 +02:00
Tomasz Mikolajewski
3b5adaaca1 Merge "Add an initial version of the copy failure dialog to DocumentsUI." 2015-04-15 04:02:14 +00: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
Tomasz Mikolajewski
61686593fd Add an initial version of the copy failure dialog to DocumentsUI.
Change-Id: Ibdfde661aa5b636570c017d3d00565c193d595a3
2015-04-15 12:39:27 +09:00
Ben Kwa
726cf70fd4 Enable directory copying.
- Enable directory picking for copying.
- Implement recursive copying inside the CopyService.
  - Pretty up the notification (use an indeterminate notification while
    calculating copy size)
  - Do two recursive walks: one to determine the size of the copy job,
    and then another to actually copy the files.
- Switch to using ContentProviderClient instances, for better error
  detection and handling
- Disable copying from the Recents view.

Change-Id: Ieb38cca80edf84a487547b68f0d6b328fc4d7701
2015-04-10 10:28:22 -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
Ben Kwa
3bcc9488a1 Add a "Select All" menu item and code.
Change-Id: I31ed8bff83d8a621a31ea5c2a0d1bb218f53d6e2
2015-03-31 09:12:37 -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
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
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
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
ed903213e6 More tweaks to match UX spec.
Fixed text colors to match spec.  Behold The Greyening!  Centered
loader spinner in grid mode.  Show multiple lines in status messages.

Add string descriptions.  Fix bug where toggling size setting didn't
kick a UI rebind.

Bug: 10510022
Change-Id: Icb41ebeb4de0fed8c04fc6cf5213af1587b72641
2013-09-10 20:04:11 -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
b448660a22 Request more documents when EXTRA_HAS_MORE.
Implement EXTRA_HAS_MORE and EXTRA_REQUEST_MORE contract with
document providers.  Providers can include EXTRA_HAS_MORE when
additional data is available with additional cost, such as a network
request.

Listen to content changes based on returned cursor instead of
original Uri.  Include a test backend to exercise.  UX still under
development.

Bug: 10350207
Change-Id: Iaa8954df55a1a1c0aa96eb8a4fd288e12c2fbb01
2013-08-18 22:32:02 -07:00
Jeff Sharkey
4eb407a832 Management actions, invalidate caches.
In manage mode, touching launches a VIEW intent for the file.  Also
adds actions for sharing and deleting.

Move roots and thumbnail caches into Application object, and flush
cache when thumbnail size changes.  Listen for package changes and
broadcasts that should invalidate our roots cache.

Pick default grid/list mode based on provider hint.

Bug: 10329983, 10330210, 10378834, 10330069
Change-Id: I75afb1c58ab71bb9d55852b1059da7257a376248
2013-08-18 21:14:02 -07:00
Jeff Sharkey
54ca29a5b9 DocumentsUI handles GET_CONTENT; hinting, errors.
Document browser now takes over all GET_CONTENT requests that request
openable Uris. It shows both storage backends and includes other apps
that respond to GET_CONTENT. Only grants transient read permissions.

Better guarding against throwing storage backends. Send sort order
and local-only hinting to backends.

Require that OPEN/CREATE_DOC users include openable category.

Bug: 10330112, 10329976, 10340741, 10331689, 10329971
Change-Id: Ieb8768a6d71201816046f4a4c48832061a313c28
2013-08-15 14:14:48 -07:00
Jeff Sharkey
9fb567b591 Settings, replace files, sorting by size, tweaks.
Add settings to show file sizes and advanced storage devices, both
disabled by default. Add sorting by size when enabled in settings.

Always show all documents, but only allow selection when they match
MIME filter. When creating, select entire filename on focus. When
creating, treat selected documents as replacement targets using that
exact Uri unless display name is changed.

Show available bytes for device roots. Show empty text label in
empty directories. Split grid backend and details into two separate
lines. Fix path label ordering when rendering recent directories.

Change-Id: I44c62e8adb8ca7d4355510a13d1ba975196a2d29
2013-08-07 16:29:51 -07:00
Jeff Sharkey
66516697a2 Storage roots in fragment, sectioned.
Move storage roots into a fragment, since it's not a drawer on
tablets.  Cluster and sort roots when displaying.  SectionedListAdapter
to make clustered roots easier to manage.  Add docs for root types.

Move roots cache into separate class to make it easier to share.

Change-Id: Ia0b92eade059e816324641f600c08026c0e268c9
2013-08-06 11:38:46 -07:00
Jeff Sharkey
ef7184a1aa More recents work; filtering and sorting.
Update DirectoryFragment to render List<Document>, making it more
general purpose.  Feed it documents either from a backend Cursor or
after resolving fields from a recents Cursor.  Start in recents when
no persisted stack available.  Synthesize a root for recents.

Local directory filtering and sorting using predicates and
comparators, all performed on background thread.  Introduce
UriDerivativeLoader which handles ContentObserver updates while
producing a derivative work of a Cursor.

Split data model classes into separate files.

Change-Id: Idb88b4ee22c58c8e508328e678877f7e4c978533
2013-08-05 20:14:12 -07:00
Jeff Sharkey
7e258b31e7 XML metadata for storage backend; custom icons.
Introduce XML metadata for storage backends, used to indicate if
custom roots should be queried, and provide any custom MIME type
icons inside that backend.

Parse metadata and resolve custom icons in UI.

Change-Id: Iec026c0b10845edff7a345d9389691ddf2c87a0e
2013-08-01 11:34:56 -07:00
Jeff Sharkey
bc2971d249 Sliding drawer for roots, move sorting, search.
Move backend root exploration into sliding drawer, and adjust action
bar when moving between modes.  Moves sorting into action bar spinner
instead of separate dialog.  Also add initial search support.

Change-Id: I70189911ba56ae6bd93d5c503a8600acd6d6c0c5
2013-07-31 21:03:09 -07:00
Jeff Sharkey
1482789374 Support sorting in storage UI.
Extract mode information into DisplayState which is now consistent
across directory traversal.  Use grid mode by default when working
with images.  Dialog to switch sort order.

Add testing UI to exercise until we have real clients.

Change-Id: Ic423584d4559732fb3d2aea9e0406b57d43f6e6d
2013-07-01 20:28:20 -07:00
Jeff Sharkey
be8b12e687 Support multi-select in storage UI.
When caller has specified that multiple documents are okay, enable
multi-select action mode.  Currently only allows document selection,
not directories.  Returns multiple documents through ClipData.

Fix bug where GridView was stuck with 2 columns on tablets.

Change-Id: Id49b29a86330639b56fa116d37e7f0d874980c5b
2013-07-01 17:00:14 -07:00
Jeff Sharkey
54e55b740f Iterate on storage UI.
Support both grid and list view of documents.  Show breadcrumb
navigation trail in action bar.  Start supporting file and directory
creation.

Change-Id: I93a973da7b0d4387a57fe719e7bb20944adb0290
2013-07-01 15:31:44 -07:00
Jeff Sharkey
9e0036ed7d External storage provider, document picker UI.
Continuing to flesh out storage backends by adding an external
storage document backend.  Still rough, but it can traverse files
and directories.

Early pass at OPEN/CREATE_DOC picker UI, which offers to traverse
any known storage backends.  Supports opening subdirectories and
returning a picked file.

Change-Id: Idc3554036b3816a93d9b465ee8a620746859d2ae
2013-05-01 17:44:42 -07:00