118 Commits

Author SHA1 Message Date
Jerry Zhang
e30d5723e4 Merge "Add support for MTP perceived device type property." am: b6ed343e85 am: 7644b885c7
am: 136f37b88f

Change-Id: I446cd52e5fd8cda48e9af46ee3faee5578cae286
2017-03-20 21:54:28 +00:00
Jerry Zhang
13bb2f4dda Add support for MTP perceived device type property.
Property value is based on the particular device.
This allows some hosts (windows) to apply a device
specific icon in file explorer.

Test: Connect device to windows, verify new icon
Bug: 25360563
Change-Id: I9d3468ca8c01a6f0d42ad543aef11ed265b6c825
2017-01-19 11:26:35 -08:00
Alex Klyubin
f271c6d266 resolve merge conflicts of b53d984 to master
Change-Id: I3fe63a5c0193c720b8ec4ca53834096de8433f26
2016-12-22 12:00:24 -08:00
Alex Klyubin
abdc2b47b3 Make users of MtpServer fill in DeviceInfo field values
This is part of weaning apps off accessing system identifiers via
system properties API. Apps should use android.os.Build API instead.

Bug: 33700679
Test: Enable MTP mode then check that mtp-detect output same as before this commit
Change-Id: I4e6696cdee18b9c3e987c432c095911e85a997db
2016-12-21 13:56:28 -08:00
Jerry Zhang
d9291d55f6 Merge "Modify UsbDeviceManager stack to allow MtpServer to use FunctionFS drivers." am: 1975240f17 am: 830874dbe7 am: 88672d7d29
am: 11dc0eccfb

Change-Id: Ibafebe4877052595cb34626bde9ac6fba1983fb0
2016-12-13 01:02:55 +00:00
Jerry Zhang
bb598ee16f Modify UsbDeviceManager stack to allow MtpServer to use FunctionFS drivers.
Functionfs requires MtpServer to write descriptors before the device can be
configured. This adds a new configure call that will occur only when
functions are changed (new argument added to updateUsbStateBroadcast for this)
and be called after sys.usb.config is changed but before the waitForState
call to ensure compatibility with configfs devices.

Bug: 30976142
Change-Id: I7e94a5847d3b19c0fd75139e1b15a3f2a1cea01d
Test: Manual
2016-12-12 11:05:32 -08:00
Philip P. Moltmann
b828b77985 Properly close USB device connection in Mtp device
Test: Built
Fixes: 32073045
Change-Id: I05179377532c1bd4dff1f4a4e0e837cb645317e3
2016-10-17 11:19:58 -07:00
Philip P. Moltmann
5201f1e61c Do not access MTP devices when disabled.
The USB data transfer is disabled we should not allow access MTP devices
(e.g.
usb sticks). We have two ways of accessing them: Either by mounting them
or by creating a MTPDevice in an app.

Of course an app could implement implement their own MTPDevice
implementation. In this case we cannot enforce the policy without
completely suppressing all MTP USB devices which would be too
restrictive.

Note: When the policy is set we do _not_ disconnect already connected
MTP devices

Fixes: 31472955
Change-Id: I6080c48c49657102774b2b3b4d89ff030245a266
2016-09-30 22:24:23 +00:00
Philip P. Moltmann
ec3cbb2a66 Do not access MTP devices when disabled.
The USB data transfer is disabled we should not allow access MTP devices (e.g.
usb sticks). We have two ways of accessing them: Either by mounting them
or by creating a MTPDevice in an app.

Of course an app could implement implement their own MTPDevice
implementation. In this case we cannot enforce the policy without
completely suppressing all MTP USB devices which would be too
restrictive.

Note: When the policy is set we do _not_ disconnect already connected
MTP devices

Fixes: 31472955
Change-Id: I6080c48c49657102774b2b3b4d89ff030245a266
2016-09-14 13:29:45 -07:00
TreeHugger Robot
e7d27dd2fc Merge "Add onTerminate runner to MtpServer." 2016-07-11 03:04:03 +00:00
Daichi Hirono
f1d69ee247 Add onTerminate runner to MtpServer.
The CL adds onTerminate runner to MtpServer constructor's arguments to
know when MtpServer stops its thread.

BUG=29971895

Change-Id: I685ad6bc663f76e04ae3837129cbe12805d2093c
2016-07-11 10:15:41 +09:00
Daichi Hirono
0639fe0aa9 Add @NonNull / @Nullable annotations to android.mtp API.
BUG=26758882

Change-Id: Ic86d2253114b487d68a069f3e63f19b200d6cb97
2016-07-08 11:28:00 +09:00
Daichi Hirono
452e8fe559 Add NonNull and Nullable annotations to MtpDevice.
BUG=26758882

Change-Id: I5fa7130b671c71aefca848c109bf37389f57b9da
2016-07-05 17:29:48 +09:00
Daichi Hirono
86c1a9bf60 Remove MTP API marked as @removed.
BUG=28146379

Change-Id: I4f0a380941663eac423f8a5633447f1eceb516cb
2016-05-26 16:39:21 +09:00
Daichi Hirono
4dfde6079c Merge "Add throws definition to MtpDevice#readEvent." into nyc-dev 2016-04-22 00:00:33 +00:00
Daichi Hirono
60fa3615bc Add throws definition to MtpDevice#readEvent.
Previously MtpDevice#readEvent does not have throws IOException at its
definition, though internal JNI functions throws it.

BUG=28254719
Change-Id: I4e6cf8003d168b7e732c4b4eb2eafe52a12442c2
2016-04-20 14:48:23 +09:00
Daichi Hirono
399df701a1 Handle API review comments from the council.
* MtpEvent: Remove public constructor since properties cannot be set
   directly.
 * MtpEvent: Move event constants from MtpConstants to MtpEvent class.
 * getPartialObject64: the byte[] must have indices of Integer.MAX_VALUE
   at most. Document as such.
 * sendObjectInfo: what happens if the transfer doesn’t succeed? How is
   the app notified? If there is a reason for the failure communicated,
   how does the app find this out? Add docs.
 * Add isOperationSupported(int) and isEventSupported(int) helpers.

Change-Id: Ifd80016d2ddd3b66d5c45f6da76b6133f0c9a617
Fixes: 28146379
2016-04-18 13:03:29 +09:00
Daichi Hirono
fe259319e6 Close MTP database when MtpServer's thread is terminated.
Fix: 28030321
Change-Id: I7efe59b651a62ca917ba74312a80b56c0564e060
(cherry picked from commit dd383597c4bd85044bcaf23f1f16489f2c059ae0)
2016-04-07 05:47:41 +00:00
Daichi Hirono
1337deb6ea Update the comment of MtpDevice#getObjectSizeLong
BUG=27805369

Change-Id: I63762fedf540e89e9ca811a143cb178881ef1830
2016-03-28 04:37:14 +00:00
Daichi Hirono
787821bce4 Add getObjectSizeLong hidden API to MtpDevice class.
In the MTP spec, the object size is stored in MtpObjectInfo as unsigned
32-bit integer and fetched by the getObjectInfo operation. For the
objects that are more than 4GB, the object size is provided as one of
extra properties, which are fetched by different operation.

The CL adds to getObjectSizeLong hidden method to Java MtpDevice class
so that client code can obtain 4GB+ object size.

BUG=27805369

Change-Id: I8a5b85c8db39734f00e49709c61b271eb48ff33d
2016-03-25 20:06:13 +09:00
Daichi Hirono
486ad2e73c Fix argument type in MtpDatabase#getObjectPropertyValue.
In MTP code, we use jint for ID (e.g. object handle) and code (property
code). But getObjectPropertyValue takes jlong and it causes missing
property values in Java code. Previously we passed the long value to
Map<Integer, MtpPropertyGroup>#get(Integer) and the compiler somehow
accepted the code. However it actually takes Long at runtime, so the
properties are never found.

BUG=26437284
Change-Id: I79defd325ea5d20c4dce84d891d984e24abcacc5
2016-03-01 16:49:08 +09:00
Daichi Hirono
376c5a8d34 Merge "Implement MtpDevice#getPartialObject64 in Java API." 2016-01-28 04:46:16 +00:00
Daichi Hirono
c8718b57b7 Merge "Add varietions of MtpDevice's mehtods using long." 2016-01-28 02:56:34 +00:00
Daichi Hirono
e0e6654a31 Add varietions of MtpDevice's mehtods using long.
BUG=26525304

Change-Id: I0a0b187910cf498720d8e7b8fbe9b0590e67e65e
2016-01-28 11:54:57 +09:00
Daichi Hirono
038832b900 Implement MtpDevice#getPartialObject64 in Java API.
BUG=26703522

Change-Id: I08510e3a179b7dc8bf247a9e997dc8a160138fc2
2016-01-28 11:19:55 +09:00
Jaesung Chung
800133d4eb Merge "Enable reading a thumbnail from RAW image files in MtpDatabase" 2016-01-27 11:52:34 +00:00
Jaesung Chung
8409c0691f Enable reading a thumbnail from RAW image files in MtpDatabase
Also introduce new supported RAW image file formats, PEF and SRW.

RAW image file formats are not defined in PTP 1.2 specification except
for DNG. They are mostly built on top of TIFF or TIFF/EP. (Fuji's RAF
is the exception).

In this CL, image file formats are classified newly as below:

DNG: dng
TIFF: cr2, nrw, arw, rw2, orf, pef, srw
TIFF/EP: nef
Unknown Image Formats(FORMAT_DEFINED): wbmap, webp, raf

I referred to the following documents for defining MTP formats of RAW
images:

* http://www.rags-int-inc.com/PhotoTechStuff/RawStandards/RawSummary.html
* https://en.wikipedia.org/wiki/Raw_image_format

Bug: 26552863, Bug: 26626825
Change-Id: Ia218f6320c4c1ff051a23ca0060ceac46134b0d7
2016-01-27 18:40:36 +09:00
Daichi Hirono
148954a657 Add eventsSupported property to MtpDeviceInfo.
The property provides the set of event code that are supported by
MtpDevice.

BUG=26147375

Change-Id: I54be75e4bb52ddfe9aba8630538ddd32d1a641c8
2016-01-25 10:47:01 +09: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
Daichi Hirono
2dd48256e9 Change offset and size arguments of MtpDevice#getPartialObject to Java
long.

To represents full range of 32-bit unsigned integer, we should use
jlong instead of jint.

BUG=26284424

Change-Id: Id3fa9e3daa778c204ab8e38f821d454c709c317a
2016-01-14 09:42:59 +09:00
Daichi Hirono
2a9a43369b Reland "Add event parameters to MtpEvent."
The CL was previously reviewed at ag/842930.

> We can obtain detailed information of MtpEvent from devices. e.g. object
> handle of changed object.  The CL adds the detailed information as
> properties of MtpEvent class.
>
> BUG=26480986

Change-Id: I93afad9caf118d74cd0923d70242133c4fb2a648
2016-01-12 12:14:30 +09:00
Daichi Hirono
1d4779c29a Add operationsSupported to device info.
Because not all MTP devices support getPartialObject, we need to check
supported operation of MTP devices. The CL adds operationsSupported
field to MtpDeviceInfo class.

BUG=26147375

Change-Id: Iaad968fb4497a5ad11bf6489097abea99c3cbac7
2016-01-08 16:58:24 +09:00
Daichi Hirono
cf62fdc0c9 Move MTP event code to MtpConstants class.
BUG=25128276

Change-Id: I49530c50d7889e1b04931b8ec61f5f92a1c7e68f
2016-01-08 11:06:02 +09:00
Daichi Hirono
52da3ad906 Add getPartialObject to Java MtpDevice class.
BUG=26284424

Change-Id: Id05dc6297a1682999eee4e72972fb883fa49a5d1
2016-01-07 12:41:17 +09: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
Daichi Hirono
85f7078f8b Add constans for MTP event codes.
BUG=23368533

Change-Id: I922eb9a26812a44780ba81b8a391be45852cad08
2015-10-13 12:49:16 -07:00
Daichi Hirono
0b494663a4 Add readEvent method to MtpDevice.
BUG=23368533

Change-Id: Ibefff559fa7dd0bee17e2812bd7cdd129108d804
2015-09-25 14:54:17 +09:00
Tomasz Mikolajewski
bb430fa930 Remove MtpDocument.
Change-Id: Ie4b0e55f6ff2c7b323cf767a5ed3d3c61c12734d
2015-09-01 09:25:30 +09:00
Tomasz Mikolajewski
b80a3cfd05 Add support for uploading files via MTP.
Change-Id: Id1811ab70cb28be471e0a99999e9ad5380deac49
2015-08-28 10:50:23 +09:00
Tomasz Mikolajewski
87763e6a91 Wire uploading to MtpDocumentsProvider.
This patch does not yet allow to upload files, but uploading (creating)
directories already works.

Bug: 22545670
Change-Id: If4d5a53aa26f791475bb1a783e0ac9540d6760c1
2015-08-20 11:34:44 +09:00
Tomasz Mikolajewski
b04990599a Add API for uploading files to MTP devices.
Bug: 22545670
Change-Id: I038c54db06b7cf780bd027d76693e98c685d57a7
2015-08-14 13:09:52 +09:00
Tomasz Mikolajewski
74d4ff8ab3 Add API for streamed reading on MTP devices.
The existing APIs required to copy all bytes to memory, which will fail in
case of very large files, like movies.

Bug: 22908937
Change-Id: I23bdcbdbf08b7c1b1017591799bbb94e53249a57
2015-08-07 11:47:50 +09:00
Jeff Sharkey
5af1835d67 Generate stable MTP storage IDs.
It ends up that MediaProvider is persisting MTP storage IDs in its
database, so we need to make sure we generate stable IDs over time,
otherwise we can end up looking into a black hole.

Bug: 22256092
Change-Id: I6a75c239aac1b71fd5f6df0df69b24971079a086
2015-07-07 17:46:16 -07:00
Daichi Hirono
660727c79e Fix API doc of MtpDevice#getObjectHandles.
BUG=21782579

Change-Id: Iadec8923c74f62b7aed44e876fb469b41c7dc59b
2015-06-15 03:34:28 +00:00
Jeff Sharkey
1b8ef7e316 Parcelable objects for Disk/Volume.
Will eventually be used by SystemUI and/or Settings.

Also fix SettingsProvider NPE.

Bug: 19993667, 19909433
Change-Id: Ie326849ac5f43ee35f728d9cc0e332b72292db70
2015-04-04 14:40:46 -07: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
John Spurlock
08c7116ab9 Remove unused imports in frameworks/base.
Change-Id: I031443de83f93eb57a98863001826671b18f3b17
2015-02-28 14:47:49 -05:00
Mike Lockwood
7182774810 MTP: Fix partial implementation of 5 new audio specific properties
In change Ic5b3fb75309893caae1a4f4b56068a543847f1f7, we added partial
support for the MTP properties:

MTP_PROPERTY_AUDIO_WAVE_CODE,
MTP_PROPERTY_BITRATE_TYPE
MTP_PROPERTY_AUDIO_BITRATE
MTP_PROPERTY_NUMBER_OF_CHANNELS
MTP_PROPERTY_SAMPLE_RATE

However we were not returning any values for these properties in the result
of the MTP GetObjectPropList command. Strangely, this triggers a nasty bug
in Windows 7 that results in data loss.  When copying a directory containing
several MP3 files from one location on the device to another, Windows will
copy only some of the files to the new location, but delete all of the originals.
Finishing the implementation of these new object properties for some unknown
reason stops this bad behavior in Windows 7.

Bug: 19018427
Change-Id: I5fd3b91a89b31827d3100686445cef6795fe0f3f
2015-01-23 10:58:38 -08:00
Marco Nelissen
c1fda12823 Also consider secondary storage when verifying paths
Bug: 17673184
Bug: 17982103
Change-Id: Ief14c7776b02983191c46774fa7e4c76380de58d
2014-10-15 15:36:50 -07:00
Marco Nelissen
5f411696a6 Validate MTP path
Bug: 17673184
Change-Id: I51a64f065d9b3609557af81e596ebeb8720ab6c5
2014-09-26 16:07:49 -07:00