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