diff options
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/settings/TetherSettings.java | 60 | ||||
-rw-r--r-- | src/com/android/settings/WirelessSettings.java | 12 |
2 files changed, 62 insertions, 10 deletions
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java index 0a63de3..1e9c4e2 100644 --- a/src/com/android/settings/TetherSettings.java +++ b/src/com/android/settings/TetherSettings.java @@ -30,6 +30,7 @@ import android.preference.CheckBoxPreference; import android.provider.Settings; import android.util.Log; +import java.util.ArrayList; /* * Displays preferences for Tethering. */ @@ -43,6 +44,12 @@ public class TetherSettings extends PreferenceActivity { private BroadcastReceiver mTetherChangeReceiver; + private String[] mUsbRegexs; + private ArrayList mUsbIfaces; + + private String[] mWifiRegexs; + private ArrayList mWifiIfaces; + @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -51,12 +58,27 @@ public class TetherSettings extends PreferenceActivity { mEnableTetherNotice = (CheckBoxPreference) findPreference(ENABLE_TETHER_NOTICE); mUsbTether = (PreferenceScreen) findPreference(USB_TETHER_SETTINGS); + + ConnectivityManager cm = + (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); + mUsbRegexs = cm.getTetherableUsbRegexs(); + if (mUsbRegexs.length == 0) { + getPreferenceScreen().removePreference(mUsbTether); + getPreferenceScreen().removePreference(mEnableTetherNotice); + } + mWifiRegexs = cm.getTetherableWifiRegexs(); } + private class TetherChangeReceiver extends BroadcastReceiver { public void onReceive(Context content, Intent intent) { - updateState(intent.getIntExtra(ConnectivityManager.EXTRA_AVAILABLE_TETHER_COUNT,0)>0, - intent.getIntExtra(ConnectivityManager.EXTRA_ACTIVE_TETHER_COUNT,0)>0); + // TODO - this should understand the interface types + ArrayList<String> available = intent.getStringArrayListExtra( + ConnectivityManager.EXTRA_AVAILABLE_TETHER); + ArrayList<String> 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<String> available, ArrayList<String> 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 bf75e27..6db2001 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(); |