diff options
author | Robert Greenwalt <rgreenwalt@google.com> | 2012-09-14 10:53:54 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-14 10:53:55 -0700 |
commit | 9310f85dc7f5421f9ca6b1d644c8ddff792e8f37 (patch) | |
tree | 4b0730dde1a1987c5123157066971f280e2f3018 | |
parent | b6d7c9c6f93e3d50a3fc5ce2db900a10cbb258e4 (diff) | |
parent | f60b92bb414aefb9793e8e98fb594298ac541430 (diff) | |
download | packages_apps_settings-9310f85dc7f5421f9ca6b1d644c8ddff792e8f37.zip packages_apps_settings-9310f85dc7f5421f9ca6b1d644c8ddff792e8f37.tar.gz packages_apps_settings-9310f85dc7f5421f9ca6b1d644c8ddff792e8f37.tar.bz2 |
Merge "Protect self from async change of BluetoothPan" into jb-mr1-dev
-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 { |