1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * Copyright (C) 2011 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings.bluetooth; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log; 215469ff8b3f9966c6f141078b37da5f178b7825e4Michael Chan 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * LocalBluetoothManager provides a simplified interface on top of a subset of 24436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * the Bluetooth API. Note that {@link #getInstance} will return null 25436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * if there is no Bluetooth adapter on this device, and callers must be 26436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * prepared to handle this case. 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 28436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambypublic final class LocalBluetoothManager { 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String TAG = "LocalBluetoothManager"; 3091b33f14620519e15507e62192701abed29179a1Jaikumar Ganesh 31dd79a33ba53fec530094f4d2fe37f0538530d9f8Jake Hamby /** Singleton instance. */ 3248e90002839e662eb1667471aebeb0483e9fb7dbAmith Yamasani private static LocalBluetoothManager sInstance; 3391b33f14620519e15507e62192701abed29179a1Jaikumar Ganesh 34436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby private final Context mContext; 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 36436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby /** If a BT-related activity is in the foreground, this will be it. */ 37436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby private Context mForegroundActivity; 385469ff8b3f9966c6f141078b37da5f178b7825e4Michael Chan 39e96f04c1ffaa99992f9ed4c2687db0b955ae0450jhtop.kim private BluetoothDiscoverableEnabler mDiscoverableEnabler; 40e96f04c1ffaa99992f9ed4c2687db0b955ae0450jhtop.kim 41436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby private final LocalBluetoothAdapter mLocalAdapter; 425469ff8b3f9966c6f141078b37da5f178b7825e4Michael Chan 43436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby private final CachedBluetoothDeviceManager mCachedDeviceManager; 44d617a0781cd1a39ed0f726545ed23d5b00ca31c2Michael Chan 45436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby /** The Bluetooth profile manager. */ 46436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby private final LocalBluetoothProfileManager mProfileManager; 4791b33f14620519e15507e62192701abed29179a1Jaikumar Ganesh 48436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby /** The broadcast receiver event manager. */ 49436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby private final BluetoothEventManager mEventManager; 50c090feb64f674d9840993736a24f9667f8b0e0d5Jake Hamby 51436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby public static synchronized LocalBluetoothManager getInstance(Context context) { 52436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (sInstance == null) { 53436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby LocalBluetoothAdapter adapter = LocalBluetoothAdapter.getInstance(); 54436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (adapter == null) { 55436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return null; 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 57436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby // This will be around as long as this process is 58436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Context appContext = context.getApplicationContext(); 59436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby sInstance = new LocalBluetoothManager(adapter, appContext); 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 6191b33f14620519e15507e62192701abed29179a1Jaikumar Ganesh 62436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return sInstance; 63436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 65e96f04c1ffaa99992f9ed4c2687db0b955ae0450jhtop.kim public void setDiscoverableEnabler(BluetoothDiscoverableEnabler discoverableEnabler) { 66e96f04c1ffaa99992f9ed4c2687db0b955ae0450jhtop.kim mDiscoverableEnabler = discoverableEnabler; 67e96f04c1ffaa99992f9ed4c2687db0b955ae0450jhtop.kim } 68e96f04c1ffaa99992f9ed4c2687db0b955ae0450jhtop.kim 69e96f04c1ffaa99992f9ed4c2687db0b955ae0450jhtop.kim public BluetoothDiscoverableEnabler getDiscoverableEnabler() { 70e96f04c1ffaa99992f9ed4c2687db0b955ae0450jhtop.kim return mDiscoverableEnabler; 71e96f04c1ffaa99992f9ed4c2687db0b955ae0450jhtop.kim } 72e96f04c1ffaa99992f9ed4c2687db0b955ae0450jhtop.kim 73436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby private LocalBluetoothManager(LocalBluetoothAdapter adapter, Context context) { 74436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mContext = context; 75436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mLocalAdapter = adapter; 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 77b707255a440e53ec2865c4b34c7ea07d16d471bdMatthew Xie mCachedDeviceManager = new CachedBluetoothDeviceManager(context); 78436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mEventManager = new BluetoothEventManager(mLocalAdapter, 796eb84ac6de9eeacc1e199d74310cf91f5a98daf2Jaikumar Ganesh mCachedDeviceManager, context); 80436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mProfileManager = new LocalBluetoothProfileManager(context, 81436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mLocalAdapter, mCachedDeviceManager, mEventManager); 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 8391b33f14620519e15507e62192701abed29179a1Jaikumar Ganesh 84436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby public LocalBluetoothAdapter getBluetoothAdapter() { 85436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return mLocalAdapter; 86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 8791b33f14620519e15507e62192701abed29179a1Jaikumar Ganesh 88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public Context getContext() { 89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return mContext; 90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 92bb16e15de32f14c25728db39494c0cff9b80d186jhtop.kim public Context getForegroundActivity() { 93bb16e15de32f14c25728db39494c0cff9b80d186jhtop.kim return mForegroundActivity; 94bb16e15de32f14c25728db39494c0cff9b80d186jhtop.kim } 95bb16e15de32f14c25728db39494c0cff9b80d186jhtop.kim 96436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby boolean isForegroundActivity() { 97436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return mForegroundActivity != null; 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 9991b33f14620519e15507e62192701abed29179a1Jaikumar Ganesh 100436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby synchronized void setForegroundActivity(Context context) { 101436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (context != null) { 102436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Log.d(TAG, "setting foreground activity to non-null context"); 103436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mForegroundActivity = context; 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 105436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (mForegroundActivity != null) { 106436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Log.d(TAG, "setting foreground activity to null"); 107436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mForegroundActivity = null; 108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 11191b33f14620519e15507e62192701abed29179a1Jaikumar Ganesh 112436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby CachedBluetoothDeviceManager getCachedDeviceManager() { 113436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return mCachedDeviceManager; 114d617a0781cd1a39ed0f726545ed23d5b00ca31c2Michael Chan } 115d617a0781cd1a39ed0f726545ed23d5b00ca31c2Michael Chan 116436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby BluetoothEventManager getEventManager() { 117436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return mEventManager; 118d617a0781cd1a39ed0f726545ed23d5b00ca31c2Michael Chan } 119d617a0781cd1a39ed0f726545ed23d5b00ca31c2Michael Chan 120436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby LocalBluetoothProfileManager getProfileManager() { 121436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return mProfileManager; 122d617a0781cd1a39ed0f726545ed23d5b00ca31c2Michael Chan } 123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 124