1f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood/*
2f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * Copyright (C) 2015 The Android Open Source Project
3f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood *
4f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
5f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * you may not use this file except in compliance with the License.
6f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * You may obtain a copy of the License at
7f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood *
8f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
9f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood *
10f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * Unless required by applicable law or agreed to in writing, software
11f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
12f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * See the License for the specific language governing permissions and
14f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * limitations under the License.
15f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood */
16f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood
17f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodpackage com.android.bluetoothmidiservice;
18f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood
19f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.app.Service;
20f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.bluetooth.BluetoothDevice;
21f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.content.Intent;
22f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.media.midi.MidiManager;
23f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.os.IBinder;
24f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.util.Log;
25f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood
26f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport java.util.HashMap;
27f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood
28f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodpublic class BluetoothMidiService extends Service {
29f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood    private static final String TAG = "BluetoothMidiService";
30f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood
31f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood    // BluetoothMidiDevices keyed by BluetoothDevice
32f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood    private final HashMap<BluetoothDevice,BluetoothMidiDevice> mDeviceServerMap
33f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood            = new HashMap<BluetoothDevice,BluetoothMidiDevice>();
34f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood
35f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood    @Override
36f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood    public IBinder onBind(Intent intent) {
37f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood        if (MidiManager.BLUETOOTH_MIDI_SERVICE_INTENT.equals(intent.getAction())) {
38f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood            BluetoothDevice bluetoothDevice = (BluetoothDevice)intent.getParcelableExtra("device");
39f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood            if (bluetoothDevice == null) {
40f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood                Log.e(TAG, "no BluetoothDevice in onBind intent");
41f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood                return null;
42f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood            }
43f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood
44f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood            BluetoothMidiDevice device;
45f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood            synchronized (mDeviceServerMap) {
46f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood                device = mDeviceServerMap.get(bluetoothDevice);
47f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood                if (device == null) {
48f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood                    device = new BluetoothMidiDevice(this, bluetoothDevice, this);
49f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood                }
50f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood            }
51f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood            return device.getBinder();
52f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood        }
53f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood        return null;
54f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood    }
55f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood
56f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood    void deviceClosed(BluetoothDevice device) {
57f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood        synchronized (mDeviceServerMap) {
58f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood            mDeviceServerMap.remove(device);
59f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood        }
60f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood    }
61f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood}
62