diff options
author | Irfan Sheriff <isheriff@google.com> | 2011-11-04 12:08:56 -0700 |
---|---|---|
committer | Irfan Sheriff <isheriff@google.com> | 2011-11-04 15:12:13 -0700 |
commit | 01b32368fffd944a0265f22db764b689179be94c (patch) | |
tree | d6c762b1dc2744edb37ed69d4488c3dcb3c9b2eb /src/com/android/settings/TetherSettings.java | |
parent | 553a2bda178d246e99bce744fefa2a5765c6cb04 (diff) | |
download | packages_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.java | 118 |
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; |