diff options
author | Robert Greenwalt <rgreenwalt@google.com> | 2012-09-13 15:02:00 -0700 |
---|---|---|
committer | Robert Greenwalt <rgreenwalt@google.com> | 2012-09-14 10:40:20 -0700 |
commit | f60b92bb414aefb9793e8e98fb594298ac541430 (patch) | |
tree | 887a2dcdaa62a8431aec12edd9f21f9731a628c2 /src/com/android/settings/TetherSettings.java | |
parent | 4a0953818da25e2240d32136821d4ecb97f90ce1 (diff) | |
download | packages_apps_Settings-f60b92bb414aefb9793e8e98fb594298ac541430.zip packages_apps_Settings-f60b92bb414aefb9793e8e98fb594298ac541430.tar.gz packages_apps_Settings-f60b92bb414aefb9793e8e98fb594298ac541430.tar.bz2 |
Protect self from async change of BluetoothPan
bug:6945678
Change-Id: I627a55aea9170f889823a38c8e2bb08a06faa841
Diffstat (limited to 'src/com/android/settings/TetherSettings.java')
-rw-r--r-- | src/com/android/settings/TetherSettings.java | 62 |
1 files changed, 36 insertions, 26 deletions
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java index f6c1734..1564803 100644 --- a/src/com/android/settings/TetherSettings.java +++ b/src/com/android/settings/TetherSettings.java @@ -48,6 +48,7 @@ import android.webkit.WebView; import java.io.InputStream; import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicReference; import java.util.Locale; /* @@ -78,7 +79,7 @@ public class TetherSettings extends SettingsPreferenceFragment private String[] mWifiRegexs; private String[] mBluetoothRegexs; - private BluetoothPan mBluetoothPan; + private AtomicReference<BluetoothPan> mBluetoothPan; private static final String WIFI_AP_SSID_AND_SECURITY = "wifi_ap_ssid_and_security"; private static final int CONFIG_SUBTEXT = R.string.wifi_tether_configure_subtext; @@ -151,7 +152,8 @@ public class TetherSettings extends SettingsPreferenceFragment if (!bluetoothAvailable) { getPreferenceScreen().removePreference(mBluetoothTether); } else { - if (mBluetoothPan != null && mBluetoothPan.isTetheringOn()) { + BluetoothPan pan = mBluetoothPan.get(); + if (pan != null && pan.isTetheringOn()) { mBluetoothTether.setChecked(true); } else { mBluetoothTether.setChecked(false); @@ -188,10 +190,10 @@ public class TetherSettings extends SettingsPreferenceFragment private BluetoothProfile.ServiceListener mProfileServiceListener = new BluetoothProfile.ServiceListener() { public void onServiceConnected(int profile, BluetoothProfile proxy) { - mBluetoothPan = (BluetoothPan) proxy; + mBluetoothPan.set((BluetoothPan) proxy); } public void onServiceDisconnected(int profile) { - mBluetoothPan = null; + mBluetoothPan.set(null); } }; @@ -235,8 +237,9 @@ public class TetherSettings extends SettingsPreferenceFragment switch (intent .getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)) { case BluetoothAdapter.STATE_ON: - if(mBluetoothPan != null) { - mBluetoothPan.setBluetoothTethering(true); + BluetoothPan bluetoothPan = mBluetoothPan.get(); + if (bluetoothPan != null) { + bluetoothPan.setBluetoothTethering(true); mBluetoothEnableForTether = false; } break; @@ -389,26 +392,31 @@ public class TetherSettings extends SettingsPreferenceFragment } else if (btState == BluetoothAdapter.STATE_TURNING_ON) { mBluetoothTether.setEnabled(false); mBluetoothTether.setSummary(R.string.bluetooth_turning_on); - } else if (btState == BluetoothAdapter.STATE_ON && - mBluetoothPan != null && mBluetoothPan.isTetheringOn()) { - mBluetoothTether.setChecked(true); - mBluetoothTether.setEnabled(true); - int bluetoothTethered = mBluetoothPan.getConnectedDevices().size(); - if (bluetoothTethered > 1) { - String summary = getString( - R.string.bluetooth_tethering_devices_connected_subtext, bluetoothTethered); - mBluetoothTether.setSummary(summary); - } else if (bluetoothTethered == 1) { - mBluetoothTether.setSummary(R.string.bluetooth_tethering_device_connected_subtext); - } else if (bluetoothErrored) { - mBluetoothTether.setSummary(R.string.bluetooth_tethering_errored_subtext); + } else { + BluetoothPan bluetoothPan = mBluetoothPan.get(); + if (btState == BluetoothAdapter.STATE_ON && bluetoothPan != null && + bluetoothPan.isTetheringOn()) { + mBluetoothTether.setChecked(true); + mBluetoothTether.setEnabled(true); + int bluetoothTethered = bluetoothPan.getConnectedDevices().size(); + if (bluetoothTethered > 1) { + String summary = getString( + R.string.bluetooth_tethering_devices_connected_subtext, + bluetoothTethered); + mBluetoothTether.setSummary(summary); + } else if (bluetoothTethered == 1) { + mBluetoothTether.setSummary( + R.string.bluetooth_tethering_device_connected_subtext); + } else if (bluetoothErrored) { + mBluetoothTether.setSummary(R.string.bluetooth_tethering_errored_subtext); + } else { + mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext); + } } else { - mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext); + mBluetoothTether.setEnabled(true); + mBluetoothTether.setChecked(false); + mBluetoothTether.setSummary(R.string.bluetooth_tethering_off_subtext); } - } else { - mBluetoothTether.setEnabled(true); - mBluetoothTether.setChecked(false); - mBluetoothTether.setSummary(R.string.bluetooth_tethering_off_subtext); } } @@ -476,7 +484,8 @@ public class TetherSettings extends SettingsPreferenceFragment mBluetoothTether.setSummary(R.string.bluetooth_turning_on); mBluetoothTether.setEnabled(false); } else { - mBluetoothPan.setBluetoothTethering(true); + BluetoothPan bluetoothPan = mBluetoothPan.get(); + if (bluetoothPan != null) bluetoothPan.setBluetoothTethering(true); mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext); } break; @@ -528,7 +537,8 @@ public class TetherSettings extends SettingsPreferenceFragment errored = true; } - mBluetoothPan.setBluetoothTethering(false); + BluetoothPan bluetoothPan = mBluetoothPan.get(); + if (bluetoothPan != null) bluetoothPan.setBluetoothTethering(false); if (errored) { mBluetoothTether.setSummary(R.string.bluetooth_tethering_errored_subtext); } else { |