Crash in Settings observed while changing the device orientation after renamed tablet

There was a fundamental flow in the BT code. Basically BluetoothSettings is using
a singleton BluetoothDiscoverableEnabler.

BluetoothDiscoverableEnabler is keeping (thru its constructor) a reference on a Context
for registering/unregistering some broadcast receiver. BUMMER! When you change orientation
(or more generally the device Configuration), your Context is no more the same!

Hence the crash as we were  trying to unregister a Receiver on a Context that is no more valid.

Fix that issue by passing an updated Context to the BluetoothDiscoverableEnabler.resume() API.

Bug #12991455
Change-Id: I77db15d2b59b6dd973907e26f9e6bb022202a8b5
This commit is contained in:
Fabrice Di Meglio
2014-02-14 15:09:30 -08:00
parent b643627651
commit ce930c15ae
3 changed files with 12 additions and 9 deletions

View File

@@ -156,7 +156,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
super.onResume();
if (mDiscoverableEnabler != null) {
mDiscoverableEnabler.resume();
mDiscoverableEnabler.resume(getActivity());
}
getActivity().registerReceiver(mReceiver, mIntentFilter);
if (mLocalAdapter != null) {
@@ -262,9 +262,9 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
if (!isRestrictedAndNotPinProtected()) {
if (mDiscoverableEnabler == null) {
mDiscoverableEnabler = new BluetoothDiscoverableEnabler(getActivity(),
mLocalAdapter, mMyDevicePreference);
mDiscoverableEnabler.resume();
mDiscoverableEnabler = new BluetoothDiscoverableEnabler(mLocalAdapter,
mMyDevicePreference);
mDiscoverableEnabler.resume(getActivity());
LocalBluetoothManager.getInstance(getActivity()).setDiscoverableEnabler(
mDiscoverableEnabler);
}