summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/TetherSettings.java
diff options
context:
space:
mode:
authorRobert Greenwalt <rgreenwalt@google.com>2012-09-13 15:02:00 -0700
committerRobert Greenwalt <rgreenwalt@google.com>2012-09-14 10:40:20 -0700
commitf60b92bb414aefb9793e8e98fb594298ac541430 (patch)
tree887a2dcdaa62a8431aec12edd9f21f9731a628c2 /src/com/android/settings/TetherSettings.java
parent4a0953818da25e2240d32136821d4ecb97f90ce1 (diff)
downloadpackages_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.java62
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 {