summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/TetherSettings.java
diff options
context:
space:
mode:
authorIrfan Sheriff <isheriff@google.com>2011-11-04 12:08:56 -0700
committerIrfan Sheriff <isheriff@google.com>2011-11-04 15:12:13 -0700
commit01b32368fffd944a0265f22db764b689179be94c (patch)
treed6c762b1dc2744edb37ed69d4488c3dcb3c9b2eb /src/com/android/settings/TetherSettings.java
parent553a2bda178d246e99bce744fefa2a5765c6cb04 (diff)
downloadpackages_apps_Settings-01b32368fffd944a0265f22db764b689179be94c.zip
packages_apps_Settings-01b32368fffd944a0265f22db764b689179be94c.tar.gz
packages_apps_Settings-01b32368fffd944a0265f22db764b689179be94c.tar.bz2
Add provisioning checks for BT and USB
Bug: 5568752 Change-Id: Ide4f3c0eb19f8e70e301a13d81b76dd6a0516c3a
Diffstat (limited to 'src/com/android/settings/TetherSettings.java')
-rw-r--r--src/com/android/settings/TetherSettings.java118
1 files changed, 88 insertions, 30 deletions
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 23fe2c0..e27c96e 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -72,7 +72,6 @@ public class TetherSettings extends SettingsPreferenceFragment
private WifiApEnabler mWifiApEnabler;
private CheckBoxPreference mEnableWifiAp;
- private static final int MHS_REQUEST = 0;
private CheckBoxPreference mBluetoothTether;
@@ -102,6 +101,18 @@ public class TetherSettings extends SettingsPreferenceFragment
private boolean mBluetoothEnableForTether;
+ private static final int INVALID = -1;
+ private static final int WIFI_TETHERING = 0;
+ private static final int USB_TETHERING = 1;
+ private static final int BLUETOOTH_TETHERING = 2;
+
+ /* One of INVALID, WIFI_TETHERING, USB_TETHERING or BLUETOOTH_TETHERING */
+ private int mTetherChoice = INVALID;
+
+ /* Stores the package name and the class name of the provisioning app */
+ private String[] mProvisionApp;
+ private static final int PROVISION_REQUEST = 0;
+
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -154,6 +165,9 @@ public class TetherSettings extends SettingsPreferenceFragment
}
}
+ mProvisionApp = getResources().getStringArray(
+ com.android.internal.R.array.config_mobile_hotspot_provision_app);
+
mView = new WebView(activity);
}
@@ -454,32 +468,87 @@ public class TetherSettings extends SettingsPreferenceFragment
boolean enable = (Boolean) value;
if (enable) {
- //Check if provisioning is needed
- String[] appDetails = getResources().getStringArray(
- com.android.internal.R.array.config_mobile_hotspot_provision_app);
-
- if (appDetails.length != 2) {
- mWifiApEnabler.setSoftapEnabled(true);
- } else {
- Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.setClassName(appDetails[0], appDetails[1]);
- startActivityForResult(intent, MHS_REQUEST);
- }
+ startProvisioningIfNecessary(WIFI_TETHERING);
} else {
mWifiApEnabler.setSoftapEnabled(false);
}
return false;
}
+ boolean isProvisioningNeeded() {
+ return mProvisionApp.length == 2;
+ }
+
+ private void startProvisioningIfNecessary(int choice) {
+ mTetherChoice = choice;
+ if (isProvisioningNeeded()) {
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setClassName(mProvisionApp[0], mProvisionApp[1]);
+ startActivityForResult(intent, PROVISION_REQUEST);
+ } else {
+ startTethering();
+ }
+ }
+
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
- if (requestCode == MHS_REQUEST) {
+ if (requestCode == PROVISION_REQUEST) {
if (resultCode == Activity.RESULT_OK) {
- mWifiApEnabler.setSoftapEnabled(true);
+ startTethering();
+ } else {
+ //BT and USB need checkbox turned off on failure
+ //Wifi tethering is never turned on until afterwards
+ switch (mTetherChoice) {
+ case BLUETOOTH_TETHERING:
+ mBluetoothTether.setChecked(false);
+ break;
+ case USB_TETHERING:
+ mUsbTether.setChecked(false);
+ break;
+ }
+ mTetherChoice = INVALID;
}
}
}
+ private void startTethering() {
+ switch (mTetherChoice) {
+ case WIFI_TETHERING:
+ mWifiApEnabler.setSoftapEnabled(true);
+ break;
+ case BLUETOOTH_TETHERING:
+ // turn on Bluetooth first
+ BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+ if (adapter.getState() == BluetoothAdapter.STATE_OFF) {
+ mBluetoothEnableForTether = true;
+ adapter.enable();
+ mBluetoothTether.setSummary(R.string.bluetooth_turning_on);
+ mBluetoothTether.setEnabled(false);
+ } else {
+ mBluetoothPan.setBluetoothTethering(true);
+ mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext);
+ }
+ break;
+ case USB_TETHERING:
+ setUsbTethering(true);
+ break;
+ default:
+ //should not happen
+ break;
+ }
+ }
+
+ private void setUsbTethering(boolean enabled) {
+ ConnectivityManager cm =
+ (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
+ if (cm.setUsbTethering(enabled) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
+ mUsbTether.setChecked(false);
+ mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);
+ return;
+ }
+ mUsbTether.setSummary("");
+ }
+
@Override
public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {
ConnectivityManager cm =
@@ -488,27 +557,16 @@ public class TetherSettings extends SettingsPreferenceFragment
if (preference == mUsbTether) {
boolean newState = mUsbTether.isChecked();
- if (cm.setUsbTethering(newState) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
- mUsbTether.setChecked(false);
- mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);
- return true;
+ if (newState) {
+ startProvisioningIfNecessary(USB_TETHERING);
+ } else {
+ setUsbTethering(newState);
}
- mUsbTether.setSummary("");
} else if (preference == mBluetoothTether) {
boolean bluetoothTetherState = mBluetoothTether.isChecked();
if (bluetoothTetherState) {
- // turn on Bluetooth first
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- if (adapter.getState() == BluetoothAdapter.STATE_OFF) {
- mBluetoothEnableForTether = true;
- adapter.enable();
- mBluetoothTether.setSummary(R.string.bluetooth_turning_on);
- mBluetoothTether.setEnabled(false);
- } else {
- mBluetoothPan.setBluetoothTethering(true);
- mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext);
- }
+ startProvisioningIfNecessary(BLUETOOTH_TETHERING);
} else {
boolean errored = false;