diff options
| author | 2017-10-19 06:02:23 +0000 | |
|---|---|---|
| committer | 2017-10-19 06:02:23 +0000 | |
| commit | 1b4a0abdbb7ff8218de7592301a7d5d2baab89cb (patch) | |
| tree | b5cbb069ae314fa656af4cdfebb3016eca211215 | |
| parent | 9fba6c2fe1187ecdb4dbb309fcccd5e89921918a (diff) | |
| parent | 3499af28c45f1daf14806ee2de536abf48d4d9f1 (diff) | |
Merge "Settings: Fix leak of BroadcastReceiver intents"
am: 3499af28c4
Change-Id: I2b0f3920f39981956d25017999a25799d995252b
| -rwxr-xr-x | packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java index 7d4bc83e3385..63d944d5ec5e 100755 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java @@ -107,14 +107,16 @@ public class BluetoothEventManager { addHandler(Intent.ACTION_DOCK_EVENT, new DockEventHandler()); mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter, null, mReceiverHandler); + mContext.registerReceiver(mProfileBroadcastReceiver, mProfileIntentFilter, null, mReceiverHandler); } void registerProfileIntentReceiver() { - mContext.registerReceiver(mBroadcastReceiver, mProfileIntentFilter, null, mReceiverHandler); + mContext.registerReceiver(mProfileBroadcastReceiver, mProfileIntentFilter, null, mReceiverHandler); } public void setReceiverHandler(android.os.Handler handler) { mContext.unregisterReceiver(mBroadcastReceiver); + mContext.unregisterReceiver(mProfileBroadcastReceiver); mReceiverHandler = handler; mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter, null, mReceiverHandler); 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 { public void onReceive(Context context, Intent intent, BluetoothDevice device) { int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 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 mLocalAdapter.setBluetoothStateInt(state); // send callback to update UI and possibly start scanning |