Merge "Settings: Fix leak of BroadcastReceiver intents" am: 3499af28c4 am: 1b4a0abdbb
am: 517b35fa1c
Change-Id: I11f0b50f93e2a722ecf3c8bd398462c967d9bfb2
This commit is contained in:
@@ -107,14 +107,16 @@ public class BluetoothEventManager {
|
|||||||
addHandler(Intent.ACTION_DOCK_EVENT, new DockEventHandler());
|
addHandler(Intent.ACTION_DOCK_EVENT, new DockEventHandler());
|
||||||
|
|
||||||
mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter, null, mReceiverHandler);
|
mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter, null, mReceiverHandler);
|
||||||
|
mContext.registerReceiver(mProfileBroadcastReceiver, mProfileIntentFilter, null, mReceiverHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
void registerProfileIntentReceiver() {
|
void registerProfileIntentReceiver() {
|
||||||
mContext.registerReceiver(mBroadcastReceiver, mProfileIntentFilter, null, mReceiverHandler);
|
mContext.registerReceiver(mProfileBroadcastReceiver, mProfileIntentFilter, null, mReceiverHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setReceiverHandler(android.os.Handler handler) {
|
public void setReceiverHandler(android.os.Handler handler) {
|
||||||
mContext.unregisterReceiver(mBroadcastReceiver);
|
mContext.unregisterReceiver(mBroadcastReceiver);
|
||||||
|
mContext.unregisterReceiver(mProfileBroadcastReceiver);
|
||||||
mReceiverHandler = handler;
|
mReceiverHandler = handler;
|
||||||
mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter, null, mReceiverHandler);
|
mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter, null, mReceiverHandler);
|
||||||
registerProfileIntentReceiver();
|
registerProfileIntentReceiver();
|
||||||
@@ -148,11 +150,31 @@ public class BluetoothEventManager {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private final BroadcastReceiver mProfileBroadcastReceiver = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
String action = intent.getAction();
|
||||||
|
BluetoothDevice device = intent
|
||||||
|
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
||||||
|
|
||||||
|
Handler handler = mHandlerMap.get(action);
|
||||||
|
if (handler != null) {
|
||||||
|
handler.onReceive(context, intent, device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private class AdapterStateChangedHandler implements Handler {
|
private class AdapterStateChangedHandler implements Handler {
|
||||||
public void onReceive(Context context, Intent intent,
|
public void onReceive(Context context, Intent intent,
|
||||||
BluetoothDevice device) {
|
BluetoothDevice device) {
|
||||||
int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
|
int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
|
||||||
BluetoothAdapter.ERROR);
|
BluetoothAdapter.ERROR);
|
||||||
|
// Reregister Profile Broadcast Receiver as part of TURN OFF
|
||||||
|
if (state == BluetoothAdapter.STATE_OFF)
|
||||||
|
{
|
||||||
|
context.unregisterReceiver(mProfileBroadcastReceiver);
|
||||||
|
registerProfileIntentReceiver();
|
||||||
|
}
|
||||||
// update local profiles and get paired devices
|
// update local profiles and get paired devices
|
||||||
mLocalAdapter.setBluetoothStateInt(state);
|
mLocalAdapter.setBluetoothStateInt(state);
|
||||||
// send callback to update UI and possibly start scanning
|
// send callback to update UI and possibly start scanning
|
||||||
|
|||||||
Reference in New Issue
Block a user