Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35110d1e authored by Mike Lockwood's avatar Mike Lockwood
Browse files

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

Change-Id: I65cd4cfd940b02709daeffef6dab814305b8a6b0
parent 3b766458
Loading
Loading
Loading
Loading
+28 −6
Original line number Diff line number Diff line
@@ -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());
+1 −1
Original line number Diff line number Diff line
@@ -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);
                            }