blob: fb2348e9c3a60ab82bec0efb15e92ffb61320f41 [file] [log] [blame]
Joe Onoratofd52b182010-11-10 18:00:52 -08001/*
2 * Copyright (C) 2010 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.systemui.statusbar.policy;
18
Joe Onoratofd52b182010-11-10 18:00:52 -080019import android.content.BroadcastReceiver;
20import android.content.Context;
21import android.content.Intent;
22import android.content.IntentFilter;
Joe Onorato933464d2011-01-05 15:53:36 -080023import android.content.res.Resources;
Joe Onoratofd52b182010-11-10 18:00:52 -080024import android.net.ConnectivityManager;
25import android.net.NetworkInfo;
Joe Onoratofd52b182010-11-10 18:00:52 -080026import android.net.wifi.WifiConfiguration;
27import android.net.wifi.WifiInfo;
28import android.net.wifi.WifiManager;
tk.mun148c7d02011-10-13 22:51:57 +090029import android.net.wimax.WimaxManagerConstants;
Irfan Sheriff227bec42011-02-15 19:30:27 -080030import android.os.Handler;
Irfan Sheriff227bec42011-02-15 19:30:27 -080031import android.os.Message;
32import android.os.Messenger;
Joe Onoratofd52b182010-11-10 18:00:52 -080033import android.provider.Settings;
34import android.telephony.PhoneStateListener;
35import android.telephony.ServiceState;
36import android.telephony.SignalStrength;
37import android.telephony.TelephonyManager;
John Spurlockcd686b52013-06-05 10:13:46 -040038import android.util.Log;
Joe Onoratoddbba422010-11-23 15:42:28 -080039import android.view.View;
Joe Onoratofd52b182010-11-10 18:00:52 -080040import android.widget.ImageView;
41import android.widget.TextView;
42
Wink Savillea639b312012-07-10 12:37:54 -070043import com.android.internal.telephony.IccCardConstants;
Joe Onoratofd52b182010-11-10 18:00:52 -080044import com.android.internal.telephony.TelephonyIntents;
45import com.android.internal.telephony.cdma.EriInfo;
Irfan Sheriff227bec42011-02-15 19:30:27 -080046import com.android.internal.util.AsyncChannel;
Joe Onoratofd52b182010-11-10 18:00:52 -080047import com.android.systemui.R;
48
Winson Chung4f49d942012-09-14 14:01:40 -070049import java.io.FileDescriptor;
50import java.io.PrintWriter;
51import java.util.ArrayList;
52import java.util.List;
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -070053import java.util.Locale;
Winson Chung4f49d942012-09-14 14:01:40 -070054
Joe Onoratofd52b182010-11-10 18:00:52 -080055public class NetworkController extends BroadcastReceiver {
56 // debug
57 static final String TAG = "StatusBar.NetworkController";
58 static final boolean DEBUG = false;
Daniel Sandler7c351742011-10-17 10:48:06 -040059 static final boolean CHATTY = false; // additional diagnostics, but not logspew
Joe Onoratofd52b182010-11-10 18:00:52 -080060
61 // telephony
62 boolean mHspaDataDistinguishable;
63 final TelephonyManager mPhone;
64 boolean mDataConnected;
Wink Savillea639b312012-07-10 12:37:54 -070065 IccCardConstants.State mSimState = IccCardConstants.State.READY;
Joe Onoratofd52b182010-11-10 18:00:52 -080066 int mPhoneState = TelephonyManager.CALL_STATE_IDLE;
Joe Onorato933464d2011-01-05 15:53:36 -080067 int mDataNetType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
Joe Onoratofd52b182010-11-10 18:00:52 -080068 int mDataState = TelephonyManager.DATA_DISCONNECTED;
69 int mDataActivity = TelephonyManager.DATA_ACTIVITY_NONE;
70 ServiceState mServiceState;
71 SignalStrength mSignalStrength;
72 int[] mDataIconList = TelephonyIcons.DATA_G[0];
Joe Onorato355ebc02010-12-01 17:37:00 -080073 String mNetworkName;
74 String mNetworkNameDefault;
75 String mNetworkNameSeparator;
Joe Onoratoddbba422010-11-23 15:42:28 -080076 int mPhoneSignalIconId;
Winson Chunged1395f2012-09-13 18:13:44 -070077 int mQSPhoneSignalIconId;
Daniel Sandler28f89d42011-08-15 14:04:15 -040078 int mDataDirectionIconId; // data + data direction on phones
Joe Onoratoddbba422010-11-23 15:42:28 -080079 int mDataSignalIconId;
80 int mDataTypeIconId;
Winson Chung4f49d942012-09-14 14:01:40 -070081 int mQSDataTypeIconId;
Andrew Flynn061d43c2012-05-04 10:57:58 -070082 int mAirplaneIconId;
Joe Onoratoc198bb12011-01-31 20:28:59 -080083 boolean mDataActive;
Daniel Sandler28f89d42011-08-15 14:04:15 -040084 int mMobileActivityIconId; // overlay arrows for data direction
Daniel Sandlerc49e1952011-09-20 10:45:53 -040085 int mLastSignalLevel;
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -070086 boolean mShowPhoneRSSIForData = false;
87 boolean mShowAtLeastThreeGees = false;
John Wangd55cde12012-02-13 17:16:41 -080088 boolean mAlwaysShowCdmaRssi = false;
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -080089
Svetoslav Ganov6179ea32011-06-28 01:12:41 -070090 String mContentDescriptionPhoneSignal;
91 String mContentDescriptionWifi;
tk.mun148c7d02011-10-13 22:51:57 +090092 String mContentDescriptionWimax;
Svetoslav Ganov6179ea32011-06-28 01:12:41 -070093 String mContentDescriptionCombinedSignal;
94 String mContentDescriptionDataType;
95
Joe Onoratofd52b182010-11-10 18:00:52 -080096 // wifi
97 final WifiManager mWifiManager;
Irfan Sheriff227bec42011-02-15 19:30:27 -080098 AsyncChannel mWifiChannel;
Joe Onoratofd52b182010-11-10 18:00:52 -080099 boolean mWifiEnabled, mWifiConnected;
Daniel Sandler0d6ff0102011-10-19 21:02:37 -0400100 int mWifiRssi, mWifiLevel;
Joe Onoratofd52b182010-11-10 18:00:52 -0800101 String mWifiSsid;
Daniel Sandler9a7c7122011-02-25 12:28:57 -0500102 int mWifiIconId = 0;
Winson Chunged1395f2012-09-13 18:13:44 -0700103 int mQSWifiIconId = 0;
Daniel Sandler28f89d42011-08-15 14:04:15 -0400104 int mWifiActivityIconId = 0; // overlay arrows for wifi direction
Joe Onoratof32621a2011-03-10 15:29:49 -0800105 int mWifiActivity = WifiManager.DATA_ACTIVITY_NONE;
Joe Onoratofd52b182010-11-10 18:00:52 -0800106
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -0800107 // bluetooth
108 private boolean mBluetoothTethered = false;
109 private int mBluetoothTetherIconId =
110 com.android.internal.R.drawable.stat_sys_tether_bluetooth;
111
tk.mun148c7d02011-10-13 22:51:57 +0900112 //wimax
Daniel Sandler0fee2172011-11-10 00:15:38 -0500113 private boolean mWimaxSupported = false;
tk.mun148c7d02011-10-13 22:51:57 +0900114 private boolean mIsWimaxEnabled = false;
115 private boolean mWimaxConnected = false;
116 private boolean mWimaxIdle = false;
117 private int mWimaxIconId = 0;
118 private int mWimaxSignal = 0;
119 private int mWimaxState = 0;
120 private int mWimaxExtraState = 0;
Daniel Sandler67234c42012-06-15 13:17:39 -0400121
Joe Onoratofd52b182010-11-10 18:00:52 -0800122 // data connectivity (regardless of state, can we access the internet?)
123 // state of inet connection - 0 not connected, 100 connected
Daniel Sandler67234c42012-06-15 13:17:39 -0400124 private boolean mConnected = false;
125 private int mConnectedNetworkType = ConnectivityManager.TYPE_NONE;
126 private String mConnectedNetworkTypeName;
Joe Onoratofd52b182010-11-10 18:00:52 -0800127 private int mInetCondition = 0;
128 private static final int INET_CONDITION_THRESHOLD = 50;
129
Mike Corriganbd151122011-02-24 15:24:47 -0600130 private boolean mAirplaneMode = false;
Andrew Flynn0fa9d2d2012-05-31 15:39:15 -0700131 private boolean mLastAirplaneMode = true;
Mike Corriganbd151122011-02-24 15:24:47 -0600132
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -0700133 private Locale mLocale = null;
134 private Locale mLastLocale = null;
135
Joe Onoratofd52b182010-11-10 18:00:52 -0800136 // our ui
137 Context mContext;
Joe Onoratoddbba422010-11-23 15:42:28 -0800138 ArrayList<ImageView> mPhoneSignalIconViews = new ArrayList<ImageView>();
139 ArrayList<ImageView> mDataDirectionIconViews = new ArrayList<ImageView>();
Joe Onoratofce2bf32011-02-01 17:00:29 -0800140 ArrayList<ImageView> mDataDirectionOverlayIconViews = new ArrayList<ImageView>();
Joe Onoratoddbba422010-11-23 15:42:28 -0800141 ArrayList<ImageView> mWifiIconViews = new ArrayList<ImageView>();
tk.mun148c7d02011-10-13 22:51:57 +0900142 ArrayList<ImageView> mWimaxIconViews = new ArrayList<ImageView>();
Joe Onoratoddbba422010-11-23 15:42:28 -0800143 ArrayList<ImageView> mCombinedSignalIconViews = new ArrayList<ImageView>();
144 ArrayList<ImageView> mDataTypeIconViews = new ArrayList<ImageView>();
Daniel Sandler5962fd52012-01-11 14:57:04 -0500145 ArrayList<TextView> mCombinedLabelViews = new ArrayList<TextView>();
146 ArrayList<TextView> mMobileLabelViews = new ArrayList<TextView>();
147 ArrayList<TextView> mWifiLabelViews = new ArrayList<TextView>();
Daniel Sandlerdd4ef492012-07-27 11:19:52 -0400148 ArrayList<TextView> mEmergencyLabelViews = new ArrayList<TextView>();
Christian Robertson2e347422011-08-11 14:01:04 -0700149 ArrayList<SignalCluster> mSignalClusters = new ArrayList<SignalCluster>();
Winson Chungd63c59782012-09-05 17:34:41 -0700150 ArrayList<NetworkSignalChangedCallback> mSignalsChangedCallbacks =
151 new ArrayList<NetworkSignalChangedCallback>();
Joe Onoratofd52b182010-11-10 18:00:52 -0800152 int mLastPhoneSignalIconId = -1;
Joe Onoratoddbba422010-11-23 15:42:28 -0800153 int mLastDataDirectionIconId = -1;
Joe Onoratofce2bf32011-02-01 17:00:29 -0800154 int mLastDataDirectionOverlayIconId = -1;
Joe Onoratoddbba422010-11-23 15:42:28 -0800155 int mLastWifiIconId = -1;
tk.mun148c7d02011-10-13 22:51:57 +0900156 int mLastWimaxIconId = -1;
Joe Onoratoddbba422010-11-23 15:42:28 -0800157 int mLastCombinedSignalIconId = -1;
158 int mLastDataTypeIconId = -1;
Daniel Sandler5962fd52012-01-11 14:57:04 -0500159 String mLastCombinedLabel = "";
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -0800160
Robert Greenwalt9b2886e2011-08-31 11:46:42 -0700161 private boolean mHasMobileDataFeature;
162
Daniel Sandler2b697352011-07-22 16:23:09 -0400163 boolean mDataAndWifiStacked = false;
164
Christian Robertson2e347422011-08-11 14:01:04 -0700165 public interface SignalCluster {
John Wangd55cde12012-02-13 17:16:41 -0800166 void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon,
Daniel Sandlerbcf6ef0b2011-09-30 11:43:36 -0400167 String contentDescription);
Christian Robertson2e347422011-08-11 14:01:04 -0700168 void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
Daniel Sandlerbcf6ef0b2011-09-30 11:43:36 -0400169 int typeIcon, String contentDescription, String typeContentDescription);
Andrew Flynn061d43c2012-05-04 10:57:58 -0700170 void setIsAirplaneMode(boolean is, int airplaneIcon);
Christian Robertson2e347422011-08-11 14:01:04 -0700171 }
172
Winson Chungd63c59782012-09-05 17:34:41 -0700173 public interface NetworkSignalChangedCallback {
Casey Burkhardtbac221f2012-10-03 18:13:58 -0700174 void onWifiSignalChanged(boolean enabled, int wifiSignalIconId,
175 String wifitSignalContentDescriptionId, String description);
176 void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId,
177 String mobileSignalContentDescriptionId, int dataTypeIconId,
178 String dataTypeContentDescriptionId, String description);
Winson Chungd63c59782012-09-05 17:34:41 -0700179 void onAirplaneModeChanged(boolean enabled);
180 }
181
Joe Onoratofd52b182010-11-10 18:00:52 -0800182 /**
183 * Construct this controller object and register for updates.
184 */
185 public NetworkController(Context context) {
186 mContext = context;
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -0700187 final Resources res = context.getResources();
Joe Onoratofd52b182010-11-10 18:00:52 -0800188
Robert Greenwalt9b2886e2011-08-31 11:46:42 -0700189 ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(
190 Context.CONNECTIVITY_SERVICE);
191 mHasMobileDataFeature = cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE);
192
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -0700193 mShowPhoneRSSIForData = res.getBoolean(R.bool.config_showPhoneRSSIForData);
194 mShowAtLeastThreeGees = res.getBoolean(R.bool.config_showMin3G);
John Wangd55cde12012-02-13 17:16:41 -0800195 mAlwaysShowCdmaRssi = res.getBoolean(
196 com.android.internal.R.bool.config_alwaysUseCdmaRssi);
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -0700197
Daniel Sandler9a7c7122011-02-25 12:28:57 -0500198 // set up the default wifi icon, used when no radios have ever appeared
199 updateWifiIcons();
tk.mun148c7d02011-10-13 22:51:57 +0900200 updateWimaxIcons();
Daniel Sandler9a7c7122011-02-25 12:28:57 -0500201
Joe Onoratofd52b182010-11-10 18:00:52 -0800202 // telephony
203 mPhone = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
204 mPhone.listen(mPhoneStateListener,
205 PhoneStateListener.LISTEN_SERVICE_STATE
206 | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
207 | PhoneStateListener.LISTEN_CALL_STATE
208 | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
209 | PhoneStateListener.LISTEN_DATA_ACTIVITY);
210 mHspaDataDistinguishable = mContext.getResources().getBoolean(
211 R.bool.config_hspa_data_distinguishable);
Joe Onorato355ebc02010-12-01 17:37:00 -0800212 mNetworkNameSeparator = mContext.getString(R.string.status_bar_network_name_separator);
213 mNetworkNameDefault = mContext.getString(
214 com.android.internal.R.string.lockscreen_carrier_default);
215 mNetworkName = mNetworkNameDefault;
Joe Onoratofd52b182010-11-10 18:00:52 -0800216
217 // wifi
218 mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
Joe Onoratof32621a2011-03-10 15:29:49 -0800219 Handler handler = new WifiHandler();
Irfan Sheriff227bec42011-02-15 19:30:27 -0800220 mWifiChannel = new AsyncChannel();
Irfan Sheriff07573b32012-01-27 21:00:19 -0800221 Messenger wifiMessenger = mWifiManager.getWifiServiceMessenger();
Irfan Sheriff227bec42011-02-15 19:30:27 -0800222 if (wifiMessenger != null) {
223 mWifiChannel.connect(mContext, handler, wifiMessenger);
224 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800225
226 // broadcasts
227 IntentFilter filter = new IntentFilter();
228 filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
229 filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
Joe Onoratofd52b182010-11-10 18:00:52 -0800230 filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
231 filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
Wink Savillea639b312012-07-10 12:37:54 -0700232 filter.addAction(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION);
Joe Onorato355ebc02010-12-01 17:37:00 -0800233 filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
234 filter.addAction(ConnectivityManager.INET_CONDITION_ACTION);
Joe Onorato99641832011-01-30 12:12:05 -0800235 filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
Mike Corriganbd151122011-02-24 15:24:47 -0600236 filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
Daniel Sandler0fee2172011-11-10 00:15:38 -0500237 mWimaxSupported = mContext.getResources().getBoolean(
tk.mun148c7d02011-10-13 22:51:57 +0900238 com.android.internal.R.bool.config_wimaxEnabled);
Daniel Sandler0fee2172011-11-10 00:15:38 -0500239 if(mWimaxSupported) {
tk.mun148c7d02011-10-13 22:51:57 +0900240 filter.addAction(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION);
241 filter.addAction(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION);
242 filter.addAction(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION);
243 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800244 context.registerReceiver(this, filter);
245
Mike Corriganbd151122011-02-24 15:24:47 -0600246 // AIRPLANE_MODE_CHANGED is sent at boot; we've probably already missed it
247 updateAirplaneMode();
248
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -0700249 mLastLocale = mContext.getResources().getConfiguration().locale;
Joe Onoratofd52b182010-11-10 18:00:52 -0800250 }
251
Daniel Sandler3d32a242012-06-05 13:44:14 -0400252 public boolean hasMobileDataFeature() {
253 return mHasMobileDataFeature;
254 }
255
Daniel Sandler8b268d42013-05-28 16:17:13 -0400256 public boolean hasVoiceCallingFeature() {
257 return mPhone.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE;
258 }
259
Daniel Sandlerdd4ef492012-07-27 11:19:52 -0400260 public boolean isEmergencyOnly() {
261 return (mServiceState != null && mServiceState.isEmergencyOnly());
262 }
263
Joe Onoratoddbba422010-11-23 15:42:28 -0800264 public void addPhoneSignalIconView(ImageView v) {
265 mPhoneSignalIconViews.add(v);
Joe Onoratofd52b182010-11-10 18:00:52 -0800266 }
267
Joe Onoratoddbba422010-11-23 15:42:28 -0800268 public void addDataDirectionIconView(ImageView v) {
269 mDataDirectionIconViews.add(v);
270 }
271
Joe Onoratofce2bf32011-02-01 17:00:29 -0800272 public void addDataDirectionOverlayIconView(ImageView v) {
273 mDataDirectionOverlayIconViews.add(v);
274 }
275
Joe Onoratoddbba422010-11-23 15:42:28 -0800276 public void addWifiIconView(ImageView v) {
277 mWifiIconViews.add(v);
278 }
tk.mun148c7d02011-10-13 22:51:57 +0900279 public void addWimaxIconView(ImageView v) {
280 mWimaxIconViews.add(v);
281 }
Joe Onoratoddbba422010-11-23 15:42:28 -0800282
283 public void addCombinedSignalIconView(ImageView v) {
284 mCombinedSignalIconViews.add(v);
285 }
286
287 public void addDataTypeIconView(ImageView v) {
288 mDataTypeIconViews.add(v);
Joe Onoratofd52b182010-11-10 18:00:52 -0800289 }
290
Daniel Sandler5962fd52012-01-11 14:57:04 -0500291 public void addCombinedLabelView(TextView v) {
292 mCombinedLabelViews.add(v);
293 }
294
295 public void addMobileLabelView(TextView v) {
296 mMobileLabelViews.add(v);
297 }
298
299 public void addWifiLabelView(TextView v) {
300 mWifiLabelViews.add(v);
Joe Onoratofd52b182010-11-10 18:00:52 -0800301 }
302
Daniel Sandlerdd4ef492012-07-27 11:19:52 -0400303 public void addEmergencyLabelView(TextView v) {
304 mEmergencyLabelViews.add(v);
305 }
306
Daniel Sandler28f89d42011-08-15 14:04:15 -0400307 public void addSignalCluster(SignalCluster cluster) {
308 mSignalClusters.add(cluster);
Daniel Sandler0fee2172011-11-10 00:15:38 -0500309 refreshSignalCluster(cluster);
310 }
311
Winson Chungd63c59782012-09-05 17:34:41 -0700312 public void addNetworkSignalChangedCallback(NetworkSignalChangedCallback cb) {
313 mSignalsChangedCallbacks.add(cb);
314 notifySignalsChangedCallbacks(cb);
315 }
316
Daniel Sandler0fee2172011-11-10 00:15:38 -0500317 public void refreshSignalCluster(SignalCluster cluster) {
Daniel Sandler28f89d42011-08-15 14:04:15 -0400318 cluster.setWifiIndicators(
Daniel Sandlerd4b7e922012-05-17 12:52:51 -0400319 // only show wifi in the cluster if connected or if wifi-only
320 mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature),
Daniel Sandler28f89d42011-08-15 14:04:15 -0400321 mWifiIconId,
Daniel Sandlerbcf6ef0b2011-09-30 11:43:36 -0400322 mWifiActivityIconId,
323 mContentDescriptionWifi);
Daniel Sandlerbcf6ef0b2011-09-30 11:43:36 -0400324
Daniel Sandler0fee2172011-11-10 00:15:38 -0500325 if (mIsWimaxEnabled && mWimaxConnected) {
326 // wimax is special
327 cluster.setMobileDataIndicators(
328 true,
John Wangd55cde12012-02-13 17:16:41 -0800329 mAlwaysShowCdmaRssi ? mPhoneSignalIconId : mWimaxIconId,
Daniel Sandler0fee2172011-11-10 00:15:38 -0500330 mMobileActivityIconId,
331 mDataTypeIconId,
332 mContentDescriptionWimax,
333 mContentDescriptionDataType);
334 } else {
335 // normal mobile data
336 cluster.setMobileDataIndicators(
337 mHasMobileDataFeature,
338 mShowPhoneRSSIForData ? mPhoneSignalIconId : mDataSignalIconId,
339 mMobileActivityIconId,
340 mDataTypeIconId,
341 mContentDescriptionPhoneSignal,
342 mContentDescriptionDataType);
343 }
Andrew Flynn061d43c2012-05-04 10:57:58 -0700344 cluster.setIsAirplaneMode(mAirplaneMode, mAirplaneIconId);
Christian Robertson2e347422011-08-11 14:01:04 -0700345 }
346
Winson Chungd63c59782012-09-05 17:34:41 -0700347 void notifySignalsChangedCallbacks(NetworkSignalChangedCallback cb) {
348 // only show wifi in the cluster if connected or if wifi-only
349 boolean wifiEnabled = mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature);
350 String wifiDesc = wifiEnabled ?
351 mWifiSsid : null;
Casey Burkhardtbac221f2012-10-03 18:13:58 -0700352 cb.onWifiSignalChanged(wifiEnabled, mQSWifiIconId, mContentDescriptionWifi, wifiDesc);
Winson Chungd63c59782012-09-05 17:34:41 -0700353
354 if (isEmergencyOnly()) {
Casey Burkhardtbac221f2012-10-03 18:13:58 -0700355 cb.onMobileDataSignalChanged(false, mQSPhoneSignalIconId,
356 mContentDescriptionPhoneSignal, mQSDataTypeIconId, mContentDescriptionDataType,
357 null);
Winson Chungd63c59782012-09-05 17:34:41 -0700358 } else {
359 if (mIsWimaxEnabled && mWimaxConnected) {
Winson Chung4f49d942012-09-14 14:01:40 -0700360 // Wimax is special
Casey Burkhardtbac221f2012-10-03 18:13:58 -0700361 cb.onMobileDataSignalChanged(true, mQSPhoneSignalIconId,
362 mContentDescriptionPhoneSignal, mQSDataTypeIconId,
363 mContentDescriptionDataType, mNetworkName);
Winson Chung4f49d942012-09-14 14:01:40 -0700364 } else {
365 // Normal mobile data
366 cb.onMobileDataSignalChanged(mHasMobileDataFeature, mQSPhoneSignalIconId,
Casey Burkhardtbac221f2012-10-03 18:13:58 -0700367 mContentDescriptionPhoneSignal, mQSDataTypeIconId,
368 mContentDescriptionDataType, mNetworkName);
Winson Chungd63c59782012-09-05 17:34:41 -0700369 }
370 }
371 cb.onAirplaneModeChanged(mAirplaneMode);
372 }
373
Daniel Sandler2b697352011-07-22 16:23:09 -0400374 public void setStackedMode(boolean stacked) {
375 mDataAndWifiStacked = true;
376 }
377
Wink Saville52840902011-02-18 12:40:47 -0800378 @Override
Joe Onoratofd52b182010-11-10 18:00:52 -0800379 public void onReceive(Context context, Intent intent) {
380 final String action = intent.getAction();
381 if (action.equals(WifiManager.RSSI_CHANGED_ACTION)
382 || action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)
Joe Onoratofd52b182010-11-10 18:00:52 -0800383 || action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
384 updateWifiState(intent);
385 refreshViews();
386 } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) {
387 updateSimState(intent);
388 updateDataIcon();
389 refreshViews();
Wink Savillea639b312012-07-10 12:37:54 -0700390 } else if (action.equals(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION)) {
391 updateNetworkName(intent.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_SPN, false),
392 intent.getStringExtra(TelephonyIntents.EXTRA_SPN),
393 intent.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_PLMN, false),
394 intent.getStringExtra(TelephonyIntents.EXTRA_PLMN));
Joe Onorato355ebc02010-12-01 17:37:00 -0800395 refreshViews();
Joe Onoratofd52b182010-11-10 18:00:52 -0800396 } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION) ||
397 action.equals(ConnectivityManager.INET_CONDITION_ACTION)) {
398 updateConnectivity(intent);
399 refreshViews();
Joe Onorato99641832011-01-30 12:12:05 -0800400 } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -0700401 refreshLocale();
Joe Onorato99641832011-01-30 12:12:05 -0800402 refreshViews();
Mike Corriganbd151122011-02-24 15:24:47 -0600403 } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -0700404 refreshLocale();
Mike Corriganbd151122011-02-24 15:24:47 -0600405 updateAirplaneMode();
406 refreshViews();
tk.mun148c7d02011-10-13 22:51:57 +0900407 } else if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION) ||
408 action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION) ||
409 action.equals(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION)) {
Daniel Sandler0fee2172011-11-10 00:15:38 -0500410 updateWimaxState(intent);
tk.mun148c7d02011-10-13 22:51:57 +0900411 refreshViews();
Joe Onoratofd52b182010-11-10 18:00:52 -0800412 }
413 }
414
415
416 // ===== Telephony ==============================================================
417
418 PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
419 @Override
420 public void onSignalStrengthsChanged(SignalStrength signalStrength) {
Daniel Sandlerda49dac2011-09-20 15:36:50 -0400421 if (DEBUG) {
John Spurlockcd686b52013-06-05 10:13:46 -0400422 Log.d(TAG, "onSignalStrengthsChanged signalStrength=" + signalStrength +
Daniel Sandlerc49e1952011-09-20 10:45:53 -0400423 ((signalStrength == null) ? "" : (" level=" + signalStrength.getLevel())));
Joe Onoratofd52b182010-11-10 18:00:52 -0800424 }
425 mSignalStrength = signalStrength;
426 updateTelephonySignalStrength();
427 refreshViews();
428 }
429
430 @Override
431 public void onServiceStateChanged(ServiceState state) {
432 if (DEBUG) {
John Spurlockcd686b52013-06-05 10:13:46 -0400433 Log.d(TAG, "onServiceStateChanged state=" + state.getState());
Joe Onoratofd52b182010-11-10 18:00:52 -0800434 }
435 mServiceState = state;
436 updateTelephonySignalStrength();
Daniel Sandler89d97132011-09-08 15:31:57 -0400437 updateDataNetType();
Joe Onoratofd52b182010-11-10 18:00:52 -0800438 updateDataIcon();
439 refreshViews();
440 }
441
442 @Override
443 public void onCallStateChanged(int state, String incomingNumber) {
444 if (DEBUG) {
John Spurlockcd686b52013-06-05 10:13:46 -0400445 Log.d(TAG, "onCallStateChanged state=" + state);
Joe Onoratofd52b182010-11-10 18:00:52 -0800446 }
447 // In cdma, if a voice call is made, RSSI should switch to 1x.
448 if (isCdma()) {
449 updateTelephonySignalStrength();
450 refreshViews();
451 }
452 }
453
454 @Override
455 public void onDataConnectionStateChanged(int state, int networkType) {
Daniel Sandlerc49e1952011-09-20 10:45:53 -0400456 if (DEBUG) {
John Spurlockcd686b52013-06-05 10:13:46 -0400457 Log.d(TAG, "onDataConnectionStateChanged: state=" + state
Joe Onoratofd52b182010-11-10 18:00:52 -0800458 + " type=" + networkType);
459 }
460 mDataState = state;
Joe Onorato933464d2011-01-05 15:53:36 -0800461 mDataNetType = networkType;
462 updateDataNetType();
Joe Onoratofd52b182010-11-10 18:00:52 -0800463 updateDataIcon();
464 refreshViews();
465 }
466
467 @Override
468 public void onDataActivity(int direction) {
469 if (DEBUG) {
John Spurlockcd686b52013-06-05 10:13:46 -0400470 Log.d(TAG, "onDataActivity: direction=" + direction);
Joe Onoratofd52b182010-11-10 18:00:52 -0800471 }
472 mDataActivity = direction;
473 updateDataIcon();
474 refreshViews();
475 }
476 };
477
478 private final void updateSimState(Intent intent) {
Wink Savillea639b312012-07-10 12:37:54 -0700479 String stateExtra = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);
480 if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(stateExtra)) {
481 mSimState = IccCardConstants.State.ABSENT;
Joe Onoratofd52b182010-11-10 18:00:52 -0800482 }
Wink Savillea639b312012-07-10 12:37:54 -0700483 else if (IccCardConstants.INTENT_VALUE_ICC_READY.equals(stateExtra)) {
484 mSimState = IccCardConstants.State.READY;
Joe Onoratofd52b182010-11-10 18:00:52 -0800485 }
Wink Savillea639b312012-07-10 12:37:54 -0700486 else if (IccCardConstants.INTENT_VALUE_ICC_LOCKED.equals(stateExtra)) {
487 final String lockedReason =
488 intent.getStringExtra(IccCardConstants.INTENT_KEY_LOCKED_REASON);
489 if (IccCardConstants.INTENT_VALUE_LOCKED_ON_PIN.equals(lockedReason)) {
490 mSimState = IccCardConstants.State.PIN_REQUIRED;
Joe Onoratofd52b182010-11-10 18:00:52 -0800491 }
Wink Savillea639b312012-07-10 12:37:54 -0700492 else if (IccCardConstants.INTENT_VALUE_LOCKED_ON_PUK.equals(lockedReason)) {
493 mSimState = IccCardConstants.State.PUK_REQUIRED;
Joe Onoratofd52b182010-11-10 18:00:52 -0800494 }
495 else {
Wink Savillea639b312012-07-10 12:37:54 -0700496 mSimState = IccCardConstants.State.NETWORK_LOCKED;
Joe Onoratofd52b182010-11-10 18:00:52 -0800497 }
498 } else {
Wink Savillea639b312012-07-10 12:37:54 -0700499 mSimState = IccCardConstants.State.UNKNOWN;
Joe Onoratofd52b182010-11-10 18:00:52 -0800500 }
501 }
502
503 private boolean isCdma() {
504 return (mSignalStrength != null) && !mSignalStrength.isGsm();
505 }
506
Joe Onoratofd52b182010-11-10 18:00:52 -0800507 private boolean hasService() {
508 if (mServiceState != null) {
509 switch (mServiceState.getState()) {
510 case ServiceState.STATE_OUT_OF_SERVICE:
511 case ServiceState.STATE_POWER_OFF:
512 return false;
513 default:
514 return true;
515 }
516 } else {
517 return false;
518 }
519 }
520
Mike Corriganbd151122011-02-24 15:24:47 -0600521 private void updateAirplaneMode() {
Christopher Tatec09cdce2012-09-10 16:50:14 -0700522 mAirplaneMode = (Settings.Global.getInt(mContext.getContentResolver(),
523 Settings.Global.AIRPLANE_MODE_ON, 0) == 1);
Mike Corriganbd151122011-02-24 15:24:47 -0600524 }
525
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -0700526 private void refreshLocale() {
527 mLocale = mContext.getResources().getConfiguration().locale;
528 }
529
Joe Onoratofd52b182010-11-10 18:00:52 -0800530 private final void updateTelephonySignalStrength() {
Mike Corriganbd151122011-02-24 15:24:47 -0600531 if (!hasService()) {
John Spurlockcd686b52013-06-05 10:13:46 -0400532 if (CHATTY) Log.d(TAG, "updateTelephonySignalStrength: !hasService()");
Daniel Sandlere3b86f22012-01-18 15:49:49 -0500533 mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
Winson Chunged1395f2012-09-13 18:13:44 -0700534 mQSPhoneSignalIconId = R.drawable.ic_qs_signal_no_signal;
Daniel Sandlere3b86f22012-01-18 15:49:49 -0500535 mDataSignalIconId = R.drawable.stat_sys_signal_null;
Joe Onoratofd52b182010-11-10 18:00:52 -0800536 } else {
Joe Onorato801ade02010-11-15 15:33:39 -0800537 if (mSignalStrength == null) {
John Spurlockcd686b52013-06-05 10:13:46 -0400538 if (CHATTY) Log.d(TAG, "updateTelephonySignalStrength: mSignalStrength == null");
Daniel Sandlere3b86f22012-01-18 15:49:49 -0500539 mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
Winson Chunged1395f2012-09-13 18:13:44 -0700540 mQSPhoneSignalIconId = R.drawable.ic_qs_signal_no_signal;
Daniel Sandlere3b86f22012-01-18 15:49:49 -0500541 mDataSignalIconId = R.drawable.stat_sys_signal_null;
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700542 mContentDescriptionPhoneSignal = mContext.getString(
543 AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0]);
Joe Onoratofd52b182010-11-10 18:00:52 -0800544 } else {
Joe Onoratofd52b182010-11-10 18:00:52 -0800545 int iconLevel;
Joe Onoratofd52b182010-11-10 18:00:52 -0800546 int[] iconList;
John Wangd55cde12012-02-13 17:16:41 -0800547 if (isCdma() && mAlwaysShowCdmaRssi) {
548 mLastSignalLevel = iconLevel = mSignalStrength.getCdmaLevel();
John Spurlockcd686b52013-06-05 10:13:46 -0400549 if(DEBUG) Log.d(TAG, "mAlwaysShowCdmaRssi=" + mAlwaysShowCdmaRssi
John Wangd55cde12012-02-13 17:16:41 -0800550 + " set to cdmaLevel=" + mSignalStrength.getCdmaLevel()
551 + " instead of level=" + mSignalStrength.getLevel());
552 } else {
553 mLastSignalLevel = iconLevel = mSignalStrength.getLevel();
554 }
555
Wink Saville52840902011-02-18 12:40:47 -0800556 if (isCdma()) {
557 if (isCdmaEri()) {
558 iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[mInetCondition];
559 } else {
560 iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[mInetCondition];
561 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800562 } else {
Wink Saville52840902011-02-18 12:40:47 -0800563 // Though mPhone is a Manager, this call is not an IPC
564 if (mPhone.isNetworkRoaming()) {
565 iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[mInetCondition];
566 } else {
567 iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[mInetCondition];
568 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800569 }
570 mPhoneSignalIconId = iconList[iconLevel];
Winson Chung5f623012012-09-14 14:58:43 -0700571 mQSPhoneSignalIconId =
572 TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[mInetCondition][iconLevel];
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700573 mContentDescriptionPhoneSignal = mContext.getString(
574 AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[iconLevel]);
Joe Onoratoddbba422010-11-23 15:42:28 -0800575 mDataSignalIconId = TelephonyIcons.DATA_SIGNAL_STRENGTH[mInetCondition][iconLevel];
Joe Onoratofd52b182010-11-10 18:00:52 -0800576 }
577 }
578 }
579
Joe Onorato933464d2011-01-05 15:53:36 -0800580 private final void updateDataNetType() {
Daniel Sandler0fee2172011-11-10 00:15:38 -0500581 if (mIsWimaxEnabled && mWimaxConnected) {
582 // wimax is a special 4g network not handled by telephony
583 mDataIconList = TelephonyIcons.DATA_4G[mInetCondition];
584 mDataTypeIconId = R.drawable.stat_sys_data_connected_4g;
Winson Chung4f49d942012-09-14 14:01:40 -0700585 mQSDataTypeIconId = R.drawable.ic_qs_signal_4g;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500586 mContentDescriptionDataType = mContext.getString(
587 R.string.accessibility_data_connection_4g);
588 } else {
589 switch (mDataNetType) {
590 case TelephonyManager.NETWORK_TYPE_UNKNOWN:
591 if (!mShowAtLeastThreeGees) {
592 mDataIconList = TelephonyIcons.DATA_G[mInetCondition];
593 mDataTypeIconId = 0;
Winson Chung4f49d942012-09-14 14:01:40 -0700594 mQSDataTypeIconId = 0;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500595 mContentDescriptionDataType = mContext.getString(
596 R.string.accessibility_data_connection_gprs);
597 break;
598 } else {
599 // fall through
600 }
601 case TelephonyManager.NETWORK_TYPE_EDGE:
602 if (!mShowAtLeastThreeGees) {
603 mDataIconList = TelephonyIcons.DATA_E[mInetCondition];
604 mDataTypeIconId = R.drawable.stat_sys_data_connected_e;
Winson Chung4f49d942012-09-14 14:01:40 -0700605 mQSDataTypeIconId = R.drawable.ic_qs_signal_e;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500606 mContentDescriptionDataType = mContext.getString(
607 R.string.accessibility_data_connection_edge);
608 break;
609 } else {
610 // fall through
611 }
612 case TelephonyManager.NETWORK_TYPE_UMTS:
Joe Onoratofd52b182010-11-10 18:00:52 -0800613 mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
Christian Robertson2e347422011-08-11 14:01:04 -0700614 mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
Winson Chung4f49d942012-09-14 14:01:40 -0700615 mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700616 mContentDescriptionDataType = mContext.getString(
617 R.string.accessibility_data_connection_3g);
Daniel Sandler0fee2172011-11-10 00:15:38 -0500618 break;
619 case TelephonyManager.NETWORK_TYPE_HSDPA:
620 case TelephonyManager.NETWORK_TYPE_HSUPA:
621 case TelephonyManager.NETWORK_TYPE_HSPA:
622 case TelephonyManager.NETWORK_TYPE_HSPAP:
623 if (mHspaDataDistinguishable) {
624 mDataIconList = TelephonyIcons.DATA_H[mInetCondition];
625 mDataTypeIconId = R.drawable.stat_sys_data_connected_h;
Winson Chung4f49d942012-09-14 14:01:40 -0700626 mQSDataTypeIconId = R.drawable.ic_qs_signal_h;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500627 mContentDescriptionDataType = mContext.getString(
628 R.string.accessibility_data_connection_3_5g);
629 } else {
630 mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
631 mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
Winson Chung4f49d942012-09-14 14:01:40 -0700632 mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500633 mContentDescriptionDataType = mContext.getString(
634 R.string.accessibility_data_connection_3g);
635 }
636 break;
637 case TelephonyManager.NETWORK_TYPE_CDMA:
Madan Ankapura68cad3a2012-08-02 19:10:22 -0700638 if (!mShowAtLeastThreeGees) {
639 // display 1xRTT for IS95A/B
640 mDataIconList = TelephonyIcons.DATA_1X[mInetCondition];
641 mDataTypeIconId = R.drawable.stat_sys_data_connected_1x;
Winson Chung4f49d942012-09-14 14:01:40 -0700642 mQSDataTypeIconId = R.drawable.ic_qs_signal_1x;
Madan Ankapura68cad3a2012-08-02 19:10:22 -0700643 mContentDescriptionDataType = mContext.getString(
644 R.string.accessibility_data_connection_cdma);
645 break;
646 } else {
647 // fall through
648 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500649 case TelephonyManager.NETWORK_TYPE_1xRTT:
Madan Ankapura68cad3a2012-08-02 19:10:22 -0700650 if (!mShowAtLeastThreeGees) {
651 mDataIconList = TelephonyIcons.DATA_1X[mInetCondition];
652 mDataTypeIconId = R.drawable.stat_sys_data_connected_1x;
Winson Chung4f49d942012-09-14 14:01:40 -0700653 mQSDataTypeIconId = R.drawable.ic_qs_signal_1x;
Madan Ankapura68cad3a2012-08-02 19:10:22 -0700654 mContentDescriptionDataType = mContext.getString(
655 R.string.accessibility_data_connection_cdma);
656 break;
657 } else {
658 // fall through
659 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500660 case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through
661 case TelephonyManager.NETWORK_TYPE_EVDO_A:
662 case TelephonyManager.NETWORK_TYPE_EVDO_B:
663 case TelephonyManager.NETWORK_TYPE_EHRPD:
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -0700664 mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
665 mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
Winson Chung4f49d942012-09-14 14:01:40 -0700666 mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -0700667 mContentDescriptionDataType = mContext.getString(
668 R.string.accessibility_data_connection_3g);
Daniel Sandler0fee2172011-11-10 00:15:38 -0500669 break;
670 case TelephonyManager.NETWORK_TYPE_LTE:
Wink Savillec06462c2013-06-20 18:15:20 -0700671 boolean show4GforLTE = mContext.getResources().getBoolean(R.bool.config_show4GForLTE);
672 if (show4GforLTE) {
Daniel Sandler2fe71d02013-06-06 16:15:43 -0400673 mDataIconList = TelephonyIcons.DATA_4G[mInetCondition];
674 mDataTypeIconId = R.drawable.stat_sys_data_connected_4g;
675 mQSDataTypeIconId = R.drawable.ic_qs_signal_4g;
676 mContentDescriptionDataType = mContext.getString(
677 R.string.accessibility_data_connection_4g);
678 } else {
679 mDataIconList = TelephonyIcons.DATA_LTE[mInetCondition];
680 mDataTypeIconId = R.drawable.stat_sys_data_connected_lte;
681 mQSDataTypeIconId = R.drawable.ic_qs_signal_lte;
682 mContentDescriptionDataType = mContext.getString(
683 R.string.accessibility_data_connection_lte);
684 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500685 break;
686 default:
687 if (!mShowAtLeastThreeGees) {
688 mDataIconList = TelephonyIcons.DATA_G[mInetCondition];
689 mDataTypeIconId = R.drawable.stat_sys_data_connected_g;
Winson Chung4f49d942012-09-14 14:01:40 -0700690 mQSDataTypeIconId = R.drawable.ic_qs_signal_g;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500691 mContentDescriptionDataType = mContext.getString(
692 R.string.accessibility_data_connection_gprs);
693 } else {
694 mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
695 mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
Winson Chung4f49d942012-09-14 14:01:40 -0700696 mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500697 mContentDescriptionDataType = mContext.getString(
698 R.string.accessibility_data_connection_3g);
699 }
700 break;
701 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800702 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500703
Kazuhiro Ondobc926132012-01-27 08:57:26 -0600704 if (isCdma()) {
705 if (isCdmaEri()) {
706 mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
Winson Chung4f49d942012-09-14 14:01:40 -0700707 mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
Kazuhiro Ondobc926132012-01-27 08:57:26 -0600708 }
709 } else if (mPhone.isNetworkRoaming()) {
710 mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
Winson Chung4f49d942012-09-14 14:01:40 -0700711 mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
Joe Onoratoddbba422010-11-23 15:42:28 -0800712 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800713 }
714
715 boolean isCdmaEri() {
Robert Greenwaltacab04d2011-06-06 15:28:45 -0700716 if (mServiceState != null) {
717 final int iconIndex = mServiceState.getCdmaEriIconIndex();
718 if (iconIndex != EriInfo.ROAMING_INDICATOR_OFF) {
719 final int iconMode = mServiceState.getCdmaEriIconMode();
720 if (iconMode == EriInfo.ROAMING_ICON_MODE_NORMAL
721 || iconMode == EriInfo.ROAMING_ICON_MODE_FLASH) {
722 return true;
723 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800724 }
725 }
726 return false;
727 }
728
729 private final void updateDataIcon() {
730 int iconId;
731 boolean visible = true;
732
733 if (!isCdma()) {
734 // GSM case, we have to check also the sim state
Wink Savillea639b312012-07-10 12:37:54 -0700735 if (mSimState == IccCardConstants.State.READY ||
736 mSimState == IccCardConstants.State.UNKNOWN) {
Joe Onoratofd52b182010-11-10 18:00:52 -0800737 if (hasService() && mDataState == TelephonyManager.DATA_CONNECTED) {
738 switch (mDataActivity) {
739 case TelephonyManager.DATA_ACTIVITY_IN:
740 iconId = mDataIconList[1];
741 break;
742 case TelephonyManager.DATA_ACTIVITY_OUT:
743 iconId = mDataIconList[2];
744 break;
745 case TelephonyManager.DATA_ACTIVITY_INOUT:
746 iconId = mDataIconList[3];
747 break;
748 default:
749 iconId = mDataIconList[0];
750 break;
751 }
Joe Onoratoddbba422010-11-23 15:42:28 -0800752 mDataDirectionIconId = iconId;
Joe Onoratofd52b182010-11-10 18:00:52 -0800753 } else {
754 iconId = 0;
755 visible = false;
756 }
757 } else {
758 iconId = R.drawable.stat_sys_no_sim;
Daniel Sandler1f1304a2011-08-07 16:36:39 -0400759 visible = false; // no SIM? no data
Joe Onoratofd52b182010-11-10 18:00:52 -0800760 }
761 } else {
762 // CDMA case, mDataActivity can be also DATA_ACTIVITY_DORMANT
763 if (hasService() && mDataState == TelephonyManager.DATA_CONNECTED) {
764 switch (mDataActivity) {
765 case TelephonyManager.DATA_ACTIVITY_IN:
766 iconId = mDataIconList[1];
767 break;
768 case TelephonyManager.DATA_ACTIVITY_OUT:
769 iconId = mDataIconList[2];
770 break;
771 case TelephonyManager.DATA_ACTIVITY_INOUT:
772 iconId = mDataIconList[3];
773 break;
774 case TelephonyManager.DATA_ACTIVITY_DORMANT:
775 default:
776 iconId = mDataIconList[0];
777 break;
778 }
779 } else {
780 iconId = 0;
781 visible = false;
782 }
783 }
784
Joe Onoratoddbba422010-11-23 15:42:28 -0800785 mDataDirectionIconId = iconId;
Joe Onoratofd52b182010-11-10 18:00:52 -0800786 mDataConnected = visible;
787 }
788
Joe Onorato355ebc02010-12-01 17:37:00 -0800789 void updateNetworkName(boolean showSpn, String spn, boolean showPlmn, String plmn) {
790 if (false) {
John Spurlockcd686b52013-06-05 10:13:46 -0400791 Log.d("CarrierLabel", "updateNetworkName showSpn=" + showSpn + " spn=" + spn
Joe Onorato355ebc02010-12-01 17:37:00 -0800792 + " showPlmn=" + showPlmn + " plmn=" + plmn);
793 }
794 StringBuilder str = new StringBuilder();
795 boolean something = false;
796 if (showPlmn && plmn != null) {
797 str.append(plmn);
798 something = true;
799 }
800 if (showSpn && spn != null) {
801 if (something) {
802 str.append(mNetworkNameSeparator);
803 }
804 str.append(spn);
805 something = true;
806 }
807 if (something) {
808 mNetworkName = str.toString();
809 } else {
810 mNetworkName = mNetworkNameDefault;
811 }
812 }
813
Joe Onoratofd52b182010-11-10 18:00:52 -0800814 // ===== Wifi ===================================================================
815
Irfan Sheriff227bec42011-02-15 19:30:27 -0800816 class WifiHandler extends Handler {
Irfan Sheriff227bec42011-02-15 19:30:27 -0800817 @Override
818 public void handleMessage(Message msg) {
819 switch (msg.what) {
820 case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED:
821 if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
822 mWifiChannel.sendMessage(Message.obtain(this,
823 AsyncChannel.CMD_CHANNEL_FULL_CONNECTION));
824 } else {
John Spurlockcd686b52013-06-05 10:13:46 -0400825 Log.e(TAG, "Failed to connect to wifi");
Irfan Sheriff227bec42011-02-15 19:30:27 -0800826 }
827 break;
828 case WifiManager.DATA_ACTIVITY_NOTIFICATION:
Joe Onoratof32621a2011-03-10 15:29:49 -0800829 if (msg.arg1 != mWifiActivity) {
830 mWifiActivity = msg.arg1;
831 refreshViews();
Irfan Sheriff227bec42011-02-15 19:30:27 -0800832 }
833 break;
834 default:
835 //Ignore
836 break;
837 }
838 }
839 }
840
Joe Onoratofd52b182010-11-10 18:00:52 -0800841 private void updateWifiState(Intent intent) {
842 final String action = intent.getAction();
843 if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
844 mWifiEnabled = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
845 WifiManager.WIFI_STATE_UNKNOWN) == WifiManager.WIFI_STATE_ENABLED;
846
Irfan Sheriffb8297cf2010-11-18 12:47:29 -0800847 } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
Joe Onoratofd52b182010-11-10 18:00:52 -0800848 final NetworkInfo networkInfo = (NetworkInfo)
849 intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
850 boolean wasConnected = mWifiConnected;
851 mWifiConnected = networkInfo != null && networkInfo.isConnected();
852 // If we just connected, grab the inintial signal strength and ssid
853 if (mWifiConnected && !wasConnected) {
Daniel Sandler0d6ff0102011-10-19 21:02:37 -0400854 // try getting it out of the intent first
855 WifiInfo info = (WifiInfo) intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
856 if (info == null) {
857 info = mWifiManager.getConnectionInfo();
858 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800859 if (info != null) {
Joe Onoratofd52b182010-11-10 18:00:52 -0800860 mWifiSsid = huntForSsid(info);
861 } else {
Joe Onoratofd52b182010-11-10 18:00:52 -0800862 mWifiSsid = null;
863 }
864 } else if (!mWifiConnected) {
Joe Onoratofd52b182010-11-10 18:00:52 -0800865 mWifiSsid = null;
866 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800867 } else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
Irfan Sheriff07573b32012-01-27 21:00:19 -0800868 mWifiRssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200);
869 mWifiLevel = WifiManager.calculateSignalLevel(
870 mWifiRssi, WifiIcons.WIFI_LEVEL_COUNT);
Joe Onoratofd52b182010-11-10 18:00:52 -0800871 }
872
873 updateWifiIcons();
874 }
875
876 private void updateWifiIcons() {
877 if (mWifiConnected) {
878 mWifiIconId = WifiIcons.WIFI_SIGNAL_STRENGTH[mInetCondition][mWifiLevel];
Winson Chung5f623012012-09-14 14:58:43 -0700879 mQSWifiIconId = WifiIcons.QS_WIFI_SIGNAL_STRENGTH[mInetCondition][mWifiLevel];
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700880 mContentDescriptionWifi = mContext.getString(
881 AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH[mWifiLevel]);
Joe Onoratofd52b182010-11-10 18:00:52 -0800882 } else {
Daniel Sandler2b697352011-07-22 16:23:09 -0400883 if (mDataAndWifiStacked) {
884 mWifiIconId = 0;
Winson Chunged1395f2012-09-13 18:13:44 -0700885 mQSWifiIconId = 0;
Daniel Sandler2b697352011-07-22 16:23:09 -0400886 } else {
Daniel Sandlerd4b7e922012-05-17 12:52:51 -0400887 mWifiIconId = mWifiEnabled ? R.drawable.stat_sys_wifi_signal_null : 0;
Winson Chunged1395f2012-09-13 18:13:44 -0700888 mQSWifiIconId = mWifiEnabled ? R.drawable.ic_qs_wifi_no_network : 0;
Daniel Sandler2b697352011-07-22 16:23:09 -0400889 }
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700890 mContentDescriptionWifi = mContext.getString(R.string.accessibility_no_wifi);
Joe Onoratofd52b182010-11-10 18:00:52 -0800891 }
892 }
893
894 private String huntForSsid(WifiInfo info) {
895 String ssid = info.getSSID();
896 if (ssid != null) {
897 return ssid;
898 }
899 // OK, it's not in the connectionInfo; we have to go hunting for it
900 List<WifiConfiguration> networks = mWifiManager.getConfiguredNetworks();
901 for (WifiConfiguration net : networks) {
902 if (net.networkId == info.getNetworkId()) {
903 return net.SSID;
904 }
905 }
906 return null;
907 }
908
909
Daniel Sandler0fee2172011-11-10 00:15:38 -0500910 // ===== Wimax ===================================================================
tk.mun148c7d02011-10-13 22:51:57 +0900911 private final void updateWimaxState(Intent intent) {
912 final String action = intent.getAction();
913 boolean wasConnected = mWimaxConnected;
914 if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION)) {
915 int wimaxStatus = intent.getIntExtra(WimaxManagerConstants.EXTRA_4G_STATE,
916 WimaxManagerConstants.NET_4G_STATE_UNKNOWN);
917 mIsWimaxEnabled = (wimaxStatus ==
Daniel Sandler0fee2172011-11-10 00:15:38 -0500918 WimaxManagerConstants.NET_4G_STATE_ENABLED);
tk.mun148c7d02011-10-13 22:51:57 +0900919 } else if (action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION)) {
920 mWimaxSignal = intent.getIntExtra(WimaxManagerConstants.EXTRA_NEW_SIGNAL_LEVEL, 0);
921 } else if (action.equals(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION)) {
Daniel Sandler0fee2172011-11-10 00:15:38 -0500922 mWimaxState = intent.getIntExtra(WimaxManagerConstants.EXTRA_WIMAX_STATE,
tk.mun148c7d02011-10-13 22:51:57 +0900923 WimaxManagerConstants.NET_4G_STATE_UNKNOWN);
924 mWimaxExtraState = intent.getIntExtra(
925 WimaxManagerConstants.EXTRA_WIMAX_STATE_DETAIL,
926 WimaxManagerConstants.NET_4G_STATE_UNKNOWN);
927 mWimaxConnected = (mWimaxState ==
Daniel Sandler0fee2172011-11-10 00:15:38 -0500928 WimaxManagerConstants.WIMAX_STATE_CONNECTED);
929 mWimaxIdle = (mWimaxExtraState == WimaxManagerConstants.WIMAX_IDLE);
tk.mun148c7d02011-10-13 22:51:57 +0900930 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500931 updateDataNetType();
tk.mun148c7d02011-10-13 22:51:57 +0900932 updateWimaxIcons();
933 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500934
935 private void updateWimaxIcons() {
936 if (mIsWimaxEnabled) {
937 if (mWimaxConnected) {
938 if (mWimaxIdle)
939 mWimaxIconId = WimaxIcons.WIMAX_IDLE;
940 else
941 mWimaxIconId = WimaxIcons.WIMAX_SIGNAL_STRENGTH[mInetCondition][mWimaxSignal];
942 mContentDescriptionWimax = mContext.getString(
943 AccessibilityContentDescriptions.WIMAX_CONNECTION_STRENGTH[mWimaxSignal]);
944 } else {
945 mWimaxIconId = WimaxIcons.WIMAX_DISCONNECTED;
946 mContentDescriptionWimax = mContext.getString(R.string.accessibility_no_wimax);
947 }
948 } else {
949 mWimaxIconId = 0;
tk.mun148c7d02011-10-13 22:51:57 +0900950 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500951 }
952
Joe Onoratofd52b182010-11-10 18:00:52 -0800953 // ===== Full or limited Internet connectivity ==================================
954
955 private void updateConnectivity(Intent intent) {
Daniel Sandler60b3e9c2011-08-03 21:22:16 -0400956 if (CHATTY) {
John Spurlockcd686b52013-06-05 10:13:46 -0400957 Log.d(TAG, "updateConnectivity: intent=" + intent);
Daniel Sandler60b3e9c2011-08-03 21:22:16 -0400958 }
959
Jeff Sharkey5e613312012-01-30 11:16:20 -0800960 final ConnectivityManager connManager = (ConnectivityManager) mContext
961 .getSystemService(Context.CONNECTIVITY_SERVICE);
962 final NetworkInfo info = connManager.getActiveNetworkInfo();
963
Daniel Sandler67234c42012-06-15 13:17:39 -0400964 // Are we connected at all, by any interface?
965 mConnected = info != null && info.isConnected();
966 if (mConnected) {
967 mConnectedNetworkType = info.getType();
968 mConnectedNetworkTypeName = info.getTypeName();
969 } else {
970 mConnectedNetworkType = ConnectivityManager.TYPE_NONE;
971 mConnectedNetworkTypeName = null;
972 }
973
Joe Onoratofd52b182010-11-10 18:00:52 -0800974 int connectionStatus = intent.getIntExtra(ConnectivityManager.EXTRA_INET_CONDITION, 0);
975
Daniel Sandler60b3e9c2011-08-03 21:22:16 -0400976 if (CHATTY) {
John Spurlockcd686b52013-06-05 10:13:46 -0400977 Log.d(TAG, "updateConnectivity: networkInfo=" + info);
978 Log.d(TAG, "updateConnectivity: connectionStatus=" + connectionStatus);
Daniel Sandler60b3e9c2011-08-03 21:22:16 -0400979 }
980
Daniel Sandler7c12eee2011-09-25 15:53:33 -0400981 mInetCondition = (connectionStatus > INET_CONDITION_THRESHOLD ? 1 : 0);
Joe Onoratofd52b182010-11-10 18:00:52 -0800982
Daniel Sandler7c12eee2011-09-25 15:53:33 -0400983 if (info != null && info.getType() == ConnectivityManager.TYPE_BLUETOOTH) {
Daniel Sandler0fee2172011-11-10 00:15:38 -0500984 mBluetoothTethered = info.isConnected();
Daniel Sandler7c12eee2011-09-25 15:53:33 -0400985 } else {
986 mBluetoothTethered = false;
Joe Onoratofd52b182010-11-10 18:00:52 -0800987 }
Daniel Sandler7c12eee2011-09-25 15:53:33 -0400988
989 // We want to update all the icons, all at once, for any condition change
990 updateDataNetType();
Daniel Sandler0fee2172011-11-10 00:15:38 -0500991 updateWimaxIcons();
Daniel Sandler7c12eee2011-09-25 15:53:33 -0400992 updateDataIcon();
993 updateTelephonySignalStrength();
994 updateWifiIcons();
Joe Onoratofd52b182010-11-10 18:00:52 -0800995 }
996
997
998 // ===== Update the views =======================================================
999
Joe Onoratofd52b182010-11-10 18:00:52 -08001000 void refreshViews() {
1001 Context context = mContext;
1002
Daniel Sandler28f89d42011-08-15 14:04:15 -04001003 int combinedSignalIconId = 0;
1004 int combinedActivityIconId = 0;
Daniel Sandler5962fd52012-01-11 14:57:04 -05001005 String combinedLabel = "";
1006 String wifiLabel = "";
1007 String mobileLabel = "";
Joe Onoratoddbba422010-11-23 15:42:28 -08001008 int N;
Daniel Sandlerdd4ef492012-07-27 11:19:52 -04001009 final boolean emergencyOnly = isEmergencyOnly();
Joe Onoratofd52b182010-11-10 18:00:52 -08001010
Daniel Sandler639ed752012-01-20 14:22:07 -05001011 if (!mHasMobileDataFeature) {
1012 mDataSignalIconId = mPhoneSignalIconId = 0;
Winson Chunged1395f2012-09-13 18:13:44 -07001013 mQSPhoneSignalIconId = 0;
Daniel Sandler2e481b92012-01-24 14:45:40 -05001014 mobileLabel = "";
1015 } else {
Daniel Sandler62a1eb82012-01-26 10:22:23 -05001016 // We want to show the carrier name if in service and either:
1017 // - We are connected to mobile data, or
1018 // - We are not connected to mobile data, as long as the *reason* packets are not
1019 // being routed over that link is that we have better connectivity via wifi.
Casey Burkhardtbac221f2012-10-03 18:13:58 -07001020 // If data is disconnected for some other reason but wifi (or ethernet/bluetooth)
Daniel Sandler67234c42012-06-15 13:17:39 -04001021 // is connected, we show nothing.
Daniel Sandler62a1eb82012-01-26 10:22:23 -05001022 // Otherwise (nothing connected) we show "No internet connection".
1023
1024 if (mDataConnected) {
1025 mobileLabel = mNetworkName;
Daniel Sandler9af376e2012-07-25 12:31:22 -04001026 } else if (mConnected || emergencyOnly) {
1027 if (hasService() || emergencyOnly) {
Daniel Sandler0ae29272012-07-24 15:19:04 -04001028 // The isEmergencyOnly test covers the case of a phone with no SIM
Daniel Sandler62a1eb82012-01-26 10:22:23 -05001029 mobileLabel = mNetworkName;
1030 } else {
Daniel Sandler0ae29272012-07-24 15:19:04 -04001031 // Tablets, basically
Daniel Sandler62a1eb82012-01-26 10:22:23 -05001032 mobileLabel = "";
1033 }
1034 } else {
John Wangd55cde12012-02-13 17:16:41 -08001035 mobileLabel
Daniel Sandler62a1eb82012-01-26 10:22:23 -05001036 = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
Daniel Sandler5962fd52012-01-11 14:57:04 -05001037 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001038
Daniel Sandler2e481b92012-01-24 14:45:40 -05001039 // Now for things that should only be shown when actually using mobile data.
1040 if (mDataConnected) {
1041 combinedSignalIconId = mDataSignalIconId;
1042 switch (mDataActivity) {
1043 case TelephonyManager.DATA_ACTIVITY_IN:
1044 mMobileActivityIconId = R.drawable.stat_sys_signal_in;
1045 break;
1046 case TelephonyManager.DATA_ACTIVITY_OUT:
1047 mMobileActivityIconId = R.drawable.stat_sys_signal_out;
1048 break;
1049 case TelephonyManager.DATA_ACTIVITY_INOUT:
1050 mMobileActivityIconId = R.drawable.stat_sys_signal_inout;
1051 break;
1052 default:
1053 mMobileActivityIconId = 0;
1054 break;
1055 }
1056
1057 combinedLabel = mobileLabel;
1058 combinedActivityIconId = mMobileActivityIconId;
1059 combinedSignalIconId = mDataSignalIconId; // set by updateDataIcon()
1060 mContentDescriptionCombinedSignal = mContentDescriptionDataType;
Pawit Pornkitprasan3d305902012-04-03 10:43:54 +07001061 } else {
1062 mMobileActivityIconId = 0;
Daniel Sandler2e481b92012-01-24 14:45:40 -05001063 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001064 }
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001065
Daniel Sandler28f89d42011-08-15 14:04:15 -04001066 if (mWifiConnected) {
1067 if (mWifiSsid == null) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001068 wifiLabel = context.getString(R.string.status_bar_settings_signal_meter_wifi_nossid);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001069 mWifiActivityIconId = 0; // no wifis, no bits
1070 } else {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001071 wifiLabel = mWifiSsid;
1072 if (DEBUG) {
1073 wifiLabel += "xxxxXXXXxxxxXXXX";
1074 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001075 switch (mWifiActivity) {
1076 case WifiManager.DATA_ACTIVITY_IN:
1077 mWifiActivityIconId = R.drawable.stat_sys_wifi_in;
1078 break;
1079 case WifiManager.DATA_ACTIVITY_OUT:
1080 mWifiActivityIconId = R.drawable.stat_sys_wifi_out;
1081 break;
1082 case WifiManager.DATA_ACTIVITY_INOUT:
1083 mWifiActivityIconId = R.drawable.stat_sys_wifi_inout;
1084 break;
1085 case WifiManager.DATA_ACTIVITY_NONE:
repo syncecc430e2011-09-30 07:57:50 -07001086 mWifiActivityIconId = 0;
Daniel Sandler28f89d42011-08-15 14:04:15 -04001087 break;
1088 }
1089 }
1090
1091 combinedActivityIconId = mWifiActivityIconId;
Daniel Sandler5962fd52012-01-11 14:57:04 -05001092 combinedLabel = wifiLabel;
Daniel Sandler28f89d42011-08-15 14:04:15 -04001093 combinedSignalIconId = mWifiIconId; // set by updateWifiIcons()
1094 mContentDescriptionCombinedSignal = mContentDescriptionWifi;
Daniel Sandler2e481b92012-01-24 14:45:40 -05001095 } else {
1096 if (mHasMobileDataFeature) {
1097 wifiLabel = "";
1098 } else {
1099 wifiLabel = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
1100 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001101 }
1102
1103 if (mBluetoothTethered) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001104 combinedLabel = mContext.getString(R.string.bluetooth_tethered);
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -08001105 combinedSignalIconId = mBluetoothTetherIconId;
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001106 mContentDescriptionCombinedSignal = mContext.getString(
1107 R.string.accessibility_bluetooth_tether);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001108 }
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001109
Daniel Sandler67234c42012-06-15 13:17:39 -04001110 final boolean ethernetConnected = (mConnectedNetworkType == ConnectivityManager.TYPE_ETHERNET);
1111 if (ethernetConnected) {
Daniel Sandlerced8d212012-09-12 17:33:27 -07001112 combinedLabel = context.getString(R.string.ethernet_label);
Daniel Sandler67234c42012-06-15 13:17:39 -04001113 }
1114
Daniel Sandler28f89d42011-08-15 14:04:15 -04001115 if (mAirplaneMode &&
Mike Corriganbd151122011-02-24 15:24:47 -06001116 (mServiceState == null || (!hasService() && !mServiceState.isEmergencyOnly()))) {
1117 // Only display the flight-mode icon if not in "emergency calls only" mode.
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001118
Daniel Sandler28f89d42011-08-15 14:04:15 -04001119 // look again; your radios are now airplanes
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001120 mContentDescriptionPhoneSignal = mContext.getString(
1121 R.string.accessibility_airplane_mode);
Andrew Flynn061d43c2012-05-04 10:57:58 -07001122 mAirplaneIconId = R.drawable.stat_sys_signal_flightmode;
Winson Chung4f49d942012-09-14 14:01:40 -07001123 mPhoneSignalIconId = mDataSignalIconId = mDataTypeIconId = mQSDataTypeIconId = 0;
Winson Chunged1395f2012-09-13 18:13:44 -07001124 mQSPhoneSignalIconId = 0;
Daniel Sandler28f89d42011-08-15 14:04:15 -04001125
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001126 // combined values from connected wifi take precedence over airplane mode
Daniel Sandler2e481b92012-01-24 14:45:40 -05001127 if (mWifiConnected) {
1128 // Suppress "No internet connection." from mobile if wifi connected.
1129 mobileLabel = "";
1130 } else {
1131 if (mHasMobileDataFeature) {
1132 // let the mobile icon show "No internet connection."
1133 wifiLabel = "";
1134 } else {
1135 wifiLabel = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
1136 combinedLabel = wifiLabel;
1137 }
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001138 mContentDescriptionCombinedSignal = mContentDescriptionPhoneSignal;
1139 combinedSignalIconId = mDataSignalIconId;
1140 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001141 }
Daniel Sandler67234c42012-06-15 13:17:39 -04001142 else if (!mDataConnected && !mWifiConnected && !mBluetoothTethered && !mWimaxConnected && !ethernetConnected) {
Daniel Sandler28f89d42011-08-15 14:04:15 -04001143 // pretty much totally disconnected
1144
Daniel Sandler5962fd52012-01-11 14:57:04 -05001145 combinedLabel = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
Daniel Sandler9a7c7122011-02-25 12:28:57 -05001146 // On devices without mobile radios, we want to show the wifi icon
1147 combinedSignalIconId =
Robert Greenwalt9b2886e2011-08-31 11:46:42 -07001148 mHasMobileDataFeature ? mDataSignalIconId : mWifiIconId;
1149 mContentDescriptionCombinedSignal = mHasMobileDataFeature
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001150 ? mContentDescriptionDataType : mContentDescriptionWifi;
Daniel Sandler89d97132011-09-08 15:31:57 -04001151
Kazuhiro Ondobc926132012-01-27 08:57:26 -06001152 mDataTypeIconId = 0;
Winson Chung4f49d942012-09-14 14:01:40 -07001153 mQSDataTypeIconId = 0;
Kazuhiro Ondobc926132012-01-27 08:57:26 -06001154 if (isCdma()) {
1155 if (isCdmaEri()) {
1156 mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
Winson Chung4f49d942012-09-14 14:01:40 -07001157 mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
Kazuhiro Ondobc926132012-01-27 08:57:26 -06001158 }
1159 } else if (mPhone.isNetworkRoaming()) {
Daniel Sandler89d97132011-09-08 15:31:57 -04001160 mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
Winson Chung4f49d942012-09-14 14:01:40 -07001161 mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
Daniel Sandler89d97132011-09-08 15:31:57 -04001162 }
Joe Onoratofd52b182010-11-10 18:00:52 -08001163 }
1164
Daniel Sandler9a7c7122011-02-25 12:28:57 -05001165 if (DEBUG) {
John Spurlockcd686b52013-06-05 10:13:46 -04001166 Log.d(TAG, "refreshViews connected={"
Daniel Sandler1f1304a2011-08-07 16:36:39 -04001167 + (mWifiConnected?" wifi":"")
1168 + (mDataConnected?" data":"")
1169 + " } level="
1170 + ((mSignalStrength == null)?"??":Integer.toString(mSignalStrength.getLevel()))
1171 + " combinedSignalIconId=0x"
Joe Onoratoc198bb12011-01-31 20:28:59 -08001172 + Integer.toHexString(combinedSignalIconId)
1173 + "/" + getResourceName(combinedSignalIconId)
Daniel Sandler28f89d42011-08-15 14:04:15 -04001174 + " combinedActivityIconId=0x" + Integer.toHexString(combinedActivityIconId)
Daniel Sandler3d32a242012-06-05 13:44:14 -04001175 + " mobileLabel=" + mobileLabel
1176 + " wifiLabel=" + wifiLabel
Daniel Sandlerdd4ef492012-07-27 11:19:52 -04001177 + " emergencyOnly=" + emergencyOnly
Daniel Sandler3d32a242012-06-05 13:44:14 -04001178 + " combinedLabel=" + combinedLabel
Mike Corriganbd151122011-02-24 15:24:47 -06001179 + " mAirplaneMode=" + mAirplaneMode
Joe Onoratoc198bb12011-01-31 20:28:59 -08001180 + " mDataActivity=" + mDataActivity
Joe Onoratoddbba422010-11-23 15:42:28 -08001181 + " mPhoneSignalIconId=0x" + Integer.toHexString(mPhoneSignalIconId)
Winson Chunged1395f2012-09-13 18:13:44 -07001182 + " mQSPhoneSignalIconId=0x" + Integer.toHexString(mQSPhoneSignalIconId)
Joe Onoratoddbba422010-11-23 15:42:28 -08001183 + " mDataDirectionIconId=0x" + Integer.toHexString(mDataDirectionIconId)
1184 + " mDataSignalIconId=0x" + Integer.toHexString(mDataSignalIconId)
1185 + " mDataTypeIconId=0x" + Integer.toHexString(mDataTypeIconId)
Winson Chung4f49d942012-09-14 14:01:40 -07001186 + " mQSDataTypeIconId=0x" + Integer.toHexString(mQSDataTypeIconId)
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -08001187 + " mWifiIconId=0x" + Integer.toHexString(mWifiIconId)
Winson Chunged1395f2012-09-13 18:13:44 -07001188 + " mQSWifiIconId=0x" + Integer.toHexString(mQSWifiIconId)
Joe Onoratoc198bb12011-01-31 20:28:59 -08001189 + " mBluetoothTetherIconId=0x" + Integer.toHexString(mBluetoothTetherIconId));
Joe Onoratoddbba422010-11-23 15:42:28 -08001190 }
Joe Onoratofd52b182010-11-10 18:00:52 -08001191
Christian Robertson2e347422011-08-11 14:01:04 -07001192 if (mLastPhoneSignalIconId != mPhoneSignalIconId
Daniel Sandler28f89d42011-08-15 14:04:15 -04001193 || mLastDataDirectionOverlayIconId != combinedActivityIconId
Christian Robertson2e347422011-08-11 14:01:04 -07001194 || mLastWifiIconId != mWifiIconId
Daniel Sandler0fee2172011-11-10 00:15:38 -05001195 || mLastWimaxIconId != mWimaxIconId
Andrew Flynn0fa9d2d2012-05-31 15:39:15 -07001196 || mLastDataTypeIconId != mDataTypeIconId
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -07001197 || mLastAirplaneMode != mAirplaneMode
1198 || mLastLocale != mLocale)
Christian Robertson2e347422011-08-11 14:01:04 -07001199 {
1200 // NB: the mLast*s will be updated later
1201 for (SignalCluster cluster : mSignalClusters) {
Daniel Sandler0fee2172011-11-10 00:15:38 -05001202 refreshSignalCluster(cluster);
Christian Robertson2e347422011-08-11 14:01:04 -07001203 }
Winson Chungd63c59782012-09-05 17:34:41 -07001204 for (NetworkSignalChangedCallback cb : mSignalsChangedCallbacks) {
1205 notifySignalsChangedCallbacks(cb);
1206 }
Christian Robertson2e347422011-08-11 14:01:04 -07001207 }
1208
Andrew Flynn0fa9d2d2012-05-31 15:39:15 -07001209 if (mLastAirplaneMode != mAirplaneMode) {
1210 mLastAirplaneMode = mAirplaneMode;
1211 }
1212
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -07001213 if (mLastLocale != mLocale) {
1214 mLastLocale = mLocale;
1215 }
1216
Joe Onoratoddbba422010-11-23 15:42:28 -08001217 // the phone icon on phones
Joe Onoratofd52b182010-11-10 18:00:52 -08001218 if (mLastPhoneSignalIconId != mPhoneSignalIconId) {
1219 mLastPhoneSignalIconId = mPhoneSignalIconId;
Joe Onoratoddbba422010-11-23 15:42:28 -08001220 N = mPhoneSignalIconViews.size();
Joe Onoratofd52b182010-11-10 18:00:52 -08001221 for (int i=0; i<N; i++) {
Joe Onoratoddbba422010-11-23 15:42:28 -08001222 final ImageView v = mPhoneSignalIconViews.get(i);
Daniel Sandler639ed752012-01-20 14:22:07 -05001223 if (mPhoneSignalIconId == 0) {
1224 v.setVisibility(View.GONE);
1225 } else {
1226 v.setVisibility(View.VISIBLE);
1227 v.setImageResource(mPhoneSignalIconId);
1228 v.setContentDescription(mContentDescriptionPhoneSignal);
1229 }
Joe Onoratofd52b182010-11-10 18:00:52 -08001230 }
1231 }
1232
Joe Onoratoddbba422010-11-23 15:42:28 -08001233 // the data icon on phones
1234 if (mLastDataDirectionIconId != mDataDirectionIconId) {
1235 mLastDataDirectionIconId = mDataDirectionIconId;
1236 N = mDataDirectionIconViews.size();
Joe Onoratofd52b182010-11-10 18:00:52 -08001237 for (int i=0; i<N; i++) {
Joe Onoratoddbba422010-11-23 15:42:28 -08001238 final ImageView v = mDataDirectionIconViews.get(i);
1239 v.setImageResource(mDataDirectionIconId);
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001240 v.setContentDescription(mContentDescriptionDataType);
Joe Onoratofd52b182010-11-10 18:00:52 -08001241 }
1242 }
1243
Joe Onoratoddbba422010-11-23 15:42:28 -08001244 // the wifi icon on phones
1245 if (mLastWifiIconId != mWifiIconId) {
1246 mLastWifiIconId = mWifiIconId;
1247 N = mWifiIconViews.size();
1248 for (int i=0; i<N; i++) {
1249 final ImageView v = mWifiIconViews.get(i);
Daniel Sandler2b697352011-07-22 16:23:09 -04001250 if (mWifiIconId == 0) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001251 v.setVisibility(View.GONE);
Daniel Sandler2b697352011-07-22 16:23:09 -04001252 } else {
1253 v.setVisibility(View.VISIBLE);
1254 v.setImageResource(mWifiIconId);
1255 v.setContentDescription(mContentDescriptionWifi);
1256 }
Joe Onoratoddbba422010-11-23 15:42:28 -08001257 }
1258 }
1259
tk.mun148c7d02011-10-13 22:51:57 +09001260 // the wimax icon on phones
1261 if (mLastWimaxIconId != mWimaxIconId) {
1262 mLastWimaxIconId = mWimaxIconId;
1263 N = mWimaxIconViews.size();
1264 for (int i=0; i<N; i++) {
1265 final ImageView v = mWimaxIconViews.get(i);
1266 if (mWimaxIconId == 0) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001267 v.setVisibility(View.GONE);
tk.mun148c7d02011-10-13 22:51:57 +09001268 } else {
1269 v.setVisibility(View.VISIBLE);
1270 v.setImageResource(mWimaxIconId);
1271 v.setContentDescription(mContentDescriptionWimax);
1272 }
1273 }
1274 }
Joe Onoratoddbba422010-11-23 15:42:28 -08001275 // the combined data signal icon
1276 if (mLastCombinedSignalIconId != combinedSignalIconId) {
1277 mLastCombinedSignalIconId = combinedSignalIconId;
1278 N = mCombinedSignalIconViews.size();
1279 for (int i=0; i<N; i++) {
1280 final ImageView v = mCombinedSignalIconViews.get(i);
1281 v.setImageResource(combinedSignalIconId);
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001282 v.setContentDescription(mContentDescriptionCombinedSignal);
Joe Onoratoddbba422010-11-23 15:42:28 -08001283 }
1284 }
1285
1286 // the data network type overlay
Daniel Sandler28f89d42011-08-15 14:04:15 -04001287 if (mLastDataTypeIconId != mDataTypeIconId) {
1288 mLastDataTypeIconId = mDataTypeIconId;
Joe Onoratoddbba422010-11-23 15:42:28 -08001289 N = mDataTypeIconViews.size();
1290 for (int i=0; i<N; i++) {
1291 final ImageView v = mDataTypeIconViews.get(i);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001292 if (mDataTypeIconId == 0) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001293 v.setVisibility(View.GONE);
Joe Onoratoddbba422010-11-23 15:42:28 -08001294 } else {
1295 v.setVisibility(View.VISIBLE);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001296 v.setImageResource(mDataTypeIconId);
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001297 v.setContentDescription(mContentDescriptionDataType);
Joe Onoratoddbba422010-11-23 15:42:28 -08001298 }
1299 }
1300 }
1301
Joe Onoratofce2bf32011-02-01 17:00:29 -08001302 // the data direction overlay
Daniel Sandler28f89d42011-08-15 14:04:15 -04001303 if (mLastDataDirectionOverlayIconId != combinedActivityIconId) {
Daniel Sandler8d5d19c2011-03-16 15:01:30 -04001304 if (DEBUG) {
John Spurlockcd686b52013-06-05 10:13:46 -04001305 Log.d(TAG, "changing data overlay icon id to " + combinedActivityIconId);
Daniel Sandler8d5d19c2011-03-16 15:01:30 -04001306 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001307 mLastDataDirectionOverlayIconId = combinedActivityIconId;
Joe Onoratofce2bf32011-02-01 17:00:29 -08001308 N = mDataDirectionOverlayIconViews.size();
1309 for (int i=0; i<N; i++) {
1310 final ImageView v = mDataDirectionOverlayIconViews.get(i);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001311 if (combinedActivityIconId == 0) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001312 v.setVisibility(View.GONE);
Joe Onoratofce2bf32011-02-01 17:00:29 -08001313 } else {
1314 v.setVisibility(View.VISIBLE);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001315 v.setImageResource(combinedActivityIconId);
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001316 v.setContentDescription(mContentDescriptionDataType);
Joe Onoratofce2bf32011-02-01 17:00:29 -08001317 }
1318 }
1319 }
1320
Daniel Sandler5962fd52012-01-11 14:57:04 -05001321 // the combinedLabel in the notification panel
1322 if (!mLastCombinedLabel.equals(combinedLabel)) {
1323 mLastCombinedLabel = combinedLabel;
1324 N = mCombinedLabelViews.size();
Joe Onoratofd52b182010-11-10 18:00:52 -08001325 for (int i=0; i<N; i++) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001326 TextView v = mCombinedLabelViews.get(i);
1327 v.setText(combinedLabel);
Joe Onoratofd52b182010-11-10 18:00:52 -08001328 }
1329 }
Daniel Sandler5962fd52012-01-11 14:57:04 -05001330
1331 // wifi label
1332 N = mWifiLabelViews.size();
1333 for (int i=0; i<N; i++) {
1334 TextView v = mWifiLabelViews.get(i);
Daniel Sandler3d32a242012-06-05 13:44:14 -04001335 v.setText(wifiLabel);
Daniel Sandler639ed752012-01-20 14:22:07 -05001336 if ("".equals(wifiLabel)) {
1337 v.setVisibility(View.GONE);
1338 } else {
1339 v.setVisibility(View.VISIBLE);
Daniel Sandler639ed752012-01-20 14:22:07 -05001340 }
Daniel Sandler5962fd52012-01-11 14:57:04 -05001341 }
John Wangd55cde12012-02-13 17:16:41 -08001342
Daniel Sandler5962fd52012-01-11 14:57:04 -05001343 // mobile label
1344 N = mMobileLabelViews.size();
1345 for (int i=0; i<N; i++) {
1346 TextView v = mMobileLabelViews.get(i);
Daniel Sandler3d32a242012-06-05 13:44:14 -04001347 v.setText(mobileLabel);
Daniel Sandler639ed752012-01-20 14:22:07 -05001348 if ("".equals(mobileLabel)) {
1349 v.setVisibility(View.GONE);
1350 } else {
1351 v.setVisibility(View.VISIBLE);
Daniel Sandler639ed752012-01-20 14:22:07 -05001352 }
Daniel Sandler5962fd52012-01-11 14:57:04 -05001353 }
Daniel Sandlerdd4ef492012-07-27 11:19:52 -04001354
1355 // e-call label
1356 N = mEmergencyLabelViews.size();
1357 for (int i=0; i<N; i++) {
1358 TextView v = mEmergencyLabelViews.get(i);
1359 if (!emergencyOnly) {
1360 v.setVisibility(View.GONE);
1361 } else {
1362 v.setText(mobileLabel); // comes from the telephony stack
1363 v.setVisibility(View.VISIBLE);
1364 }
1365 }
Joe Onoratofd52b182010-11-10 18:00:52 -08001366 }
Joe Onorato933464d2011-01-05 15:53:36 -08001367
1368 public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
Daniel Sandlerc49e1952011-09-20 10:45:53 -04001369 pw.println("NetworkController state:");
Casey Burkhardtbac221f2012-10-03 18:13:58 -07001370 pw.println(String.format(" %s network type %d (%s)",
Daniel Sandler67234c42012-06-15 13:17:39 -04001371 mConnected?"CONNECTED":"DISCONNECTED",
1372 mConnectedNetworkType, mConnectedNetworkTypeName));
Joe Onorato933464d2011-01-05 15:53:36 -08001373 pw.println(" - telephony ------");
Daniel Sandler8b268d42013-05-28 16:17:13 -04001374 pw.print(" hasVoiceCallingFeature()=");
1375 pw.println(hasVoiceCallingFeature());
Daniel Sandlerc49e1952011-09-20 10:45:53 -04001376 pw.print(" hasService()=");
1377 pw.println(hasService());
Joe Onorato933464d2011-01-05 15:53:36 -08001378 pw.print(" mHspaDataDistinguishable=");
1379 pw.println(mHspaDataDistinguishable);
1380 pw.print(" mDataConnected=");
1381 pw.println(mDataConnected);
1382 pw.print(" mSimState=");
1383 pw.println(mSimState);
1384 pw.print(" mPhoneState=");
1385 pw.println(mPhoneState);
1386 pw.print(" mDataState=");
1387 pw.println(mDataState);
1388 pw.print(" mDataActivity=");
1389 pw.println(mDataActivity);
Daniel Sandler89d97132011-09-08 15:31:57 -04001390 pw.print(" mDataNetType=");
1391 pw.print(mDataNetType);
1392 pw.print("/");
1393 pw.println(TelephonyManager.getNetworkTypeName(mDataNetType));
Joe Onorato933464d2011-01-05 15:53:36 -08001394 pw.print(" mServiceState=");
Robert Greenwaltacab04d2011-06-06 15:28:45 -07001395 pw.println(mServiceState);
Daniel Sandlerc49e1952011-09-20 10:45:53 -04001396 pw.print(" mSignalStrength=");
1397 pw.println(mSignalStrength);
1398 pw.print(" mLastSignalLevel=");
1399 pw.println(mLastSignalLevel);
Joe Onorato933464d2011-01-05 15:53:36 -08001400 pw.print(" mNetworkName=");
1401 pw.println(mNetworkName);
1402 pw.print(" mNetworkNameDefault=");
1403 pw.println(mNetworkNameDefault);
1404 pw.print(" mNetworkNameSeparator=");
Daniel Sandler89d97132011-09-08 15:31:57 -04001405 pw.println(mNetworkNameSeparator.replace("\n","\\n"));
Joe Onorato933464d2011-01-05 15:53:36 -08001406 pw.print(" mPhoneSignalIconId=0x");
1407 pw.print(Integer.toHexString(mPhoneSignalIconId));
1408 pw.print("/");
Winson Chunged1395f2012-09-13 18:13:44 -07001409 pw.print(" mQSPhoneSignalIconId=0x");
1410 pw.print(Integer.toHexString(mQSPhoneSignalIconId));
1411 pw.print("/");
Joe Onorato933464d2011-01-05 15:53:36 -08001412 pw.println(getResourceName(mPhoneSignalIconId));
1413 pw.print(" mDataDirectionIconId=");
1414 pw.print(Integer.toHexString(mDataDirectionIconId));
1415 pw.print("/");
1416 pw.println(getResourceName(mDataDirectionIconId));
1417 pw.print(" mDataSignalIconId=");
1418 pw.print(Integer.toHexString(mDataSignalIconId));
1419 pw.print("/");
1420 pw.println(getResourceName(mDataSignalIconId));
1421 pw.print(" mDataTypeIconId=");
1422 pw.print(Integer.toHexString(mDataTypeIconId));
1423 pw.print("/");
1424 pw.println(getResourceName(mDataTypeIconId));
Winson Chung4f49d942012-09-14 14:01:40 -07001425 pw.print(" mQSDataTypeIconId=");
1426 pw.print(Integer.toHexString(mQSDataTypeIconId));
1427 pw.print("/");
1428 pw.println(getResourceName(mQSDataTypeIconId));
Joe Onorato933464d2011-01-05 15:53:36 -08001429
1430 pw.println(" - wifi ------");
1431 pw.print(" mWifiEnabled=");
1432 pw.println(mWifiEnabled);
1433 pw.print(" mWifiConnected=");
1434 pw.println(mWifiConnected);
Daniel Sandler0d6ff0102011-10-19 21:02:37 -04001435 pw.print(" mWifiRssi=");
1436 pw.println(mWifiRssi);
Joe Onorato933464d2011-01-05 15:53:36 -08001437 pw.print(" mWifiLevel=");
1438 pw.println(mWifiLevel);
1439 pw.print(" mWifiSsid=");
1440 pw.println(mWifiSsid);
Daniel Sandler0fee2172011-11-10 00:15:38 -05001441 pw.println(String.format(" mWifiIconId=0x%08x/%s",
Daniel Sandler7c12eee2011-09-25 15:53:33 -04001442 mWifiIconId, getResourceName(mWifiIconId)));
Winson Chunged1395f2012-09-13 18:13:44 -07001443 pw.println(String.format(" mQSWifiIconId=0x%08x/%s",
1444 mQSWifiIconId, getResourceName(mQSWifiIconId)));
Joe Onoratof32621a2011-03-10 15:29:49 -08001445 pw.print(" mWifiActivity=");
1446 pw.println(mWifiActivity);
1447
Daniel Sandler0fee2172011-11-10 00:15:38 -05001448 if (mWimaxSupported) {
1449 pw.println(" - wimax ------");
1450 pw.print(" mIsWimaxEnabled="); pw.println(mIsWimaxEnabled);
1451 pw.print(" mWimaxConnected="); pw.println(mWimaxConnected);
1452 pw.print(" mWimaxIdle="); pw.println(mWimaxIdle);
1453 pw.println(String.format(" mWimaxIconId=0x%08x/%s",
1454 mWimaxIconId, getResourceName(mWimaxIconId)));
1455 pw.println(String.format(" mWimaxSignal=%d", mWimaxSignal));
1456 pw.println(String.format(" mWimaxState=%d", mWimaxState));
1457 pw.println(String.format(" mWimaxExtraState=%d", mWimaxExtraState));
1458 }
Joe Onorato933464d2011-01-05 15:53:36 -08001459
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -08001460 pw.println(" - Bluetooth ----");
Daniel Sandlerc49e1952011-09-20 10:45:53 -04001461 pw.print(" mBtReverseTethered=");
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -08001462 pw.println(mBluetoothTethered);
1463
Joe Onorato933464d2011-01-05 15:53:36 -08001464 pw.println(" - connectivity ------");
1465 pw.print(" mInetCondition=");
1466 pw.println(mInetCondition);
1467
1468 pw.println(" - icons ------");
1469 pw.print(" mLastPhoneSignalIconId=0x");
1470 pw.print(Integer.toHexString(mLastPhoneSignalIconId));
1471 pw.print("/");
1472 pw.println(getResourceName(mLastPhoneSignalIconId));
1473 pw.print(" mLastDataDirectionIconId=0x");
1474 pw.print(Integer.toHexString(mLastDataDirectionIconId));
1475 pw.print("/");
1476 pw.println(getResourceName(mLastDataDirectionIconId));
Joe Onoratofce2bf32011-02-01 17:00:29 -08001477 pw.print(" mLastDataDirectionOverlayIconId=0x");
1478 pw.print(Integer.toHexString(mLastDataDirectionOverlayIconId));
1479 pw.print("/");
1480 pw.println(getResourceName(mLastDataDirectionOverlayIconId));
Joe Onorato933464d2011-01-05 15:53:36 -08001481 pw.print(" mLastWifiIconId=0x");
1482 pw.print(Integer.toHexString(mLastWifiIconId));
1483 pw.print("/");
1484 pw.println(getResourceName(mLastWifiIconId));
1485 pw.print(" mLastCombinedSignalIconId=0x");
1486 pw.print(Integer.toHexString(mLastCombinedSignalIconId));
1487 pw.print("/");
1488 pw.println(getResourceName(mLastCombinedSignalIconId));
1489 pw.print(" mLastDataTypeIconId=0x");
1490 pw.print(Integer.toHexString(mLastDataTypeIconId));
1491 pw.print("/");
Daniel Sandler0fee2172011-11-10 00:15:38 -05001492 pw.println(getResourceName(mLastDataTypeIconId));
Daniel Sandler5962fd52012-01-11 14:57:04 -05001493 pw.print(" mLastCombinedLabel=");
1494 pw.print(mLastCombinedLabel);
Daniel Sandlerc49e1952011-09-20 10:45:53 -04001495 pw.println("");
Joe Onorato933464d2011-01-05 15:53:36 -08001496 }
1497
1498 private String getResourceName(int resId) {
Daniel Sandler89d97132011-09-08 15:31:57 -04001499 if (resId != 0) {
Joe Onorato933464d2011-01-05 15:53:36 -08001500 final Resources res = mContext.getResources();
1501 try {
1502 return res.getResourceName(resId);
1503 } catch (android.content.res.Resources.NotFoundException ex) {
1504 return "(unknown)";
1505 }
1506 } else {
1507 return "(null)";
1508 }
1509 }
1510
Joe Onoratofd52b182010-11-10 18:00:52 -08001511}