Add MidiDevice.close() method so we can clean up our ServiceConnection
Change-Id: I65cd4cfd940b02709daeffef6dab814305b8a6b0
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user