Add MidiDevice.close() method so we can clean up our ServiceConnection

Change-Id: I65cd4cfd940b02709daeffef6dab814305b8a6b0
This commit is contained in:
Mike Lockwood
2015-03-04 16:05:17 -08:00
parent 3b7664589b
commit 35110d1ed7
2 changed files with 29 additions and 7 deletions

View File

@@ -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());

View File

@@ -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);
}