2 * Copyright (C) 2008 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.android.settings;
19 import android.os.Bundle;
20 import android.os.SystemProperties;
21 import android.content.BroadcastReceiver;
22 import android.content.Context;
23 import android.content.Intent;
24 import android.content.IntentFilter;
25 import android.net.ConnectivityManager;
26 import android.os.Environment;
27 import android.preference.Preference;
28 import android.preference.PreferenceActivity;
29 import android.preference.PreferenceScreen;
30 import android.preference.CheckBoxPreference;
31 import android.provider.Settings;
32 import android.util.Log;
34 import java.util.ArrayList;
36 * Displays preferences for Tethering.
38 public class TetherSettings extends PreferenceActivity {
40 private static final String ENABLE_TETHER_NOTICE = "enable_tether_notice";
41 private static final String USB_TETHER_SETTINGS = "usb_tether_settings";
43 private CheckBoxPreference mEnableTetherNotice;
44 private PreferenceScreen mUsbTether;
46 private BroadcastReceiver mTetherChangeReceiver;
48 private String[] mUsbRegexs;
49 private ArrayList mUsbIfaces;
51 private String[] mWifiRegexs;
52 private ArrayList mWifiIfaces;
55 protected void onCreate(Bundle icicle) {
56 super.onCreate(icicle);
58 addPreferencesFromResource(R.xml.tether_prefs);
60 mEnableTetherNotice = (CheckBoxPreference) findPreference(ENABLE_TETHER_NOTICE);
61 mUsbTether = (PreferenceScreen) findPreference(USB_TETHER_SETTINGS);
63 ConnectivityManager cm =
64 (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
65 mUsbRegexs = cm.getTetherableUsbRegexs();
66 if (mUsbRegexs.length == 0) {
67 getPreferenceScreen().removePreference(mUsbTether);
68 getPreferenceScreen().removePreference(mEnableTetherNotice);
70 mWifiRegexs = cm.getTetherableWifiRegexs();
74 private class TetherChangeReceiver extends BroadcastReceiver {
75 public void onReceive(Context content, Intent intent) {
76 // TODO - this should understand the interface types
77 ArrayList<String> available = intent.getStringArrayListExtra(
78 ConnectivityManager.EXTRA_AVAILABLE_TETHER);
79 ArrayList<String> active = intent.getStringArrayListExtra(
80 ConnectivityManager.EXTRA_ACTIVE_TETHER);
82 updateState(available, active);
87 protected void onResume() {
89 mEnableTetherNotice.setChecked(Settings.Secure.getInt(getContentResolver(),
90 Settings.Secure.TETHER_NOTIFY, 0) != 0);
92 IntentFilter filter = new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
93 filter.addAction(Intent.ACTION_MEDIA_SHARED);
94 filter.addAction(Intent.ACTION_MEDIA_UNSHARED);
95 mTetherChangeReceiver = new TetherChangeReceiver();
96 Intent intent = registerReceiver(mTetherChangeReceiver, filter);
98 if (intent != null) mTetherChangeReceiver.onReceive(this, intent);
102 protected void onPause() {
104 unregisterReceiver(mTetherChangeReceiver);
105 mTetherChangeReceiver = null;
108 private void updateState(ArrayList<String> available, ArrayList<String> tethered) {
109 boolean usbTethered = false;
110 boolean usbAvailable = false;
111 boolean wifiTethered = false;
112 boolean wifiAvailable = false;
113 boolean massStorageActive =
114 Environment.MEDIA_SHARED.equals(Environment.getExternalStorageState());
116 for (String s : available) {
117 for (String regex : mUsbRegexs) {
118 if (s.matches(regex)) usbAvailable = true;
120 for (String regex : mWifiRegexs) {
121 if (s.matches(regex)) wifiAvailable = true;
124 for (String s : tethered) {
125 for (String regex : mUsbRegexs) {
126 if (s.matches(regex)) usbTethered = true;
128 for (String regex : mWifiRegexs) {
129 if (s.matches(regex)) wifiTethered = true;
134 mUsbTether.setSummary(R.string.usb_tethering_active_subtext);
135 mUsbTether.setEnabled(true);
136 } else if (massStorageActive) {
137 mUsbTether.setSummary(R.string.usb_tethering_storage_active_subtext);
138 mUsbTether.setEnabled(false);
139 } else if (usbAvailable) {
140 mUsbTether.setSummary(R.string.usb_tethering_available_subtext);
141 mUsbTether.setEnabled(true);
143 mUsbTether.setSummary(R.string.usb_tethering_unavailable_subtext);
144 mUsbTether.setEnabled(false);
149 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
151 if (preference == mEnableTetherNotice) {
152 boolean newState = mEnableTetherNotice.isChecked();
153 Settings.Secure.putInt(getContentResolver(),
154 Settings.Secure.TETHER_NOTIFY, newState ? 1 : 0);