From c4764d24837cf297440f0ee97fe8adb943c56fe0 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Fri, 12 Feb 2010 14:21:37 -0800 Subject: [PATCH] Update Settings UI regarding tethering. If tethering is disabled (build var or a gservices property) for the device, don't show any of the tethering options. If Usb Tethering is disabled (config.xml) don't show Usb Options. If Wifi Tethering is disabled (config.xml) don't show Wifi Options. --- AndroidManifest.xml | 3 +- res/xml/wireless_settings.xml | 1 + src/com/android/settings/TetherSettings.java | 60 ++++++++++++++++--- .../android/settings/WirelessSettings.java | 12 +++- 4 files changed, 64 insertions(+), 12 deletions(-) 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();