Commit Graph

40 Commits

Author SHA1 Message Date
Steve McKay
008e948c3e Undo generalization isDownloads > supportsChildren.
Move root comparison logic into RootInfo.
Move shared string comparison code to Shared.

Change-Id: I3267b496a165ad3cae773783db0e79df2eb118e8
2016-02-18 15:59:52 -08:00
Steve McKay
4a1ca86f47 Don't show recents as copy/move destination.
Revoke "SUPPORTS_CREATE" from the Recents faux-Root.
Don't allow copy to roots that don't support children.
Add friendly access methods to Root info for checking flags.
Only show spacer between roots sections when both non-empty.
Add docs explaining the "apps" section in roots.
Improve logic in the "canCopy" method.

Bug: 27232639
Change-Id: If78ee0ff73f0788de863345b560aecd41b23dfb9
2016-02-17 18:52:03 -08:00
Ben Kwa
2036dad877 Introduce ChromeOS-style keyboard navigation.
- Turn the DirectoryFragment (DF) and the RootsFragment (RF) into
  top-level views, and allow switching between them via the tab key.

- Disallow arrow-key navigation from switching the user between the
  DF and RF.

- When nothing is explicitly focused, make navigation keys focus the
  DF.  This makes it so that if a user opens DocumentsUI and just starts
  pressing arrow keys, they'll navigate in the directory listing.

- When restoring focus on the DF and RF, remember the last thing that
  was focused, and restore focus on that thing.

BUG=25195767
BUG=25121367

Change-Id: I00e20cbdbe9edfe269fb356440a93ef5d67c5298
(cherry picked from commit 1c9f9222e5)
2016-02-11 14:16:04 +00:00
Aga Wronska
d8c25f8908 Merge "Stop current root reloading when it is clicked again" 2016-02-03 22:55:14 +00:00
Aga Wronska
45f75e2a81 Stop current root reloading when it is clicked again
Bug: 25079217
Change-Id: I5d32be06d9eda4e5aced965030cce863e8a1965d
2016-02-03 10:09:35 -08:00
Aga Wronska
18e191c1a8 Merge "Fix root selection after search" 2016-02-03 01:23:41 +00:00
Aga Wronska
8e1c9637ec Fix root selection after search
Bug: 26160443
Change-Id: Ib05719c8219565db7ef88ce41227079537d1fac4
2016-02-02 15:04:52 -08:00
Steve McKay
3ce95951bd Show view mode button in action bar on Downloads.
A grab bag also with:
Report Roots while loading (in DEBUG).
Null check DirectoryFragment before calling methods on it.

Bug:26936660,26143397
Change-Id: Ief2c943eb24fb14349bbd9cc4a5fbd670f57d567
2016-02-02 14:51:04 -08:00
Ben Kwa
723799858a Add MetricsLogger calls to DocumentsUI.
- Create new categories in MetricsLogger for DocumentsUI events.
- Add logging code to DocumentsUI for launch events and viewing roots.

BUG=26737132

Change-Id: Ib703878a39dd03b57e68a4d5a1d6cf8fe2936c5a
2016-01-26 14:15:42 -08:00
Ben Kwa
e95c321fd9 Move the "home" root below the divider.
BUG=26143357

Change-Id: Ia48aa141f265aa3b1b6a07ec966dc9da6d283de3
2016-01-08 17:24:59 -08:00
Steve McKay
c6a4cd8c0f Add "Home" directory support.
Update FilesActivityUiTests to verify Home is present
    and that clicking a root sets the title accordingly.
Guard addition of WRITABLE flag with a volume test.

Bug: 25147243
Change-Id: Ic20372737cae08a82af0aade0c0dbbd8c22d5f34
2015-11-19 15:56:05 -08:00
Steve McKay
35820cfe96 Handle SpacerItem on click correctly.
Bug: 13319202
Change-Id: I22f556f512f55cc09eead462a4eb8cea99dc5e64
2015-11-03 14:01:34 -08:00
Daichi Hirono
abf397458d Show MTP roots at the bottom of root list.
MTP is removable device, so we should show it at the buttom of volume
list.

BUG=24813611

Change-Id: I0b78405ec169d576de4c709bbe21b5bb9b856b87
2015-10-27 09:12:04 +09:00
Ben Kwa
0c64308240 Reorganize DocumentsUI roots fragment to match mocks.
BUG=24329078

Change-Id: I80fe7b939772d929236aa9e0e6fa44cdb606a038
2015-10-13 07:41:06 -07:00
Steve McKay
7a3b88cf56 Move State to a separate file.
Update remaining local DEBUG definitions to use Shared.DEBUG.

Change-Id: I3ed4d4b184836da161adff14bd3d9ca01b435847
2015-09-23 17:22:28 -07:00
Steve McKay
58efce36cd Use type inference where possible.
Normalize use of Annotations like VisibleForTesting, Nullable and so on.
Also, fix a small issue where we were not doubling the marging on cells when calculating columns for grid view.

Change-Id: Ia02f683c2682fa8d0963d13f253a359911d27965
2015-08-20 13:10:07 -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
Steve McKay
e934ce6f84 Implement a standalone file manager activity.
Change-Id: Iaf86ef416b979cea4ab3890d3a26f09741392c3d
2015-03-25 14:38:56 -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
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
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
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
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
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
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
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
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
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
28c05ee893 Item layout tweaking, hook up more assets.
Update layouts for items in both list and grid mode to reflect
latest UX.  Use new card background in grid mode, and apply gradient
treatment over thumbnails.

Visibly mark currently selected root.

Bug: 10510022
Change-Id: I36b290d7082b5cdfd7b3167df7d976032bc01bd6
2013-09-06 13:57:57 -07:00
Jeff Sharkey
348ad6866b Filter roots based on incoming request.
When incoming request is for local-only content, or for ACTION_CREATE,
only include roots advertise those features.

Filters roots based on the allowed MIME types and the supported types
advertised by each root.  This supports displaying Images and Audio
roots only when requesting those content types.  Applies the same
filter when deciding which roots to query for recents.

Fixes advanced filtering instead of limiting to just devices. Update
sorting so that Recent always appears first. Add testing support for
LOCAL_ONLY.

Bug: 10597317, 10526535
Change-Id: Ic5ccf475c4fe93fd52b29388d369d7f6915c0c42
2013-09-02 17:43:14 -07:00
Jeff Sharkey
ae9b51bfa3 Refactoring of DocumentsContract.
Combines related columns and constants onto the same class so they
are easier to discover.  Move back to surfacing roots with columns
so they are consistent with documents.

Advanced roots are represented with a flag instead of distinct
types.  Flags to indicate supporting of well-known media types,
instead of arbitrary an MIME filter.  Reintroduce well-formed rootId
to support recents.

Always use the expanded version of "documents" in constants, methods,
and argument names.

Refactor DocumentProvider method names to clearly distinguish if
a single item or multiple could be returned, and of which type.  Add
documentation to clearly define which methods have already been
overridden.

Bug: 10567506, 10567557
Change-Id: I981f26ab82f2b520a19aa1ce66f659de50d7fac0
2013-08-31 16:58:28 -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
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
a5599ef636 Documents management mode; API adjustment.
Create documents manage mode to support Downloads and transient
storage devices.  Locks user into requested backend root, and forces
file sizes on and sorting by last modified.

Separate API constants for Documents versus Roots, and give concrete
MIME types for roots.

Treat null sizes as unknown.  Documents are always enabled in list
so that divider is drawn.  Mark external storage file as writable.

Bug: 10329983, 10332993, 10332952
Change-Id: I05f4fdf5b04041a38e1ba7fb30202a3b0c615bf6
2013-08-15 16:25:30 -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
b156f4bf8c Recents in create, uniform item layouts.
Show recent directories in a separate fragment, and save as serialized
versions of new DirectoryStack. Cleaner behavior around recents and
search, instead of treating them as pseudo-Documents.

More uniform item layouts between list and grid, including both date
and size information, and originating storage root in recents. Avoid
clashing directory loaders by assigning unique numbers. Promote
list/grid switching up into activity.

Change-Id: I9a93460b896067ca036d7e772eeabde31face2e1
2013-08-06 18:16:21 -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