• Home
  • History
  • Annotate
  • only in /frameworks/base/media/java/android/media/midi/
History log of /frameworks/base/media/java/android/media/midi/
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
98af2e4fec8c417f4a674a99f4b40f6f248d6a83 16-Feb-2018 Jeff Sharkey <jsharkey@android.com> Add RequiresFeature annotation.

Certain APIs require that a device have a specific feature to operate
correctly, so start annotating them.

Test: builds, boots
Bug: 72284763
Change-Id: Ie2f30284bdfdb6acc4067f434eba3b5433837606
Exempt-From-Owner-Approval: simple annotations
idiManager.java
9d30e119369bb242f493a57f01e101758ad3f7d5 04-Oct-2017 Phil Burk <philburk@google.com> mididocs: clarify direction and add BLE-MIDI link

The explanation of input vs output was confusing.
Added link to apps in test procedure page.

Test: checked using Chrome browser
Change-Id: I363c32e3b43c9d4b91c07842b6101702b035870c
ackage.html
ec68b46bc85b2317053da7e2933876fc6e51ac2f 06-Jun-2017 Jeff Sharkey <jsharkey@google.com> Merge "Annotate @SystemApi with required permissions." into oc-dev am: c1406978a4
am: 7a2e4a8486

Change-Id: Ib629e25dbf047c110feaf03e4ff744b5c6df9aeb
d86b8fea43ebb6e5c31691b44d8ceb0d8d3c9072 03-Jun-2017 Jeff Sharkey <jsharkey@android.com> Annotate @SystemApi with required permissions.

Most @SystemApi methods should be protected with system (or higher)
permissions, so annotate common methods with @RequiresPermission to
make automatic verification easier.

Verification is really only relevant when calling into system
services (where permissions checking can happen on the other side of
a Binder call), so annotate managers with the new @SystemService
annotation, which is now automatically documented.

This is purely a docs change; no logic changes are being made.

Test: make -j32 update-api && make -j32 offline-sdk-docs
Bug: 62263906
Change-Id: I2554227202d84465676aa4ab0dd336b5c45fc651
idiManager.java
b414a2ccf14616c17bbaa969afd3c0becbbc431c 20-Apr-2017 Mikhail Naganov <mnaganov@google.com> Make IMidiDeviceServer.setDeviceInfo method oneway

This method is called from MidiService in system server, must be
oneway.

Remove the call to IMidiDeviceServer.getDeviceInfo from
MidiService. It seems to be redundant. The reason is that
MidiDeviceInfo is only created by MidiService (to maintain
unique IDs), and after creation, it is pushed both to a remote
MidiDeviceServer, and to a local MidiService.Device class
simultaneously inside addDeviceLocked method. Thus, if
MidiService.Device.mDeviceInfo is still null, there is no chance
that remote MidiDeviceServer can hold a non-null
MidiDeviceInfo. So the call to IMidiDeviceServer.getDeviceInfo
will also return null, and thus can be avoided.

Note that only for BT MIDI devices can MidiService.Device receive
MidiDeviceInfo later in the lifecycle. All other types of devices
receive MidiDeviceInfo upon construction.

Bug: 37535382
Test: Used BT MIDI keyboard with MidiSynthDemo app
Change-Id: I5378207922187866f3c43e01f1ed30f042720167
MidiDeviceServer.aidl
4f4e259dc1cc38aecfb0e6ceb7dc4041cf36a41f 20-Apr-2017 Mikhail Naganov <mnaganov@google.com> MIDI: Mark IMidiDeviceServer.closeDevice as oneway

This method is called from MidiService which is part of the system
server and thus should avoid blocking calls.

Bug: 37535382
Change-Id: Id44e159cf997fafbb0f0f69d31b38c10844808b5
Test: make
MidiDeviceServer.aidl
492e9e851cadca62df84eaff1a3c1ba788492fba 22-Mar-2017 Narayan Kamath <narayan@google.com> 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
idiDevice.java
idiDeviceServer.java
idiInputPort.java
idiOutputPort.java
71f672b98a0c31001ca28de86d9ac99fef0812b1 05-Mar-2017 Paul McLean <pmclean@google.com> Switching Native MIDI API to an "opaque pointers" model.

Test: manual

Change-Id: Ic181008427e6e81106d867cc3a70deef8c591841
idiDevice.java
c276c59eb5d0f36a1133ad718e5e1244390f4688 01-Sep-2016 Mikhail Naganov <mnaganov@google.com> nativemidi: Prototype demonstrating native access to IMidiDeviceServer

Framework changes and a demo app
Comment and finalized Native MIDI API
Replaced fixed PortRegistry tables with std::map.
more error handling.
Removed not-very-useful MidiDeviceManager class.
Made Java API functions @hide.

Bug: 30252756

Test: Manual
Change-Id: Iae98e589f38ef6d625ff0842401193fe98c5d881
idiDevice.java
33603ae9c52fe60ff7e19703b88599a227788189 27-Sep-2016 Mikhail Naganov <mnaganov@google.com> MIDI: fix building of properties for the native side

A couple of MIDI device's properties (related to ALSA) are of int type
and can't be transferred as a string. Fixed the code.

As we whitelist properties that can go into native, there is no need to
expect other type of properties besides ints and strings.

Bug: 25945784
Change-Id: I008731d0ffee60c31be0bfddb15dcd1425e4b88e
Test: using a PoC app
idiDeviceInfo.java
84b674079db819963b227df4dadb0fb5180527e6 15-Sep-2016 Mikhail Naganov <mnaganov@google.com> Make MidiDeviceInfo accessible to native code

Update Java serialization code to allow interacting with native
serialization code. One notable change is due to the fact that
properties of non-primitive types can not be read back by native code,
the properties are serialized in two versions: one only contains
properties having primitive types, and another contains all
the properties. The latter is ignored by native code.

Bug: 25945784
Test: using a PoC app
Change-Id: I047a5bdec3006bcbce34c1c63aa7746e01f7a71e
idiDeviceInfo.aidl
idiDeviceInfo.java
17bbb50edc8ccc56c4ecc932a19884c4cc1f5b6f 12-Sep-2016 Mikhail Naganov <mnaganov@google.com> Midi: Replace usages of ParcelFileDescriptor with FileDescriptor

FileDescriptor can be natively marshaled, and can be used with both
Java and native code, whereas PFD can not.

Bug: 25945784
Change-Id: I5299f0a1555d3531f7dcf1e23c027fb420dc3569
MidiDeviceServer.aidl
idiDevice.java
idiDeviceServer.java
idiInputPort.java
idiOutputPort.java
idiPortImpl.java
7ea3e54b729e90770aab1275b31303ae65bcecc6 10-Aug-2016 Mikhail Naganov <mnaganov@google.com> MIDI: Use server-side socket in blocking mode for virtual devices

Since virtual MIDI servers may misbehave, blocking mode will throttle
them if clients are not coping with their sending speed.

Bug: 29413812
Change-Id: I9c4a2a7a7ea3ea060c93fedc7d0f033427c557c9
idiDeviceServer.java
382cb48848cb3968d5a0088a825706d66cdfbd50 08-Jul-2016 Mikhail Naganov <mnaganov@google.com> Protect MIDI framework against client blocks in MidiReceiver.onSend

Make the server-side socket non-blocking when creating MidiOutputPort
for clients. Thus if a client ceases to read from its side of the
socket pair, the server will just fail to write instead of blocking.

One drawback is that the MidiOutputPort on the client can't indicate
that it has become dysfunctional, but it's not possible without
changing the API.

Bug: 29413812
Change-Id: I9dfcbdd214a815cea8fd1365324fd78ca459268a
idiDeviceServer.java
idiOutputPort.java
9a279ef267f194dd3f0b777da5a219b6ef04abac 06-May-2016 Glenn Kasten <gkasten@google.com> Update MIDI package summary

Bug: 28625060
Change-Id: If552ca8e1a0666d402b5f536699bf3fb09c1e324
ackage.html
01ab4d62d9779387f7acad96366db6763bfa6a1d 20-Apr-2016 Phil Burk <philburk@google.com> MidiDevice: do not open ports on closed device

Fix involves client side mIsDeviceClosed flag.

Bug: 24949216
Change-Id: I666284a787fbb9a710d2372fb424e8e54f6a2825
Signed-off-by: Phil Burk <philburk@google.com>
idiDevice.java
80299748cc7ed5f59cb65122459b036b74150d4a 05-Apr-2016 Phil Burk <philburk@google.com> MidiDevice: fix connectPorts for same Process

If connectPorts() was called for a device in the same process then
the connection would die when the ParcelFileDescriptor was closed.

Bug: 26406775
Change-Id: Id0538452593b4761ac2a93d366ade76d2e35ce73
Signed-off-by: Phil Burk <philburk@google.com>
MidiDeviceServer.aidl
idiDevice.java
idiDeviceServer.java
c53962d4ede82a03b62f0c8bb86bd0da090a15eb 02-Mar-2016 Jeff Sharkey <jsharkey@android.com> When system server goes down, crash apps more.

Apps making calls into the system server may end up persisting
internal state or making security decisions based on the perceived
success or failure of a call, or the default values returned.

The reality is that if the system process just died, init will be
along shortly to kill all running apps, so we should have no problem
rethrowing the RemoteException as a RuntimeException.

Bug: 27364859
Change-Id: Ife0bcb079636c88d54c44d17eb580409fd79028b
idiManager.java
908d5bc82e82be680f3c2d76161e99970c51f62f 26-Oct-2015 Phil Burk <philburk@google.com> MIDI docs: add missing bracket

The example code for openDevice() was missing a close bracket.

Bug: 25283941
Change-Id: I8fac6a6dee2393125ad4e057cb857fe21e43b491
Signed-off-by: Phil Burk <philburk@google.com>
ackage.html
100df4788d6e5cc4f81c6c764b5e15ec288dcc8d 23-Sep-2015 Phil Burk <philburk@google.com> Merge "MidiService: update listener with current status when registered"
b2355940e3e697deeecd1b6511cd5094f9dc553a 06-Aug-2015 Phil Burk <philburk@google.com> MidiService: update listener with current status when registered

This will give an app an opportunity to learn whether an input port is busy
before the user tries to connect and then fails.

Bug: 22825043
Change-Id: Ifede60f166dfe66ea15453044fce06f4a8452b18
Signed-off-by: Phil Burk <philburk@google.com>
idiManager.java
7cd06c0b9e087a555d2c5dd4cab5b7eac8497526 03-Sep-2015 Phil Burk <philburk@google.com> BLE-MIDI: change binding for BluetoothMidiService

Add a remote call addBluetoothDevice() using AIDL.
This was needed because onBind() is only called once.

Bug: 23219556
Bug: 23760886
Change-Id: Id7554ca55d596352d11dbd6ae3e403138a29c864
Signed-off-by: Phil Burk <philburk@google.com>
BluetoothMidiService.aidl
0ca998d79fe95ded26ec4ff0a1e0a8dc4802684b 22-Aug-2015 Phil Burk <philburk@google.com> MidiManager: fix double BTLE callback

Stop openBluetoothDevice() from calling its callback twice.

Bug: 23218338
Change-Id: I2e738b22a124c0336c46bef05680a82ee1f59e79
Signed-off-by: Phil Burk <philburk@google.com>
idiManager.java
bda0caf07b786633381a029f782b9d2e1caa8a3f 19-Aug-2015 Phil Burk <philburk@google.com> MIDI docs: fix buffer allocation

Also describe NoteOn more clearly.

Bug: 23303608
Change-Id: I35f88022c854c2eb16ec606e58f28e06c52d18b7
Signed-off-by: Phil Burk <philburk@google.com>
ackage.html
881cd15519535e493d497fefd857f8fe0236c774 05-Aug-2015 Phil Burk <philburk@google.com> Merge "MidiManager: use ConcurrentHashMap" into mnc-dev
a95faf78bf810e0b4eb3cb211c414bfbbd1a8061 05-Aug-2015 Phil Burk <philburk@google.com> MidiManager: use ConcurrentHashMap

So that adding and removing device listeners is thread-safe.

Bug: 22909752
Change-Id: I1369ab53c865b54e6e5eb8ea3e8d437fdd1d7197
Signed-off-by: Phil Burk <philburk@google.com>
idiManager.java
2f1a08e601f4fa24e589fc61ea38f80eb264a8f4 30-Jul-2015 Phil Burk <philburk@google.com> Merge "MIDI docs BTLE: how to open BTLE MIDI devices" into mnc-dev
fdcd82164f95699c36e044f90a12b9aa1c4f662f 30-Jul-2015 Phil Burk <philburk@google.com> Merge "MIDI package doc: add hasSystemFeature() call" into mnc-dev
3cc1bdbc6efdb268be16e7184709eeb4ecf9b944 30-Jul-2015 Phil Burk <philburk@google.com> MIDI docs BTLE: how to open BTLE MIDI devices

Adds crucial information including required permissions,
MIDI UUID, and call to openBluetoothDevice().

Bug: 22606182
Change-Id: I47393bd0ecc2601906f6e50075d694c9cc17c993
Signed-off-by: Phil Burk <philburk@google.com>
ackage.html
44d535aaf2a06115de5255f2787c4f7a4db949ce 29-Jul-2015 Phil Burk <philburk@google.com> MIDI package doc: add hasSystemFeature() call

Bug: 22800792
Change-Id: Ib4b3e16e8167191505c31522bbccd521a9807528
Signed-off-by: Phil Burk <philburk@google.com>
ackage.html
645a0b2bfe0098fc49b873cd17d36c2bf5244dd5 29-Jul-2015 Phil Burk <philburk@google.com> MidiDevice: document that opens can return nulls

Bug: 22800792
Change-Id: I8d7ca1976e9a8abbabc011d3b2391ad7fe646f83
Signed-off-by: Phil Burk <philburk@google.com>
idiDevice.java
2aef7e3559e9e2c78287a00b3f693b6dc19e56f0 18-Jun-2015 Mike Lockwood <lockwood@google.com> Fix MidiDevice.MidiConnection lifecycle

Update device server's MidiDeviceStatus when a connection is made to one of its output ports.

After connecting an input port to an output port using MidiDevice.connectPorts(),
do not call IMidiDeviceServer.closePort() until MidiDevice.MidiConnection.close() is called.

While I was in there, added missing CloseGuard support to the MidiDevice.MidiConnection class.

This fixes a problem resulting in UsbMidiDevice closing the device's ALSA driver too soon.

Bug: 21850709

Change-Id: I0c120f76b42eec8a143161e46dba73fbec5e4f31
idiDevice.java
idiDeviceServer.java
idiInputPort.java
d5ca05c3dd3c9cd2879b15ef2444c2c33824e01b 12-Jun-2015 Mike Lockwood <lockwood@google.com> Merge "MidiDeviceServer: Fix race condition in setting device server's mDeviceInfo" into mnc-dev
acd4321872387212bbd956e134faf22eee4bbadc 11-Jun-2015 Mike Lockwood <lockwood@google.com> MidiDeviceServer: Fix race condition in setting device server's mDeviceInfo

This made it unsafe to open ports on a device from the MidiManager onDeviceOpened callback

Bug: 21760692
Change-Id: I536acdf574a3ccecdb66a8fde87089538e8bb1ef
MidiDeviceServer.aidl
idiDeviceServer.java
idiDeviceService.java
idiManager.java
bcdf0dc1992b97579c4d5e0822dd58c597bb45a5 10-Jun-2015 Phil Burk <philburk@google.com> Merge "MIDI docs: use getPorts()" into mnc-dev
e0a6ca64fac5bd4f10139321604031816e90adb4 04-Jun-2015 Mike Lockwood <lockwood@google.com> MidiManager: proxy all requests to open devices through MidiService

Previously when a MidiManager client opened a virtual or Bluetooth device,
the client bound directly to the virtual device's MidiDeviceService
or BluetoothMidiDevice's IMidiDeviceServer for the given BluetoothDevice.
Only USB devices were opened in MidiService.

Now opening any type of MIDI device is done via IMidiManager.openDevice() or
IMidiManager.openBluetoothDevice(). MidiService tracks all connnections between
clients and devices.

Services that implement virtual devices must now require android.permission.BIND_MIDI_DEVICE_SERVICE
so only MidiService can bind to these services.

Bug: 21044677

Change-Id: I7172f7b1e0cbfe4a2a87dff376c32dc9b41aa563
MidiDeviceOpenCallback.aidl
MidiDeviceServer.aidl
MidiManager.aidl
idiDevice.java
idiDeviceServer.java
idiDeviceService.java
idiManager.java
ackage.html
7d2065ed4fcb6326b12ceba1384441977e35e4dd 03-Jun-2015 Phil Burk <philburk@google.com> MIDI docs: use getPorts()

Also use boolean to control synth start and stop.
Add mention of feature declaration in Manifest.
Add virtual MIDI devices to bullet list.

Change-Id: I7b36e3ce69caf9d1d15d23f1a0836d525022ef9e
Signed-off-by: Phil Burk <philburk@google.com>
ackage.html
4b901c4506d495c0cbcad316e38797c6522e88d0 21-May-2015 Chet Haase <chet@google.com> Merge "Fix docs to not refer to non-public classes." into mnc-dev
fa2dafa7412d8de75ba567bca414a1c40af38297 21-May-2015 Chet Haase <chet@google.com> Fix docs to not refer to non-public classes.

Issue #21328285 public Midi docs refer to internal utility class

Change-Id: Idddd5c98a78159190c6c34b17350f4630c33d6d5
ackage.html
b0e172304cc2f213789dfd8022e8ba9647897f36 19-May-2015 Glenn Kasten <gkasten@google.com> Merge "Explain the void send() throws IOException" into mnc-dev
5db6637f8c6c8b3365f0476f1264bf19dfbc7207 19-May-2015 Glenn Kasten <gkasten@google.com> Explain the void send() throws IOException

Bug: 21044677
Change-Id: If6b51058813aff3780821db7c619004622df64ca
idiReceiver.java
a32d5c8472bd5aad855165edf6d7253e35e42393 19-May-2015 Glenn Kasten <gkasten@google.com> send without timestamp is not equivalent to send now

Change-Id: I68decbd005932c762ccd376ee80b52ac9884fba4
idiReceiver.java
7eb441cb4abcd3230a4d243469c5044f49e707c8 12-May-2015 Mike Lockwood <lockwood@google.com> MidiManager: Address API Council feedback:

Rename MidiDeviceInfo.getPortList() to getPorts()

Rename MidiManager.getDeviceList() to getDevices()

Rename MidiReceiver.onReceive() to onSend()

Replace MidiManager.DeviceOpenCallback and BluetoothOpenCallback
with new interface MidiManager.OnDeviceOpenedListener

Add MidiSender.onConnect() and onDisconnect()

Add MidiReceiver.onFlush()

Ensure that MidiReceiver max message size is immutable

Bug: 21044677
Change-Id: I7711734a45e831e9744849a6f569e906feff9f80
MidiManager.aidl
idiDevice.java
idiDeviceInfo.java
idiDeviceStatus.java
idiInputPort.java
idiManager.java
idiOutputPort.java
idiReceiver.java
idiSender.java
ackage.html
fd5637fcce18adf44421389bf97a9da546f08940 07-May-2015 Mike Lockwood <lockwood@google.com> MidiManager: Improve output of "dumpsys midi"

- Include each device's port status from MidiDeviceStatus
- MidiDeviceInfo.toString() now outputs all the names and values in the properties Bundle

Change-Id: Ic9329153e4ae4d5619e274d27a420943473377e5
idiDeviceInfo.java
idiDeviceStatus.java
2757fed2d612b7d7331e8ad9067df24b154ff8d7 30-Apr-2015 Glenn Kasten <gkasten@google.com> Merge "Clarifying which receiver method to call." into mnc-dev
d8f6363a5d9c72f1ed22f79bc16563123dff4803 30-Apr-2015 Peter Brinkmann <brinkmann@google.com> Clarifying which receiver method to call.

Change-Id: Iaf89e1ff27e257fd25c54e189e8fcd1b10e8edfc
idiReceiver.java
02868b1625f0b1fa6ce1fb2529186f155904dd03 29-Apr-2015 Mike Lockwood <lockwood@google.com> MidiDeviceInfo: Add version string property

For USB devices, this is populated with the USB device version string.

Change-Id: Ia9286d5f41783e4e960a9c724bf6b85b6599fe12
idiDeviceInfo.java
bed238fcea7c5dc5f0ad6f14d1b585b0947a4cdc 13-Apr-2015 Glenn Kasten <gkasten@google.com> Merge "Android MIDI User Guide draft of 4/10/2015"
1b83e3f75e3bd96ed564ec4b95a8d69caabc0f5f 13-Apr-2015 Phil Burk <philburk@google.com> Android MIDI User Guide draft of 4/10/2015

Change-Id: I80db2c29af581ff3d9d6bd87f5f79c1fde5c3055
Signed-off-by: Glenn Kasten <gkasten@google.com>
ackage.html
9189f5f0252e1ef3e7d00978ef12e964565dd6f1 10-Apr-2015 Mike Lockwood <lockwood@google.com> Add MidiDeviceInfo.getPortList()

This replaces MidiDeviceInfo.getInputPortInfo() and getOutputPortInfo()

Change-Id: I0a9bc7c34a172a072e86718d465967c6c618fb3b
idiDeviceInfo.java
idiDeviceService.java
f0a41d1c591193fbe02c9ddbaf24c79af4da9972 24-Mar-2015 Mike Lockwood <lockwood@google.com> Add support for Bluetooth MIDI devices

The Bluetooth MIDI devices are handled in the BluetoothMidiService APK.
Apps wishing to connect to Bluetooth MIDI devices call MidiManager.openBluetoothDevice()
which binds to BluetoothMidiService in a similar way as virtual devices are implemented.

Change-Id: Ie3fbca757928fd7873a009f9bf9e0ce0be487da6
MidiDeviceServer.aidl
idiDeviceServer.java
idiManager.java
b6f50d357bd3d4d296be6bb047f5ce93a79cbca1 08-Apr-2015 Mike Lockwood <lockwood@google.com> Add support for flushing MIDI all scheduled MIDI events on a port

Change-Id: I39d7862540d4d4b9e2df1265f9dd253541adb4c2
idiInputPort.java
idiOutputPort.java
idiPortImpl.java
idiReceiver.java
9db9326ad47279709a0f7989addaf4b45221b6b9 04-Apr-2015 Mike Lockwood <lockwood@google.com> Add MidiManager and MidiDevice classes to public API.

Somehow we missed these two when we made the rest of the MIDI Manager public

Change-Id: I08e94762e155aa6a7f98bd05b363aee5e4744061
idiDevice.java
idiManager.java
d1b16fe2fb7527eee214898263ec4d6dabbfb0b4 30-Mar-2015 Mike Lockwood <lockwood@google.com> Move MIDI utilities for internal use to com.android.internal.midi package

Change-Id: I7393ae1d4bca61667fb6ee809a7aa22c5c48de56
idiDeviceServer.java
idiDispatcher.java
idiOutputPort.java
3f5acc6d48337da1609f672d4385b1f170ec7f3e 17-Mar-2015 Mike Lockwood <lockwood@google.com> MidiDeviceInfo: Add constants for future Bluetooth MIDI support

Change-Id: Id89b691e923b9de8e5dce58527ba38e28e8e1d36
idiDeviceInfo.java
0caf689ab4a47ad6741a3d1021743d4cb4281f6a 17-Mar-2015 Mike Lockwood <lockwood@google.com> MidiDeviceInfo: Fix NPE for devices with no port names

Change-Id: I703709f84b6b1951b67918c9762bb84a142d855c
idiDeviceInfo.java
81b9f7d325a552c54e793b51f571ae3d65b26e94 11-Mar-2015 Mike Lockwood <lockwood@google.com> Add MidiManager to public API

Also made some small API changes based on feedback from the lint tool.

Change-Id: Ibcf1e9107d86d3a364f811ce47a13aa0da653366
idiDeviceInfo.java
idiDeviceServer.java
idiDeviceService.java
idiDeviceStatus.java
idiDispatcher.java
idiInputPort.java
idiOutputPort.java
idiReceiver.java
idiSender.java
f2cd8024028f602a5e4c27f3d9222e872e4e84f2 11-Mar-2015 Mike Lockwood <lockwood@google.com> MidiDeviceInfo meta-data improvements:

Add property for user visible device name
Add names for input and output ports
Rename "model" to "product" to match USB specification.

Change-Id: I8dc50da935f26825ffc73de456d34e7933aa987c
MidiManager.aidl
idiDeviceInfo.java
idiManager.java
5ff9e2a1719f78cddc7a23d6572ab15ab595dafd 09-Mar-2015 Mike Lockwood <lockwood@google.com> MidiManager: Add MIDI device status notifications

MidiManager clients can be notified of device status changes via a new MidiDeviceStatus object.
MidiDeviceStatus contains the busy status of the device's input ports and number of
connections to the output ports.
MidiDeviceService now has an optional callback for receiving notifications when its ports change as well.

Change-Id: I1600df4464d82724bc026c27b9633ae9c412d3f0
MidiDeviceListener.aidl
MidiManager.aidl
idiDeviceServer.java
idiDeviceService.java
idiDeviceStatus.aidl
idiDeviceStatus.java
idiDispatcher.java
idiManager.java
46326e59a0a19367d4158c027d56d4b8440e8d3d 06-Mar-2015 Mike Lockwood <lockwood@google.com> MidiDevice: Add support for making direct connections between ports

The output port of one device can be connected to the input port of another
device using the new MidiDevice.connectPorts() method.
This allows an application to direct the output of one device directly
to the input port of another without having to copy data from one to another.

Change-Id: I4d361c4e0950b9b9516b0c2f0c158677b1aca208
MidiDeviceServer.aidl
idiDevice.java
idiDeviceServer.java
idiInputPort.java
0c7342f0153076c88ba8e6a1647999c248787906 09-Mar-2015 Mike Lockwood <lockwood@google.com> Add MidiReceiver.send() and MidiReceiver.getMaxMessageSize()

Change-Id: I10d4f5e2400fcaf41f455e56ca25bbc0c781a042
idiDispatcher.java
idiInputPort.java
idiOutputPort.java
idiReceiver.java
be215dd57282888b05b234c39bba44cc0a864b8a 07-Mar-2015 Mike Lockwood <lockwood@google.com> MIDI Manager changes:

Add CloseGuard support to MidiDevice and MidiDeviceServer
Make MidiDevice.close() thread safe
Make non-subclassable API classes final
Other misc cleanup

Change-Id: I7a5d31b06b8c2403cfbc5597c5c1395f0ac90194
idiDevice.java
idiDeviceInfo.java
idiDeviceServer.java
idiDispatcher.java
idiInputPort.java
idiManager.java
idiOutputPort.java
4a3d7ed45d98ad2fe900221755845b87f26b554a 06-Mar-2015 Mike Lockwood <lockwood@google.com> MIDI Manager: Add explicit close mechanism for input and output ports

Relying on errors from closing the file descriptor is not reliable
and was resulting in file descriptor leaks in device servers.

Change-Id: Ib5cc22dba493eae6608a12cc6d4178d8390da77b
MidiDeviceServer.aidl
idiDevice.java
idiDeviceServer.java
idiInputPort.java
idiOutputPort.java
eebc98ff18c1ee92dff3fcd505158ea161d552be 06-Mar-2015 Mike Lockwood <lockwood@google.com> MidiDeviceService: Add getDeviceInfo() accessor method

so service implementations can access their own device info object.

Change-Id: I93e0c449e72d76568d7b4c9f7f7db00a846b5a33
idiDeviceService.java
idiPortImpl.java
35110d1ed72ee7fe687125831b4dd91b87b515ee 05-Mar-2015 Mike Lockwood <lockwood@google.com> Add MidiDevice.close() method so we can clean up our ServiceConnection

Change-Id: I65cd4cfd940b02709daeffef6dab814305b8a6b0
idiDevice.java
idiManager.java
3b7664589be22ddad34b72e11ced937d48660ebb 04-Mar-2015 Mike Lockwood <lockwood@google.com> Make MidiSender and MidiReceiver abstract classes, rename MidiReceiver.post() to receive()

Change-Id: I1cef3bd48ca0acf2968c9de223f78445f3434404
idiDeviceServer.java
idiDispatcher.java
idiInputPort.java
idiOutputPort.java
idiReceiver.java
idiSender.java
20821ecbe81ba52b260ae232096bc2bfb3e92ad0 24-Feb-2015 Mike Lockwood <lockwood@google.com> Eliminate MidiPort base class for MidiInputPort and MidiOutputPort

Change-Id: I628c0468ac980eee909add53a4d6e55e9b358603
idiInputPort.java
idiOutputPort.java
idiPort.java
idiPortImpl.java
c623ec973b5e8d1fd2ff4162d5de8701a6490121 05-Mar-2015 Mike Lockwood <lockwood@google.com> Merge "MidiManager: Virtual MIDI devices are now implemented as Services"
11fd96d6ff25bc1d710448eab545fe09da55a5f5 02-Mar-2015 Mike Lockwood <lockwood@google.com> MidiManager: Virtual MIDI devices are now implemented as Services

To implement a virtual MIDI device, include a subclass of MidiDeviceService in
your application. This service is identified by an intent filter and meta-data
in the application's manifest to allow the MIDI manager to register the virtual device
without actually running the application. Instead, the application's MidiDeviceService
subclass is started on demand when MIDI manager clients want to open the device.

Here is an example of how the MidiDeviceService might be described in the application manifest:

<service android:name="VirtualDeviceService">
<intent-filter>
<action android:name="android.media.midi.MidiDeviceService" />
</intent-filter>
<meta-data android:name="android.media.midi.MidiDeviceService"
android:resource="@xml/device_info" />
</service>

and the device_info.xml meta-data:

<devices>
<device manufacturer="Sample Manufacturer" model="Sample Model" private="false">
<input-port name="my input port" />
<output-port name="my output port" />
</device>
</devices>

(note that the <input-port> and <output-port> names are not currently used, but support for these
will be added in a subsequent change)

Client's of the virtual device will bind directly to the hosting application's MidiDeviceService subclass.
To support this, MidiManager.openDevice() now returns the MidiDevice asynchronously via a callback.

This change also adds a utility class called MidiDispatcher, which is a MidiReceiver
that dispatches all data it receives to a list of other MidiReceivers.
We now use this internally in MidiInputPort and MidiDeviceServer, but developers
may use it for other purposes as well.

Change-Id: Ic3009f06d56f3d5edbd87de3f0c330b51a1c217d
MidiDeviceListener.aidl
MidiListener.aidl
MidiManager.aidl
idiDeviceInfo.java
idiDeviceServer.java
idiDeviceService.java
idiDispatcher.java
idiManager.java
idiOutputPort.java
08c7116ab9cd04ad6dd3c04aa1017237e7f409ac 28-Feb-2015 John Spurlock <jspurlock@google.com> Remove unused imports in frameworks/base.

Change-Id: I031443de83f93eb57a98863001826671b18f3b17
idiDevice.java
idiManager.java
idiPort.java
b673770f7172d4fca9bc05de1f36bc53e93eb247 20-Feb-2015 Mike Lockwood <lockwood@google.com> Add MIDI Manager API tweaks:

- Change the package name from android.midi to android.media.midi

- Add option for specifying a Handler for DeviceCallback notifications

Change-Id: Ia9e9817a651c06299f4e02ee1da3c9666ff64cb9
MidiDeviceServer.aidl
MidiListener.aidl
MidiManager.aidl
idiDevice.java
idiDeviceInfo.aidl
idiDeviceInfo.java
idiDeviceServer.java
idiInputPort.java
idiManager.java
idiOutputPort.java
idiPort.java
idiReceiver.java
idiSender.java