Commit Graph

188 Commits

Author SHA1 Message Date
Sudheer Shanka
e93db5123b Update DownloadStorageProvider to include MediaStore.Downloads.
Bug: 120879205
Test: manual
Test: atest DownloadProviderTests
Test: atest cts/tests/app/src/android/app/cts/DownloadManagerTest.java
Test: atest MediaProviderTests
Test: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*
Change-Id: I44be836899437d87fc1a00e5fe316c6b68488643
2019-01-28 08:20:47 -08:00
Jeff Sharkey
cb269aac7e Get CtsProviderTestCases building against API.
To help confirm that we're actually testing developer-visible
behaviors, we need to build against public APIs, since there have
been plenty of examples in this suite of "testing" hidden API
behaviors, which are then misleading to developers.

Bug: 120429729
Test: atest cts/tests/tests/provider/
Exempt-From-Owner-Approval: Trivial API annotations
Change-Id: I07fe33e54f611a6060217f0706fb99b809961f4d
2019-01-27 03:03:39 +00:00
Jeff Sharkey
96afa169f7 MediaStore should reflect state on disk.
It's an index of data scanned from disk, and it's been misleading to
let people mutate that data directly in MediaStore, since those
edits aren't durable in any way.  We never updated the metadata in
the underlying files, so any changes would be lost when moving
between devices.

This change moves to always re-scan files after they've been edited,
to ensure we pick up metadata changes.  It also ignores direct edit
attempts from apps.

Bug: 120711487
Test: atest android.media.cts.MediaScannerTest
Test: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*
Change-Id: I4cc3ae24d6c6b5f01fe4bb47610ccf162c81ce83
2019-01-02 11:46:50 -07:00
Jeff Sharkey
33e70bd6d2 Stop indexing location metadata.
The new ACCESS_MEDIA_LOCATION permission is designed to protect
the location metadata of items the caller doesn't own, but we can't
easily perform partial filtering of metadata from returned Cursor
objects based on per-row ownership, so we're forced to outright stop
indexing and returning location metadata via queries.

Apps can still easily obtain location metadata using ExifInterface.

Bug: 111892141
Test: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*
Change-Id: I4d99e6aa7d94bb0e7a50ce86eb1ab0f1ed142d4a
2018-12-04 13:17:09 -07:00
Jeff Sharkey
10887d5e5a Add support for "Audiobooks".
Bug: 113356944
Test: manual
Change-Id: Ifed54c41a533ed2d556dc6561ea498ec293991a6
2018-11-30 13:53:19 -07:00
mtk33169
7d95b92bf6 Merge "The JE about "android.process.media" will pop up when you eject the SD card after you set SD as internel phone storage" am: 83269acba7 am: a10effa6d4
am: 51a8342f5f

Change-Id: If85027b1fe54aca707906f93ac231f723815d34b
2018-11-12 20:14:47 -08:00
mtk33169
03ae44a8ff The JE about "android.process.media" will pop up when you eject the
SD card after you set SD as internel phone storage

This JE is happening due to null pointer access in makeEntryFor() in
MediaScanner.Java.
Before accessing the cursor, check if cursor is available and not null.
It is a safe check.

Bug: 119392250
Test: manual, ran test 20 times and it passed every times.
Change-Id: I23039281b63a0a6a411860eb5989cf20a5663c8f
2018-11-12 10:49:55 +00:00
Chong Zhang
d31872bc6a Merge "Color aspects keys information stored database" am: e4c918ba8e am: 89c615866a
am: e8c39f3ba0

Change-Id: I08c65f1b032fe92994202b64900cccc4f61adaef
2018-10-25 21:36:59 -07:00
Toshikazu Saito
5dfd47aacd Merge "Change caught exception in MediaScanner when ExifInterface is created" am: 0915931939 am: 544c774381
am: 92ccb271ce

Change-Id: If5c4f35573d0c73bf412b22406d04e70fba1f17c
2018-10-25 18:41:28 -07:00
nobuhiko saitou
839cc00889 Color aspects keys information stored database
Add keys for color aspects to VideoColumns in MediaStore.
And standard, transfer and range is stored to database.

Bug: 114329709
Test: put hdr/non-hdr contents and check media db

Change-Id: Id4bf27a35720f5cf5a60f08eb3f30314e1a1a167
2018-10-23 22:03:30 +00:00
Toshikazu Saito
a74c77991a Change caught exception in MediaScanner when ExifInterface is created
Some HEIF content happens RuntimeException in ExifInterface because
sniff is failed and MediaExtractor is not found. If exception happens,
scanning is aborted. So all contents may not be registered to database
correctly. To avoid that, this fix changes caught exception from
IOException to Exception for creating ExifInterface.

Bug: 117625929
Test: put some HEIF contents and check on photos

Change-Id: I6d32dec27c3be13993ec08f92d567b772d03ace9
2018-10-22 09:25:43 +00:00
Jeff Sharkey
954725874b Merge changes from topic "bugfix_content_path" am: aa642187cd am: f8ad474935
am: 8fe3754f1a

Change-Id: I1718c1c34860b23d7dbe22bb6350825483e41fd6
2018-10-01 12:06:55 -07:00
nobuhiko saitou
436b7b5634 Add OEM_SOUNDS_DIR variable
Add OEM_SOUNDS_DIR variable
And add judgment of OEM_SOUNDS_DIR in isSystemSoundWithMetadata.

Test: build and check sound like ringtone etc
Bug: 79123178

Change-Id: Ib432910c7a99695e73c88480b7028be1c9d04702
2018-09-20 16:05:54 +09:00
Jeff Sharkey
91e3cd4c6c More robust MTP-to-MIME-type mappings.
Recently in I830717428e72ac37c5ecd1f23d915aa878ef3744, we greatly
improved the underlying file-extension-to-MIME-type mappings defined
in libcore and used across the OS.

Instead of maintaining divergent mappings here in MediaFile, this
change delegates all file extension logic down to libcore, and
standardizes all MediaScanner internals on using MIME types.  To
register new file types in the future:

1. Add the MIME-to-extension registration in libcore.
2. Add the MIME-to-MTP mapping here in MediaFile.

This change also ensures that unknown MIME types are surfaced
across MTP, using constants like FORMAT_UNDEFINED_AUDIO for audio/*
until an explicit format is defined.

We now surface WMA/WMV file formats, even if the device can't
natively play them back, since we still want to offer the ability
for users to copy them around, and the user may have a third-party
app capable of playing them.

Keeps @UnsupportedAppUsage intact for now.

Bug: 111268862, 112162449
Test: atest frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaFileTest.java
Test: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*
Change-Id: I2f6a5411bc215f776f00e0f9a4b7d825b10b377d
2018-08-28 13:02:35 -06:00
Mathew Inwood
473b9d5bfc Add @UnsupportedAppUsage annotations
For packages:
  android.media.tv
  android.media.soundtrigger
  android.media.session
  android.media.projection
  android.media.midi
  android.media.effect.effects
  android.media.effect
  android.media.browse
  android.media.audiopolicy
  android.media.audiofx
  android.media

This is an automatically generated CL. See go/UnsupportedAppUsage
for more details.

Exempted-From-Owner-Approval: Mechanical changes to the codebase
which have been approved by Android API council and announced on
android-eng@

Bug: 110868826
Test: m
Change-Id: I9b58cb2d1e02d9156a7b0d19c1feff4bcd2c53a9
Merged-In: I3bd40136d7fc948f66eca6b2d139c15e39c5a248
2018-08-17 09:07:01 +01:00
Mathew Inwood
31a792ac29 Add @UnsupportedAppUsage annotations
For packages:
  android.media.tv
  android.media.soundtrigger
  android.media.session
  android.media.projection
  android.media.midi
  android.media.effect.effects
  android.media.effect
  android.media.browse
  android.media.audiopolicy
  android.media.audiofx
  android.media

This is an automatically generated CL. See go/UnsupportedAppUsage
for more details.

Exempted-From-Owner-Approval: Mechanical changes to the codebase
which have been approved by Android API council and announced on
android-eng@

Bug: 110868826
Test: m
Change-Id: I3bd40136d7fc948f66eca6b2d139c15e39c5a248
2018-08-17 08:54:26 +01:00
Jeff Sharkey
fac57e600d Change MEDIA_TYPE through Files table.
As part of implementing strongly-typed storage in the Q release, we've
needed to limit the items visible in strongly-typed views.  (For
example, the Images view must only include images.)

This change fixes a place inside the OS that was implicitly relying on
update() leaking between these strong data types.  If we're changing
the media type of an already-scanned file, we need to do that through
the Files table first, and then we can update the details at the
strongly-typed Uri.

Bug: 112467162
Test: atest android.media.cts.MediaScannerTest
Change-Id: I61c8b62e04f6542882745a20e9aed96275427b5f
2018-08-14 15:07:32 -06:00
Marco Nelissen
bab75909fa Don't treat failed scans as valid media files
Instead, add them to the MediaProvider as non-media files.
Bug: 77656952
Test: manual, CTS

Change-Id: I3b72b3e28f481b6775349337588225daeacbe552
2018-04-25 14:39:04 -07:00
Chong Zhang
3edfdab205 insert exif info for HEIF files
bug: 76125031
Test: push some HEIC files with rotation to sdcard, and query
the content provider to see the orientation field is set.

Change-Id: I8235cbcd2aad2f0088d771ee53d2ca87cd85800d
2018-03-22 16:27:50 -07:00
Marco Nelissen
6db0f4dac8 Merge "Rework thumbnail cleanup" into oc-mr1-dev
am: b20a329f4c

Change-Id: I17b77312edb4fa03af1e89543ed5c27f4501d51c
2018-03-09 23:00:20 +00:00
Marco Nelissen
6d2096f388 Rework thumbnail cleanup
Bug: 63766886
Test: ran CTS tests
Change-Id: I1f92bb014e275eafe3f42aef1f8c817f187c6608
2018-03-08 21:46:15 +00:00
Jaekyun Seok
c31033f43c Read media files from /product/media/audio
Bug: 64195575
Test: tested reading media files from /product/media/audio after moving
files from /system/media/audio to /product/media/audio

Change-Id: Ic690965e2b5f0e237d21df1db0fd0354a76d7c90
2018-01-25 12:44:57 +09:00
Narayan Kamath
492e9e851c Properly guard access to CloseGuard in finalizers.
CloseGuard instances are allocated in constructors and usually
assigned to final fields. This implies they're non-null in finalizers
except in the case where the constructor throws. We add a null check
to make sure we can continue cleaning up other state in the finalizer
(if applicable).

Also, this change decouples closeguard warnings in constructors
from other state based logic. This because the logic there is usually
duplicated with the call to close().

NOTE: This change is not a "complete" fix. Many of these finalizers
are broken in the case where <init> throws. The only objective of
this change is to make such errors more obvious.

Note that some of these classes don't have CTS tests.

Test: make, CtsMediaTestCases.
Bug: 35609098

Change-Id: I24d9e0215f80e44914dba8ab99b6312fd6ed1fc0
2017-04-03 18:12:04 +01:00
Jean-Michel Trivi
85bdb72cba MediaScanner: check build fingerprint for system sound scan am: 17d2440090
am: 330249109a

Change-Id: I52040c27bb68d282821db43d48b956e949c9e1de
2016-09-14 22:37:32 +00:00
Jean-Michel Trivi
17d2440090 MediaScanner: check build fingerprint for system sound scan
Always scan notification, ringtones and alarm files under /system
  when the build fingerprint has changed since the last scan,
  because the dates on those files is not set correctly
  (by design), and hence cannot be trusted in the date-based
  scanning logic.
Remove some dead code

Bug 30476971

Change-Id: I638c787dc177f7f5fb17c1c2a576be190c1c85f9
2016-09-14 12:48:50 -07:00
Bryan Mawhinney
1cba847a71 Merge \"Make MediaScanner extract \"date taken\" from videos, if present\" into nyc-mr1-dev
am: d63dbfdb6b

Change-Id: I5ea0eafbc2e122f2756098ac98b50c03fe773be5
2016-07-07 09:28:03 +00:00
Bryan Mawhinney
5f0c3a5319 Make MediaScanner extract "date taken" from videos, if present
Bug: 29530912
Change-Id: I0f6847a4844e06609cd990e7727edddef4c028fa
2016-06-29 17:59:51 +01:00
Bartosz Bialek
6bca637ea2 Merge "Do not scan a file which cannot be read" am: 258baa3
am: 3fc27c3

* commit '3fc27c3444e962776815f9bfbaedbc60a9f9571e':
  Do not scan a file which cannot be read
2016-03-17 15:50:36 +00:00
Marco Nelissen
258baa35c0 Merge "Do not scan a file which cannot be read" 2016-03-17 15:42:02 +00:00
Jeff Sharkey
9dd3b2162d Set default ringtones through RingtoneManager.
RingtoneManager is the public API that everyone should be going
through, and it now has the side-effect of caching the set ringtone
to make it available before CE storage is unlocked.

Bug: 27435331
Change-Id: I30ed4e2df2ef1e4fd47f947c70845aaa74356384
2016-03-05 17:43:22 -07:00
Bartosz Bialek
6124cddc62 Do not scan a file which cannot be read
When the media scanner is invoked to scan a file which it cannot access
(e.g. one in the app-private directories) the related database entry
will be created anyway, which doesn't make sense. This results in having
broken entries showed up in e.g. Album app.

This fix is to prevent scanning files which are inaccessible.

Change-Id: I5b4909bf709c82d66e891f3e7f6890febc90c6eb
2016-02-17 15:31:39 +01:00
Jaesung Chung
5a8b9627c7 Extend MediaScanner and MtpDatabase to support RAW image files
Bug: 25871812
Change-Id: Iee92632585dc9020238a9b562defd06d6d2a91dc
2016-01-19 09:43:35 +09:00
Marco Nelissen
68528911b9 Fix race condition when setting default ringtones
If the device was powered off during first boot, after media scanner
inserted some entries but before the default ringtone settings were
set (or committed to disk), the default settings would not be set
on subsequent boots.

Bug: 18625739
Bug: 22349910
Bug: 25633323
Change-Id: I8ff5d3c4f842297d0675e1f5cbe17c0709a14158
2016-01-14 00:59:38 -08:00
Marco Nelissen
7d9fab680e Fix race condition when setting default ringtones
If the device was powered off during first boot, after media scanner
inserted some entries but before the default ringtone settings were
set (or committed to disk), the default settings would not be set
on subsequent boots.

Bug: 18625739
Bug: 22349910
Bug: 25633323
Change-Id: I8ff5d3c4f842297d0675e1f5cbe17c0709a14158
2016-01-12 17:12:36 +00:00
Jeff Sharkey
60cfad80bd Discourage use of "_data" column.
Moving forward, all client file access really needs to be going
through explicit APIs like openFileDescriptor(), since that allows
the provider to better protect its underlying files.

This change also changes several classes to use the AutoClosable
pattern, which enables try-with-resources usage.  Older release()
methods are deprecated in favor of close().

Uniformly apply CloseGuard across several classes, using
AtomicBoolean to avoid double-freeing, and fix several resource
leaks and bugs related to MediaScanner allocation.  Switch
MediaScanner and friends to use public API instead of raw AIDL calls.

Bug: 22958127
Change-Id: Id722379f72c9e4b80d8b72550d7ce90e5e2bc786
2016-01-06 10:19:35 -07:00
Ian Pedowitz
05ce0c6bb0 Revert "Fix race condition when setting default ringtones"
This reverts commit f2cb9341ff.

Change-Id: I151972052aea47bf8c6823eb8bbf8161c5a7a4f0
2015-11-11 21:38:04 +00:00
Marco Nelissen
f2cb9341ff Fix race condition when setting default ringtones
If the device was powered off during first boot, after media scanner
inserted some entries but before the default ringtone settings were
set (or committed to disk), the default settings would not be set
on subsequent boots.

Bug: 18625739
Bug: 22349910
Change-Id: Iff07da59a9c6d53bf2950bd107ee74d02b7f48d6
2015-11-06 10:50:47 -08:00
Jeff Sharkey
4887789e44 Progress towards dynamic storage support.
Storage devices are no longer hard-coded, and instead bubble up from
whatever Disk and VolumeBase that vold uncovered, turning into
sibling Java objects in MountService.  We now treat vold events as
the source-of-truth for state, and synchronize our state by asking
vold to "reset" whenever we reconnect.

We've now moved to a model where all storage devices are mounted in
the root mount namespace (user boundaries protected with GIDs), so
we no longer need app-to-vold path translation.  This also means that
zygote only needs to bind mount the user-specific /mnt/user/n/ path
onto /storage/self/ to make legacy paths like /sdcard work.  This
grealy simplifies a lot of system code.

Many parts of the platform depend on a primary storage device always
being present, so we hack together a stub StorageVolume when vold
doesn't have a volume ready yet.

StorageVolume isn't really a volume anymore; it's the user-specific
view onto a volume, so MountService now filters and builds them
based on the calling user.  StorageVolume is now immutable, making
it easier to reason about.

Environment now builds all of its paths dynamically based on active
volumes.  Adds utility methods to turn int types and flags into
user-readable strings for debugging purposes.

Remove UMS sharing support for now, since no current devices support
it; MTP is the recommended solution going forward because it offers
better multi-user support.

Simplify unmount logic, since vold will now gladly trigger EJECTING
broadcast and kill stubborn processes.

Bug: 19993667
Change-Id: I9842280e61974c91bae15d764e386969aedcd338
2015-03-30 19:46:23 -07:00
Marco Nelissen
a4d4c200e4 am 1ed64c65: am 899c15ef: am db816cef: Merge "Make sure we clean up"
* commit '1ed64c65a7b4d33799ca42cb4422d8382929cac2':
  Make sure we clean up
2014-07-01 18:28:56 +00:00
Mattias Nilsson
f3fd18d1b4 Make sure we clean up
pruneDeadThumbnailFile need to close its cursor
in a finally block to avoid leak resouces.

Change-Id: I2646b91970e47ee80a721a2452215b7cae149d10
2014-05-27 09:37:42 +02:00
Elliott Hughes
10596fbcce resolved conflicts for merge of 3ce4f3d0 to master
Change-Id: Id5c5997ad8f801b32e1dbd97413ea42e38c27210
2014-04-28 13:53:25 -07:00
Elliott Hughes
34385d352d Track libcore.os' move to android.system.
(This is partial, but should cover everything in AOSP master except
for the zygote.)

Change-Id: I1042c99245765746a744c44e714095cb2c6cb75d
2014-04-28 11:11:32 -07:00
Marco Nelissen
c806d5393f am ebd6a2d2: am eded9e3b: am adcf38c9: Merge "Release DrmManagerClient resources"
* commit 'ebd6a2d2710ebf7196a399d6d5a2f0745844310b':
  Release DrmManagerClient resources
2014-04-25 14:55:11 +00:00
Mattias Nilsson
1b37c3bddc Release DrmManagerClient resources
Call release for DrmManagerClient to avoid resource leaks

Introduced by following commit (5d143ad4a8f...),
"Media scanner support for FL(Forward Lock) DRM file types"

Change-Id: Ic3c458579f4e99b3b072a2e13362d1996b982589
2014-04-15 14:03:45 +09:00
Marco Nelissen
d5a579765e Fix regression
Don't crash if an item is inserted without a slash in its path.
b/13076381

Change-Id: I5cde2adaa038201e0692af3c8ca92540ce75f083
2014-02-18 16:06:38 -08:00
Marco Nelissen
93a5845d1a Cache media/nomedia paths
Instead of checking all the parents of every path for presence of
a .nomedia file every time a new entry is inserted, build a cache
of paths and use that when possible.

Change-Id: I5b912fd54473db8f96d3511cbc2715e0b69dd16b
2014-02-04 12:52:10 -08:00
Ashok Bhat
075e9a19ce AArch64: Use long for pointers in media classes
For storing pointers, long is used in media classes,
as native pointers can be 64-bit.

In addition, some minor changes have been done
to conform with standard JNI practice (e.g. use
of jint instead of int in JNI function prototypes)

Change-Id: Idc4ca0124d03df7f9cef412488abafd020e5e774
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
Signed-off-by: Marcus Oakland <marcus.oakland@arm.com>
Signed-off-by: Kévin PETIT <kevin.petit@arm.com>
2014-01-15 13:09:27 +00:00
Elliott Hughes
dcb1a58cf9 If media wants ASCII lowercasing, it needs to ask for it.
http://elliotth.blogspot.com/2012/01/beware-convenience-methods.html

Use toLowerCase(Locale.ROOT) if you want ASCII for machine consumption,
and use toLowerCase(Locale.getDefault()) if you want the user's locale's
casing rules for human consumption.

Bug: https://code.google.com/p/android/issues/detail?id=58359
Change-Id: Id9005a17e34217a81bef3b40031b9e2e6272f45d
2013-08-02 10:03:53 -07:00
Marco Nelissen
66dfcd465c When scanning a single file, take .nomedia into account
Make scanSingleFile behave the same way as scanMtpFile, by taking into
account whether there's a .nomedia file guarding the file being scanned.
Without this, downloaded (or otherwise explicitly scanned) images/video/music
will appear in Gallery and Music even if a .nomedia file is hiding them.

Change-Id: Ib9ad4bda1b9a942f79a37ccd8e6a54d57710f528
2013-02-27 16:53:47 -08:00
Dianne Hackborn
35654b61e8 More work on App Ops service.
Implemented reading and writing state to retain information
across boots, API to retrieve state from it, improved location
manager interaction to monitor both coarse and fine access
and only note operations when location data is being delivered
back to app (not when it is just registering to get the data at
some time in the future).

Also implement tracking of read/write ops on contacts and the
call log.  This involved tweaking the content provider protocol
to pass over the name of the calling package, and some
infrastructure in the ContentProvider transport to note incoming
calls with the app ops service.  The contacts provider and call
log provider turn this on for themselves.

This also implements some of the mechanics of being able to ignore
incoming provider calls...  all that is left are some new APIs for
the real content provider implementation to be involved with
providing the correct behavior for query() (return an empty
cursor with the right columns) and insert() (need to figure out
what URI to return).

Change-Id: I36ebbcd63dee58264a480f3d3786891ca7cbdb4c
2013-01-16 12:11:01 -08:00