Merge "Protect self from async change of BluetoothPan" into jb-mr1-dev

This commit is contained in:
Robert Greenwalt
2012-09-14 10:53:54 -07:00
committed by Android (Google) Code Review

View File

@@ -48,6 +48,7 @@ import android.webkit.WebView;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicReference;
import java.util.Locale; import java.util.Locale;
/* /*
@@ -78,7 +79,7 @@ public class TetherSettings extends SettingsPreferenceFragment
private String[] mWifiRegexs; private String[] mWifiRegexs;
private String[] mBluetoothRegexs; 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 String WIFI_AP_SSID_AND_SECURITY = "wifi_ap_ssid_and_security";
private static final int CONFIG_SUBTEXT = R.string.wifi_tether_configure_subtext; private static final int CONFIG_SUBTEXT = R.string.wifi_tether_configure_subtext;
@@ -151,7 +152,8 @@ public class TetherSettings extends SettingsPreferenceFragment
if (!bluetoothAvailable) { if (!bluetoothAvailable) {
getPreferenceScreen().removePreference(mBluetoothTether); getPreferenceScreen().removePreference(mBluetoothTether);
} else { } else {
if (mBluetoothPan != null && mBluetoothPan.isTetheringOn()) { BluetoothPan pan = mBluetoothPan.get();
if (pan != null && pan.isTetheringOn()) {
mBluetoothTether.setChecked(true); mBluetoothTether.setChecked(true);
} else { } else {
mBluetoothTether.setChecked(false); mBluetoothTether.setChecked(false);
@@ -188,10 +190,10 @@ public class TetherSettings extends SettingsPreferenceFragment
private BluetoothProfile.ServiceListener mProfileServiceListener = private BluetoothProfile.ServiceListener mProfileServiceListener =
new BluetoothProfile.ServiceListener() { new BluetoothProfile.ServiceListener() {
public void onServiceConnected(int profile, BluetoothProfile proxy) { public void onServiceConnected(int profile, BluetoothProfile proxy) {
mBluetoothPan = (BluetoothPan) proxy; mBluetoothPan.set((BluetoothPan) proxy);
} }
public void onServiceDisconnected(int profile) { public void onServiceDisconnected(int profile) {
mBluetoothPan = null; mBluetoothPan.set(null);
} }
}; };
@@ -235,8 +237,9 @@ public class TetherSettings extends SettingsPreferenceFragment
switch (intent switch (intent
.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)) { .getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)) {
case BluetoothAdapter.STATE_ON: case BluetoothAdapter.STATE_ON:
if(mBluetoothPan != null) { BluetoothPan bluetoothPan = mBluetoothPan.get();
mBluetoothPan.setBluetoothTethering(true); if (bluetoothPan != null) {
bluetoothPan.setBluetoothTethering(true);
mBluetoothEnableForTether = false; mBluetoothEnableForTether = false;
} }
break; break;
@@ -389,26 +392,31 @@ public class TetherSettings extends SettingsPreferenceFragment
} else if (btState == BluetoothAdapter.STATE_TURNING_ON) { } else if (btState == BluetoothAdapter.STATE_TURNING_ON) {
mBluetoothTether.setEnabled(false); mBluetoothTether.setEnabled(false);
mBluetoothTether.setSummary(R.string.bluetooth_turning_on); 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 {
mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext);
}
} else { } else {
mBluetoothTether.setEnabled(true); BluetoothPan bluetoothPan = mBluetoothPan.get();
mBluetoothTether.setChecked(false); if (btState == BluetoothAdapter.STATE_ON && bluetoothPan != null &&
mBluetoothTether.setSummary(R.string.bluetooth_tethering_off_subtext); 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.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.setSummary(R.string.bluetooth_turning_on);
mBluetoothTether.setEnabled(false); mBluetoothTether.setEnabled(false);
} else { } else {
mBluetoothPan.setBluetoothTethering(true); BluetoothPan bluetoothPan = mBluetoothPan.get();
if (bluetoothPan != null) bluetoothPan.setBluetoothTethering(true);
mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext); mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext);
} }
break; break;
@@ -528,7 +537,8 @@ public class TetherSettings extends SettingsPreferenceFragment
errored = true; errored = true;
} }
mBluetoothPan.setBluetoothTethering(false); BluetoothPan bluetoothPan = mBluetoothPan.get();
if (bluetoothPan != null) bluetoothPan.setBluetoothTethering(false);
if (errored) { if (errored) {
mBluetoothTether.setSummary(R.string.bluetooth_tethering_errored_subtext); mBluetoothTether.setSummary(R.string.bluetooth_tethering_errored_subtext);
} else { } else {