diff --git a/media/java/android/media/midi/MidiDevice.java b/media/java/android/media/midi/MidiDevice.java index 87af362d21da6..a273915039ae5 100644 --- a/media/java/android/media/midi/MidiDevice.java +++ b/media/java/android/media/midi/MidiDevice.java @@ -16,10 +16,15 @@ package android.media.midi; +import android.content.Context; +import android.content.ServiceConnection; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.util.Log; +import java.io.Closeable; +import java.io.IOException; + /** * This class is used for sending and receiving data to and from an MIDI device * Instances of this class are created by {@link MidiManager#openDevice}. @@ -27,19 +32,27 @@ import android.util.Log; * CANDIDATE FOR PUBLIC API * @hide */ -public final class MidiDevice { +public final class MidiDevice implements Closeable { private static final String TAG = "MidiDevice"; private final MidiDeviceInfo mDeviceInfo; private final IMidiDeviceServer mServer; + private Context mContext; + private ServiceConnection mServiceConnection; - /** - * MidiDevice should only be instantiated by MidiManager - * @hide - */ - public MidiDevice(MidiDeviceInfo deviceInfo, IMidiDeviceServer server) { + /* package */ MidiDevice(MidiDeviceInfo deviceInfo, IMidiDeviceServer server) { mDeviceInfo = deviceInfo; mServer = server; + mContext = null; + mServiceConnection = null; + } + + /* package */ MidiDevice(MidiDeviceInfo deviceInfo, IMidiDeviceServer server, + Context context, ServiceConnection serviceConnection) { + mDeviceInfo = deviceInfo; + mServer = server; + mContext = context; + mServiceConnection = serviceConnection; } /** @@ -89,6 +102,15 @@ public final class MidiDevice { } } + @Override + public void close() throws IOException { + if (mContext != null && mServiceConnection != null) { + mContext.unbindService(mServiceConnection); + mContext = null; + mServiceConnection = null; + } + } + @Override public String toString() { return ("MidiDevice: " + mDeviceInfo.toString()); diff --git a/media/java/android/media/midi/MidiManager.java b/media/java/android/media/midi/MidiManager.java index ca7d3c25c293e..08ac25a145db3 100644 --- a/media/java/android/media/midi/MidiManager.java +++ b/media/java/android/media/midi/MidiManager.java @@ -223,7 +223,7 @@ public class MidiManager { public void onServiceConnected(ComponentName name, IBinder binder) { IMidiDeviceServer server = IMidiDeviceServer.Stub.asInterface(binder); - MidiDevice device = new MidiDevice(deviceInfoF, server); + MidiDevice device = new MidiDevice(deviceInfoF, server, mContext, this); sendOpenDeviceResponse(deviceInfoF, device, callbackF, handlerF); }