diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 67f0cde727a..ad4596e6949 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -171,8 +171,7 @@ + android:clearTaskOnLaunch="true"> diff --git a/res/xml/wireless_settings.xml b/res/xml/wireless_settings.xml index 9977505434f..5ee758a5227 100644 --- a/res/xml/wireless_settings.xml +++ b/res/xml/wireless_settings.xml @@ -57,6 +57,7 @@ 0, - intent.getIntExtra(ConnectivityManager.EXTRA_ACTIVE_TETHER_COUNT,0)>0); + // TODO - this should understand the interface types + ArrayList available = intent.getStringArrayListExtra( + ConnectivityManager.EXTRA_AVAILABLE_TETHER); + ArrayList active = intent.getStringArrayListExtra( + ConnectivityManager.EXTRA_ACTIVE_TETHER); + + updateState(available, active); } } @@ -68,11 +90,9 @@ public class TetherSettings extends PreferenceActivity { IntentFilter filter = new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED); mTetherChangeReceiver = new TetherChangeReceiver(); - registerReceiver(mTetherChangeReceiver, filter); + Intent intent = registerReceiver(mTetherChangeReceiver, filter); - ConnectivityManager cm = - (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); - updateState(cm.getTetherableIfaces().length>0, cm.getTetheredIfaces().length>0); + if (intent != null) mTetherChangeReceiver.onReceive(this, intent); } @Override @@ -82,11 +102,33 @@ public class TetherSettings extends PreferenceActivity { mTetherChangeReceiver = null; } - private void updateState(boolean isAvailable, boolean isTethered) { - if (isTethered) { + private void updateState(ArrayList available, ArrayList tethered) { + boolean usbTethered = false; + boolean usbAvailable = false; + boolean wifiTethered = false; + boolean wifiAvailable = false; + + for (String s : available) { + for (String regex : mUsbRegexs) { + if (s.matches(regex)) usbAvailable = true; + } + for (String regex : mWifiRegexs) { + if (s.matches(regex)) wifiAvailable = true; + } + } + for (String s : tethered) { + for (String regex : mUsbRegexs) { + if (s.matches(regex)) usbTethered = true; + } + for (String regex : mWifiRegexs) { + if (s.matches(regex)) wifiTethered = true; + } + } + + if (usbTethered) { mUsbTether.setSummary(R.string.usb_tethering_active_subtext); mUsbTether.setEnabled(true); - } else if (isAvailable) { + } else if (usbAvailable) { mUsbTether.setSummary(R.string.usb_tethering_available_subtext); mUsbTether.setEnabled(true); } else { diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java index bf75e27af7b..6db2001f6ee 100644 --- a/src/com/android/settings/WirelessSettings.java +++ b/src/com/android/settings/WirelessSettings.java @@ -19,6 +19,7 @@ package com.android.settings; import android.bluetooth.BluetoothAdapter; import android.content.Context; import android.content.Intent; +import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.ServiceManager; @@ -28,6 +29,7 @@ import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.provider.Settings; +import android.util.Log; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.TelephonyProperties; @@ -42,6 +44,7 @@ public class WirelessSettings extends PreferenceActivity { private static final String KEY_WIFI_SETTINGS = "wifi_settings"; private static final String KEY_BT_SETTINGS = "bt_settings"; private static final String KEY_VPN_SETTINGS = "vpn_settings"; + private static final String KEY_TETHER_SETTINGS = "tether_settings"; public static final String EXIT_ECM_RESULT = "exit_ecm_result"; public static final int REQUEST_CODE_EXIT_ECM = 1; @@ -114,8 +117,15 @@ public class WirelessSettings extends PreferenceActivity { if (ServiceManager.getService(BluetoothAdapter.BLUETOOTH_SERVICE) == null) { findPreference(KEY_BT_SETTINGS).setEnabled(false); } + + // Disable Tethering if it's not allowed + ConnectivityManager cm = + (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); + if (!cm.isTetheringSupported()) { + getPreferenceScreen().removePreference(findPreference(KEY_TETHER_SETTINGS)); + } } - + @Override protected void onResume() { super.onResume();