Settings app: Run Bluetooth Event receiver when not in fg.

Also fix connection indication issues.
Fixes bugs 3510336 and 3513352

Change-Id: Iaa47c9d7fd04fa5dd2700f55993ba2fd1a78fd70
This commit is contained in:
Jaikumar Ganesh
2011-03-04 13:49:37 -08:00
parent e0db177334
commit 6eb84ac6de
3 changed files with 18 additions and 28 deletions

View File

@@ -44,8 +44,9 @@ final class BluetoothEventManager {
private final LocalBluetoothAdapter mLocalAdapter;
private final CachedBluetoothDeviceManager mDeviceManager;
private LocalBluetoothProfileManager mProfileManager;
private final IntentFilter mIntentFilter;
private final IntentFilter mAdapterIntentFilter, mProfileIntentFilter;
private final Map<String, Handler> mHandlerMap;
private Context mContext;
private final Collection<BluetoothCallback> mCallbacks =
new ArrayList<BluetoothCallback>();
@@ -56,7 +57,12 @@ final class BluetoothEventManager {
void addHandler(String action, Handler handler) {
mHandlerMap.put(action, handler);
mIntentFilter.addAction(action);
mAdapterIntentFilter.addAction(action);
}
void addProfileHandler(String action, Handler handler) {
mHandlerMap.put(action, handler);
mProfileIntentFilter.addAction(action);
}
// Set profile manager after construction due to circular dependency
@@ -65,11 +71,13 @@ final class BluetoothEventManager {
}
BluetoothEventManager(LocalBluetoothAdapter adapter,
CachedBluetoothDeviceManager deviceManager) {
CachedBluetoothDeviceManager deviceManager, Context context) {
mLocalAdapter = adapter;
mDeviceManager = deviceManager;
mIntentFilter = new IntentFilter();
mAdapterIntentFilter = new IntentFilter();
mProfileIntentFilter = new IntentFilter();
mHandlerMap = new HashMap<String, Handler>();
mContext = context;
// Bluetooth on/off broadcasts
addHandler(BluetoothAdapter.ACTION_STATE_CHANGED, new AdapterStateChangedHandler());
@@ -91,28 +99,11 @@ final class BluetoothEventManager {
// Dock event broadcasts
addHandler(Intent.ACTION_DOCK_EVENT, new DockEventHandler());
mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter);
}
/**
* A Bluetooth-related activity is now in the foreground. Register to
* start receiving Bluetooth events.
* @param context a Context object for the current Activity
*/
void resume(Context context) {
if (mLocalAdapter.syncBluetoothState()) {
// adapter state changed while we were paused: send callbacks
int newState = mLocalAdapter.getState();
synchronized (mCallbacks) {
for (BluetoothCallback callback : mCallbacks) {
callback.onBluetoothStateChanged(newState);
}
}
}
context.registerReceiver(mBroadcastReceiver, mIntentFilter);
}
void pause(Context context) {
context.unregisterReceiver(mBroadcastReceiver);
void registerProfileIntentReceiver() {
mContext.registerReceiver(mBroadcastReceiver, mProfileIntentFilter);
}
/** Register to start receiving callbacks for Bluetooth events. */