OSDN Git Service

merge in ics-mr1-release history after reset to ics-mr1
authorThe Android Automerger <android-build@android.com>
Sun, 6 Nov 2011 14:46:46 +0000 (06:46 -0800)
committerThe Android Automerger <android-build@android.com>
Sun, 6 Nov 2011 14:46:46 +0000 (06:46 -0800)
src/com/android/settings/ChooseLockGeneric.java
src/com/android/settings/TetherSettings.java

index 990b6cc..fb4a5cd 100644 (file)
@@ -282,7 +282,6 @@ public class ChooseLockGeneric extends PreferenceActivity {
             fallBackIntent.putExtra(CONFIRM_CREDENTIALS, false);
             fallBackIntent.putExtra(EXTRA_SHOW_FRAGMENT_TITLE,
                     R.string.backup_lock_settings_picker_title);
-            fallBackIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 
             boolean showTutorial = ALWAY_SHOW_TUTORIAL ||
                     !mChooseLockSettingsHelper.utils().isBiometricWeakEverChosen();
index 23fe2c0..e27c96e 100644 (file)
@@ -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;