Loading src/com/android/settings/TetherSettings.java +88 −30 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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); } Loading Loading @@ -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) { 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 = Loading @@ -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; Loading Loading
src/com/android/settings/TetherSettings.java +88 −30 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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); } Loading Loading @@ -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) { 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 = Loading @@ -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; Loading