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
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
Delete "MANAGE_ROOT" activity.
Add intent filter for "BROWSE_DOWNLOADS".
Open by default on Downloads directory.
Bug: 27563427
Change-Id: I1f85dc17a0bc94b439a272847e4ab3bb347ead23
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
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
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
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
Also, rename "ManagerRootActivity" to "DownloadsActivity"
since because...well, it is almost always Downloads
and is specialized for this case.
Bug: 25809806
Change-Id: I496d34393d269d2120c8e214413cb87df8bf171d
Get out of the way of documentLaunchMode, let ActivityManager do the work for us.
Quiet some noisy logging.
Bug: 24413182
Change-Id: Ia48244871296f5c6b83a838dcde6496acbd45793
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
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
- 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
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
The activity is already disabled by default.
Fix an issue where copy support error handling was attempting to invoke StandaloneActivity.
Change-Id: If15c312a183cae1b2a84517e7f7b3123c11bd619
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
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
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
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
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
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
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
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
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
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
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
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