diff options
| author | 2017-10-19 06:21:39 +0000 | |
|---|---|---|
| committer | 2017-10-19 06:21:39 +0000 | |
| commit | d2ff3244dc64b05b3b9e2bedbdd120a8dfdde022 (patch) | |
| tree | d722276a6ad9f4acc3468d750faa9d3f315a8c1a | |
| parent | 60b9835e7d140dcc8627ef834215d48f62139137 (diff) | |
| parent | 517b35fa1cc96afe0eb3cb889e1b765dd7cbce19 (diff) | |
Merge "Settings: Fix leak of BroadcastReceiver intents" am: 3499af28c4 am: 1b4a0abdbb
am: 517b35fa1c
Change-Id: I11f0b50f93e2a722ecf3c8bd398462c967d9bfb2
| -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 28105e2630a4..f57d02bb92fa 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 |