Update context on resume calls for BluetoothAdvertisingEnabler and BluetoothEnabler
The saved context could be invalid if not updated
bug 12991455
Change-Id: I93abb8420d0fa53add1f0e843a5069d59743891c
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index bbe0e74..511fd7d 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -732,7 +732,7 @@
mDevelopmentPreferences.registerOnSharedPreferenceChangeListener(
mDevelopmentPreferencesListener);
- mHeaderAdapter.resume();
+ mHeaderAdapter.resume(this);
invalidateHeaders();
registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
@@ -1624,9 +1624,9 @@
holder.mIcon.setImageDrawable(icon);
}
- public void resume() {
+ public void resume(Context context) {
mWifiEnabler.resume();
- mBluetoothEnabler.resume();
+ mBluetoothEnabler.resume(context);
}
public void pause() {
diff --git a/src/com/android/settings/bluetooth/BluetoothAdvertisingEnabler.java b/src/com/android/settings/bluetooth/BluetoothAdvertisingEnabler.java
index b9e4ee2..a6b0838 100644
--- a/src/com/android/settings/bluetooth/BluetoothAdvertisingEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothAdvertisingEnabler.java
@@ -26,7 +26,7 @@
*/
final class BluetoothAdvertisingEnabler {
- private final Context mContext;
+ private Context mContext;
private final PreferenceScreen mBluetoothAdvertisingPreference;
public BluetoothAdvertisingEnabler(Context context, PreferenceScreen bluetoothBroadcast) {
@@ -34,7 +34,10 @@
mBluetoothAdvertisingPreference = bluetoothBroadcast;
}
- public void resume() {
+ public void resume(Context context) {
+ if (mContext != context) {
+ mContext = context;
+ }
boolean isBroadcastingEnable = LocalBluetoothPreferences.isAdvertisingEnabled(mContext);
handleAdvertisingStateChange(isBroadcastingEnable);
}
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index df13eef..1a450d4 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -35,7 +35,7 @@
* preference reflects the current state.
*/
public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeListener {
- private final Context mContext;
+ private Context mContext;
private Switch mSwitch;
private boolean mValidListener;
private final LocalBluetoothAdapter mLocalAdapter;
@@ -67,12 +67,16 @@
mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
}
- public void resume() {
+ public void resume(Context context) {
if (mLocalAdapter == null) {
mSwitch.setEnabled(false);
return;
}
+ if (mContext != context) {
+ mContext = context;
+ }
+
// Bluetooth state is not sticky, so set it manually
handleStateChanged(mLocalAdapter.getBluetoothState());
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 68cf37a..c6b560f 100755
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -151,7 +151,7 @@
// resume BluetoothEnabler before calling super.onResume() so we don't get
// any onDeviceAdded() callbacks before setting up view in updateContent()
if (mBluetoothEnabler != null) {
- mBluetoothEnabler.resume();
+ mBluetoothEnabler.resume(getActivity());
}
super.onResume();
diff --git a/src/com/android/settings/bluetooth/LocalDeviceProfilesSettings.java b/src/com/android/settings/bluetooth/LocalDeviceProfilesSettings.java
index ed27697..47b1476 100644
--- a/src/com/android/settings/bluetooth/LocalDeviceProfilesSettings.java
+++ b/src/com/android/settings/bluetooth/LocalDeviceProfilesSettings.java
@@ -16,6 +16,7 @@
package com.android.settings.bluetooth;
+import android.app.Activity;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
@@ -80,9 +81,10 @@
@Override
public void onResume() {
super.onResume();
- mManager.setForegroundActivity(getActivity());
- mAdvertisingEnabler.resume();
- mDiscoverableEnabler.resume(getActivity());
+ final Activity activity = getActivity();
+ mManager.setForegroundActivity(activity);
+ mAdvertisingEnabler.resume(activity);
+ mDiscoverableEnabler.resume(activity);
}
@Override