summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Burk <philburk@google.com>2015-10-12 21:35:12 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-10-12 21:35:12 +0000
commit0a64b146d0bb65145a9644a8e2ad59e80fe37678 (patch)
tree8a4289240f264c8b8b20bf16a380179faa4a9f6c
parentd9635e60f00ccd10187a6dd0c51243a201d55ab3 (diff)
parente39def480fd2d1bcc3a89751dd492d4634c38194 (diff)
downloadframeworks_base-0a64b146d0bb65145a9644a8e2ad59e80fe37678.zip
frameworks_base-0a64b146d0bb65145a9644a8e2ad59e80fe37678.tar.gz
frameworks_base-0a64b146d0bb65145a9644a8e2ad59e80fe37678.tar.bz2
am e39def48: MidiService: update listener with current status when registered
* commit 'e39def480fd2d1bcc3a89751dd492d4634c38194': MidiService: update listener with current status when registered
-rw-r--r--media/java/android/media/midi/MidiManager.java7
-rw-r--r--services/midi/java/com/android/server/midi/MidiService.java21
2 files changed, 28 insertions, 0 deletions
diff --git a/media/java/android/media/midi/MidiManager.java b/media/java/android/media/midi/MidiManager.java
index 7197dc0..29863d4 100644
--- a/media/java/android/media/midi/MidiManager.java
+++ b/media/java/android/media/midi/MidiManager.java
@@ -169,6 +169,13 @@ public final class MidiManager {
/**
* Registers a callback to receive notifications when MIDI devices are added and removed.
*
+ * The {@link DeviceCallback#onDeviceStatusChanged} method will be called immediately
+ * for any devices that have open ports. This allows applications to know which input
+ * ports are already in use and, therefore, unavailable.
+ *
+ * Applications should call {@link #getDevices} before registering the callback
+ * to get a list of devices already added.
+ *
* @param callback a {@link DeviceCallback} for MIDI device notifications
* @param handler The {@link android.os.Handler Handler} that will be used for delivering the
* device notifications. If handler is null, then the thread used for the
diff --git a/services/midi/java/com/android/server/midi/MidiService.java b/services/midi/java/com/android/server/midi/MidiService.java
index 3ecfd55..701e07f 100644
--- a/services/midi/java/com/android/server/midi/MidiService.java
+++ b/services/midi/java/com/android/server/midi/MidiService.java
@@ -575,6 +575,8 @@ public class MidiService extends IMidiManager.Stub {
Client client = getClient(token);
if (client == null) return;
client.addListener(listener);
+ // Let listener know whether any ports are already busy.
+ updateStickyDeviceStatus(client.mUid, listener);
}
@Override
@@ -584,6 +586,25 @@ public class MidiService extends IMidiManager.Stub {
client.removeListener(listener);
}
+ // Inform listener of the status of all known devices.
+ private void updateStickyDeviceStatus(int uid, IMidiDeviceListener listener) {
+ synchronized (mDevicesByInfo) {
+ for (Device device : mDevicesByInfo.values()) {
+ // ignore private devices that our client cannot access
+ if (device.isUidAllowed(uid)) {
+ try {
+ MidiDeviceStatus status = device.getDeviceStatus();
+ if (status != null) {
+ listener.onDeviceStatusChanged(status);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "remote exception", e);
+ }
+ }
+ }
+ }
+ }
+
private static final MidiDeviceInfo[] EMPTY_DEVICE_INFO_ARRAY = new MidiDeviceInfo[0];
public MidiDeviceInfo[] getDevices() {