Merge "Settings: Fix leak of BroadcastReceiver intents" am: 3499af28c4 am: 1b4a0abdbb

am: 517b35fa1c

Change-Id: I11f0b50f93e2a722ecf3c8bd398462c967d9bfb2
This commit is contained in:
Manu Viswanadhan
2017-10-19 06:21:39 +00:00
committed by android-build-merger

View File

@@ -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