blob: 1e9c4e292ea01270f1d7e0826314ab0965af017e [file] [log] [blame]
Robert Greenwalt3901edb2010-01-26 10:22:37 -08001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16
17package com.android.settings;
18
19import android.os.Bundle;
20import android.os.SystemProperties;
21import android.content.BroadcastReceiver;
22import android.content.Context;
23import android.content.Intent;
24import android.content.IntentFilter;
25import android.net.ConnectivityManager;
26import android.preference.Preference;
27import android.preference.PreferenceActivity;
28import android.preference.PreferenceScreen;
29import android.preference.CheckBoxPreference;
30import android.provider.Settings;
31import android.util.Log;
32
Robert Greenwaltc4764d22010-02-12 14:21:37 -080033import java.util.ArrayList;
Robert Greenwalt3901edb2010-01-26 10:22:37 -080034/*
35 * Displays preferences for Tethering.
36 */
37public class TetherSettings extends PreferenceActivity {
38
39 private static final String ENABLE_TETHER_NOTICE = "enable_tether_notice";
40 private static final String USB_TETHER_SETTINGS = "usb_tether_settings";
41
42 private CheckBoxPreference mEnableTetherNotice;
43 private PreferenceScreen mUsbTether;
44
45 private BroadcastReceiver mTetherChangeReceiver;
46
Robert Greenwaltc4764d22010-02-12 14:21:37 -080047 private String[] mUsbRegexs;
48 private ArrayList mUsbIfaces;
49
50 private String[] mWifiRegexs;
51 private ArrayList mWifiIfaces;
52
Robert Greenwalt3901edb2010-01-26 10:22:37 -080053 @Override
54 protected void onCreate(Bundle icicle) {
55 super.onCreate(icicle);
56
57 addPreferencesFromResource(R.xml.tether_prefs);
58
59 mEnableTetherNotice = (CheckBoxPreference) findPreference(ENABLE_TETHER_NOTICE);
60 mUsbTether = (PreferenceScreen) findPreference(USB_TETHER_SETTINGS);
Robert Greenwaltc4764d22010-02-12 14:21:37 -080061
62 ConnectivityManager cm =
63 (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
64 mUsbRegexs = cm.getTetherableUsbRegexs();
65 if (mUsbRegexs.length == 0) {
66 getPreferenceScreen().removePreference(mUsbTether);
67 getPreferenceScreen().removePreference(mEnableTetherNotice);
68 }
69 mWifiRegexs = cm.getTetherableWifiRegexs();
Robert Greenwalt3901edb2010-01-26 10:22:37 -080070 }
71
Robert Greenwaltc4764d22010-02-12 14:21:37 -080072
Robert Greenwalt3901edb2010-01-26 10:22:37 -080073 private class TetherChangeReceiver extends BroadcastReceiver {
74 public void onReceive(Context content, Intent intent) {
Robert Greenwaltc4764d22010-02-12 14:21:37 -080075 // TODO - this should understand the interface types
76 ArrayList<String> available = intent.getStringArrayListExtra(
77 ConnectivityManager.EXTRA_AVAILABLE_TETHER);
78 ArrayList<String> active = intent.getStringArrayListExtra(
79 ConnectivityManager.EXTRA_ACTIVE_TETHER);
80
81 updateState(available, active);
Robert Greenwalt3901edb2010-01-26 10:22:37 -080082 }
83 }
84
85 @Override
86 protected void onResume() {
87 super.onResume();
88 mEnableTetherNotice.setChecked(Settings.Secure.getInt(getContentResolver(),
89 Settings.Secure.TETHER_NOTIFY, 0) != 0);
90
91 IntentFilter filter = new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
92 mTetherChangeReceiver = new TetherChangeReceiver();
Robert Greenwaltc4764d22010-02-12 14:21:37 -080093 Intent intent = registerReceiver(mTetherChangeReceiver, filter);
Robert Greenwalt3901edb2010-01-26 10:22:37 -080094
Robert Greenwaltc4764d22010-02-12 14:21:37 -080095 if (intent != null) mTetherChangeReceiver.onReceive(this, intent);
Robert Greenwalt3901edb2010-01-26 10:22:37 -080096 }
97
98 @Override
99 protected void onPause() {
100 super.onPause();
101 unregisterReceiver(mTetherChangeReceiver);
102 mTetherChangeReceiver = null;
103 }
104
Robert Greenwaltc4764d22010-02-12 14:21:37 -0800105 private void updateState(ArrayList<String> available, ArrayList<String> tethered) {
106 boolean usbTethered = false;
107 boolean usbAvailable = false;
108 boolean wifiTethered = false;
109 boolean wifiAvailable = false;
110
111 for (String s : available) {
112 for (String regex : mUsbRegexs) {
113 if (s.matches(regex)) usbAvailable = true;
114 }
115 for (String regex : mWifiRegexs) {
116 if (s.matches(regex)) wifiAvailable = true;
117 }
118 }
119 for (String s : tethered) {
120 for (String regex : mUsbRegexs) {
121 if (s.matches(regex)) usbTethered = true;
122 }
123 for (String regex : mWifiRegexs) {
124 if (s.matches(regex)) wifiTethered = true;
125 }
126 }
127
128 if (usbTethered) {
Robert Greenwalt3901edb2010-01-26 10:22:37 -0800129 mUsbTether.setSummary(R.string.usb_tethering_active_subtext);
130 mUsbTether.setEnabled(true);
Robert Greenwaltc4764d22010-02-12 14:21:37 -0800131 } else if (usbAvailable) {
Robert Greenwalt3901edb2010-01-26 10:22:37 -0800132 mUsbTether.setSummary(R.string.usb_tethering_available_subtext);
133 mUsbTether.setEnabled(true);
134 } else {
135 mUsbTether.setSummary(R.string.usb_tethering_unavailable_subtext);
136 mUsbTether.setEnabled(false);
137 }
138 }
139
140 @Override
141 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
142
143 if (preference == mEnableTetherNotice) {
144 boolean newState = mEnableTetherNotice.isChecked();
145 Settings.Secure.putInt(getContentResolver(),
146 Settings.Secure.TETHER_NOTIFY, newState ? 1 : 0);
147 return true;
148 }
149 return false;
150 }
151
152}