blob: b9e266a8aa9eccf51ac746f6cb16924e752be8a2 [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;
Mike Lockwood26dad3e2010-03-03 06:19:55 -050026import android.os.Environment;
Robert Greenwalt3901edb2010-01-26 10:22:37 -080027import android.preference.Preference;
28import android.preference.PreferenceActivity;
29import android.preference.PreferenceScreen;
30import android.preference.CheckBoxPreference;
31import android.provider.Settings;
32import android.util.Log;
33
Robert Greenwaltc4764d22010-02-12 14:21:37 -080034import java.util.ArrayList;
Robert Greenwalt3901edb2010-01-26 10:22:37 -080035/*
36 * Displays preferences for Tethering.
37 */
38public class TetherSettings extends PreferenceActivity {
39
40 private static final String ENABLE_TETHER_NOTICE = "enable_tether_notice";
41 private static final String USB_TETHER_SETTINGS = "usb_tether_settings";
42
43 private CheckBoxPreference mEnableTetherNotice;
44 private PreferenceScreen mUsbTether;
45
46 private BroadcastReceiver mTetherChangeReceiver;
47
Robert Greenwaltc4764d22010-02-12 14:21:37 -080048 private String[] mUsbRegexs;
49 private ArrayList mUsbIfaces;
50
51 private String[] mWifiRegexs;
52 private ArrayList mWifiIfaces;
53
Robert Greenwalt3901edb2010-01-26 10:22:37 -080054 @Override
55 protected void onCreate(Bundle icicle) {
56 super.onCreate(icicle);
57
58 addPreferencesFromResource(R.xml.tether_prefs);
59
60 mEnableTetherNotice = (CheckBoxPreference) findPreference(ENABLE_TETHER_NOTICE);
61 mUsbTether = (PreferenceScreen) findPreference(USB_TETHER_SETTINGS);
Robert Greenwaltc4764d22010-02-12 14:21:37 -080062
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);
69 }
70 mWifiRegexs = cm.getTetherableWifiRegexs();
Robert Greenwalt3901edb2010-01-26 10:22:37 -080071 }
72
Robert Greenwaltc4764d22010-02-12 14:21:37 -080073
Robert Greenwalt3901edb2010-01-26 10:22:37 -080074 private class TetherChangeReceiver extends BroadcastReceiver {
75 public void onReceive(Context content, Intent intent) {
Robert Greenwaltc4764d22010-02-12 14:21:37 -080076 // 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);
81
82 updateState(available, active);
Robert Greenwalt3901edb2010-01-26 10:22:37 -080083 }
84 }
85
86 @Override
87 protected void onResume() {
88 super.onResume();
89 mEnableTetherNotice.setChecked(Settings.Secure.getInt(getContentResolver(),
90 Settings.Secure.TETHER_NOTIFY, 0) != 0);
91
92 IntentFilter filter = new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
Mike Lockwood26dad3e2010-03-03 06:19:55 -050093 filter.addAction(Intent.ACTION_MEDIA_SHARED);
94 filter.addAction(Intent.ACTION_MEDIA_UNSHARED);
Robert Greenwalt3901edb2010-01-26 10:22:37 -080095 mTetherChangeReceiver = new TetherChangeReceiver();
Robert Greenwaltc4764d22010-02-12 14:21:37 -080096 Intent intent = registerReceiver(mTetherChangeReceiver, filter);
Robert Greenwalt3901edb2010-01-26 10:22:37 -080097
Robert Greenwaltc4764d22010-02-12 14:21:37 -080098 if (intent != null) mTetherChangeReceiver.onReceive(this, intent);
Robert Greenwalt3901edb2010-01-26 10:22:37 -080099 }
100
101 @Override
102 protected void onPause() {
103 super.onPause();
104 unregisterReceiver(mTetherChangeReceiver);
105 mTetherChangeReceiver = null;
106 }
107
Robert Greenwaltc4764d22010-02-12 14:21:37 -0800108 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;
Mike Lockwood26dad3e2010-03-03 06:19:55 -0500113 boolean massStorageActive =
114 Environment.MEDIA_SHARED.equals(Environment.getExternalStorageState());
Robert Greenwaltc4764d22010-02-12 14:21:37 -0800115
116 for (String s : available) {
117 for (String regex : mUsbRegexs) {
118 if (s.matches(regex)) usbAvailable = true;
119 }
120 for (String regex : mWifiRegexs) {
121 if (s.matches(regex)) wifiAvailable = true;
122 }
123 }
124 for (String s : tethered) {
125 for (String regex : mUsbRegexs) {
126 if (s.matches(regex)) usbTethered = true;
127 }
128 for (String regex : mWifiRegexs) {
129 if (s.matches(regex)) wifiTethered = true;
130 }
131 }
132
133 if (usbTethered) {
Robert Greenwalt3901edb2010-01-26 10:22:37 -0800134 mUsbTether.setSummary(R.string.usb_tethering_active_subtext);
135 mUsbTether.setEnabled(true);
Mike Lockwood26dad3e2010-03-03 06:19:55 -0500136 } else if (massStorageActive) {
137 mUsbTether.setSummary(R.string.usb_tethering_storage_active_subtext);
138 mUsbTether.setEnabled(false);
Robert Greenwaltc4764d22010-02-12 14:21:37 -0800139 } else if (usbAvailable) {
Robert Greenwalt3901edb2010-01-26 10:22:37 -0800140 mUsbTether.setSummary(R.string.usb_tethering_available_subtext);
141 mUsbTether.setEnabled(true);
142 } else {
143 mUsbTether.setSummary(R.string.usb_tethering_unavailable_subtext);
144 mUsbTether.setEnabled(false);
145 }
146 }
147
148 @Override
149 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
150
151 if (preference == mEnableTetherNotice) {
152 boolean newState = mEnableTetherNotice.isChecked();
153 Settings.Secure.putInt(getContentResolver(),
154 Settings.Secure.TETHER_NOTIFY, newState ? 1 : 0);
155 return true;
156 }
157 return false;
158 }
159
160}