From a504c4dcdf18be1be9f67cf83b506638f19077b8 Mon Sep 17 00:00:00 2001 From: Matthew Xie Date: Fri, 14 Feb 2014 16:32:32 -0800 Subject: [PATCH] Update context on resume calls for BluetoothAdvertisingEnabler and BluetoothEnabler The saved context could be invalid if not updated bug 12991455 Change-Id: I93abb8420d0fa53add1f0e843a5069d59743891c --- src/com/android/settings/SettingsActivity.java | 6 +++--- .../settings/bluetooth/BluetoothAdvertisingEnabler.java | 7 +++++-- src/com/android/settings/bluetooth/BluetoothEnabler.java | 8 ++++++-- src/com/android/settings/bluetooth/BluetoothSettings.java | 2 +- .../settings/bluetooth/LocalDeviceProfilesSettings.java | 8 +++++--- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index bbe0e749887..511fd7d17f2 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -732,7 +732,7 @@ public class SettingsActivity extends Activity mDevelopmentPreferences.registerOnSharedPreferenceChangeListener( mDevelopmentPreferencesListener); - mHeaderAdapter.resume(); + mHeaderAdapter.resume(this); invalidateHeaders(); registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); @@ -1624,9 +1624,9 @@ public class SettingsActivity extends Activity 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 b9e4ee2e851..a6b08386135 100644 --- a/src/com/android/settings/bluetooth/BluetoothAdvertisingEnabler.java +++ b/src/com/android/settings/bluetooth/BluetoothAdvertisingEnabler.java @@ -26,7 +26,7 @@ import com.android.settings.R; */ final class BluetoothAdvertisingEnabler { - private final Context mContext; + private Context mContext; private final PreferenceScreen mBluetoothAdvertisingPreference; public BluetoothAdvertisingEnabler(Context context, PreferenceScreen bluetoothBroadcast) { @@ -34,7 +34,10 @@ final class BluetoothAdvertisingEnabler { 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 df13eefbdc1..1a450d44120 100644 --- a/src/com/android/settings/bluetooth/BluetoothEnabler.java +++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java @@ -35,7 +35,7 @@ import com.android.settings.WirelessSettings; * 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 @@ public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeLis 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 68cf37a061d..c6b560f8520 100755 --- a/src/com/android/settings/bluetooth/BluetoothSettings.java +++ b/src/com/android/settings/bluetooth/BluetoothSettings.java @@ -151,7 +151,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment { // 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 ed276970de2..47b14761c21 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 @@ public final class LocalDeviceProfilesSettings extends SettingsPreferenceFragmen @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