blob: 73752e586fff6ba1e72b2d6c9f4255ce50111815 [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;
Joe Onoratofd52b182010-11-10 18:00:52 -080030import android.os.Binder;
Irfan Sheriff227bec42011-02-15 19:30:27 -080031import android.os.Handler;
Irfan Sheriff227bec42011-02-15 19:30:27 -080032import android.os.Message;
33import android.os.Messenger;
Joe Onoratofd52b182010-11-10 18:00:52 -080034import android.os.RemoteException;
35import android.provider.Settings;
36import android.telephony.PhoneStateListener;
37import android.telephony.ServiceState;
38import android.telephony.SignalStrength;
39import android.telephony.TelephonyManager;
40import android.util.Slog;
Joe Onoratoddbba422010-11-23 15:42:28 -080041import android.view.View;
Joe Onoratofd52b182010-11-10 18:00:52 -080042import android.widget.ImageView;
43import android.widget.TextView;
44
45import com.android.internal.app.IBatteryStats;
Wink Savillea639b312012-07-10 12:37:54 -070046import com.android.internal.telephony.IccCardConstants;
Joe Onoratofd52b182010-11-10 18:00:52 -080047import com.android.internal.telephony.TelephonyIntents;
48import com.android.internal.telephony.cdma.EriInfo;
Irfan Sheriff227bec42011-02-15 19:30:27 -080049import com.android.internal.util.AsyncChannel;
Winson Chung4f49d942012-09-14 14:01:40 -070050import com.android.server.am.BatteryStatsService;
Joe Onoratofd52b182010-11-10 18:00:52 -080051import com.android.systemui.R;
52
Winson Chung4f49d942012-09-14 14:01:40 -070053import java.io.FileDescriptor;
54import java.io.PrintWriter;
55import java.util.ArrayList;
56import java.util.List;
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -070057import java.util.Locale;
Winson Chung4f49d942012-09-14 14:01:40 -070058
Joe Onoratofd52b182010-11-10 18:00:52 -080059public class NetworkController extends BroadcastReceiver {
60 // debug
61 static final String TAG = "StatusBar.NetworkController";
62 static final boolean DEBUG = false;
Daniel Sandler7c351742011-10-17 10:48:06 -040063 static final boolean CHATTY = false; // additional diagnostics, but not logspew
Joe Onoratofd52b182010-11-10 18:00:52 -080064
65 // telephony
66 boolean mHspaDataDistinguishable;
67 final TelephonyManager mPhone;
68 boolean mDataConnected;
Wink Savillea639b312012-07-10 12:37:54 -070069 IccCardConstants.State mSimState = IccCardConstants.State.READY;
Joe Onoratofd52b182010-11-10 18:00:52 -080070 int mPhoneState = TelephonyManager.CALL_STATE_IDLE;
Joe Onorato933464d2011-01-05 15:53:36 -080071 int mDataNetType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
Joe Onoratofd52b182010-11-10 18:00:52 -080072 int mDataState = TelephonyManager.DATA_DISCONNECTED;
73 int mDataActivity = TelephonyManager.DATA_ACTIVITY_NONE;
74 ServiceState mServiceState;
75 SignalStrength mSignalStrength;
76 int[] mDataIconList = TelephonyIcons.DATA_G[0];
Joe Onorato355ebc02010-12-01 17:37:00 -080077 String mNetworkName;
78 String mNetworkNameDefault;
79 String mNetworkNameSeparator;
Joe Onoratoddbba422010-11-23 15:42:28 -080080 int mPhoneSignalIconId;
Winson Chunged1395f2012-09-13 18:13:44 -070081 int mQSPhoneSignalIconId;
Daniel Sandler28f89d42011-08-15 14:04:15 -040082 int mDataDirectionIconId; // data + data direction on phones
Joe Onoratoddbba422010-11-23 15:42:28 -080083 int mDataSignalIconId;
84 int mDataTypeIconId;
Winson Chung4f49d942012-09-14 14:01:40 -070085 int mQSDataTypeIconId;
Andrew Flynn061d43c2012-05-04 10:57:58 -070086 int mAirplaneIconId;
Joe Onoratoc198bb12011-01-31 20:28:59 -080087 boolean mDataActive;
Daniel Sandler28f89d42011-08-15 14:04:15 -040088 int mMobileActivityIconId; // overlay arrows for data direction
Daniel Sandlerc49e1952011-09-20 10:45:53 -040089 int mLastSignalLevel;
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -070090 boolean mShowPhoneRSSIForData = false;
91 boolean mShowAtLeastThreeGees = false;
John Wangd55cde12012-02-13 17:16:41 -080092 boolean mAlwaysShowCdmaRssi = false;
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -080093
Svetoslav Ganov6179ea32011-06-28 01:12:41 -070094 String mContentDescriptionPhoneSignal;
95 String mContentDescriptionWifi;
tk.mun148c7d02011-10-13 22:51:57 +090096 String mContentDescriptionWimax;
Svetoslav Ganov6179ea32011-06-28 01:12:41 -070097 String mContentDescriptionCombinedSignal;
98 String mContentDescriptionDataType;
99
Joe Onoratofd52b182010-11-10 18:00:52 -0800100 // wifi
101 final WifiManager mWifiManager;
Irfan Sheriff227bec42011-02-15 19:30:27 -0800102 AsyncChannel mWifiChannel;
Joe Onoratofd52b182010-11-10 18:00:52 -0800103 boolean mWifiEnabled, mWifiConnected;
Daniel Sandler0d6ff0102011-10-19 21:02:37 -0400104 int mWifiRssi, mWifiLevel;
Joe Onoratofd52b182010-11-10 18:00:52 -0800105 String mWifiSsid;
Daniel Sandler9a7c7122011-02-25 12:28:57 -0500106 int mWifiIconId = 0;
Winson Chunged1395f2012-09-13 18:13:44 -0700107 int mQSWifiIconId = 0;
Daniel Sandler28f89d42011-08-15 14:04:15 -0400108 int mWifiActivityIconId = 0; // overlay arrows for wifi direction
Joe Onoratof32621a2011-03-10 15:29:49 -0800109 int mWifiActivity = WifiManager.DATA_ACTIVITY_NONE;
Joe Onoratofd52b182010-11-10 18:00:52 -0800110
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -0800111 // bluetooth
112 private boolean mBluetoothTethered = false;
113 private int mBluetoothTetherIconId =
114 com.android.internal.R.drawable.stat_sys_tether_bluetooth;
115
tk.mun148c7d02011-10-13 22:51:57 +0900116 //wimax
Daniel Sandler0fee2172011-11-10 00:15:38 -0500117 private boolean mWimaxSupported = false;
tk.mun148c7d02011-10-13 22:51:57 +0900118 private boolean mIsWimaxEnabled = false;
119 private boolean mWimaxConnected = false;
120 private boolean mWimaxIdle = false;
121 private int mWimaxIconId = 0;
122 private int mWimaxSignal = 0;
123 private int mWimaxState = 0;
124 private int mWimaxExtraState = 0;
Daniel Sandler67234c42012-06-15 13:17:39 -0400125
Joe Onoratofd52b182010-11-10 18:00:52 -0800126 // data connectivity (regardless of state, can we access the internet?)
127 // state of inet connection - 0 not connected, 100 connected
Daniel Sandler67234c42012-06-15 13:17:39 -0400128 private boolean mConnected = false;
129 private int mConnectedNetworkType = ConnectivityManager.TYPE_NONE;
130 private String mConnectedNetworkTypeName;
Joe Onoratofd52b182010-11-10 18:00:52 -0800131 private int mInetCondition = 0;
132 private static final int INET_CONDITION_THRESHOLD = 50;
133
Mike Corriganbd151122011-02-24 15:24:47 -0600134 private boolean mAirplaneMode = false;
Andrew Flynn0fa9d2d2012-05-31 15:39:15 -0700135 private boolean mLastAirplaneMode = true;
Mike Corriganbd151122011-02-24 15:24:47 -0600136
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -0700137 private Locale mLocale = null;
138 private Locale mLastLocale = null;
139
Joe Onoratofd52b182010-11-10 18:00:52 -0800140 // our ui
141 Context mContext;
Joe Onoratoddbba422010-11-23 15:42:28 -0800142 ArrayList<ImageView> mPhoneSignalIconViews = new ArrayList<ImageView>();
143 ArrayList<ImageView> mDataDirectionIconViews = new ArrayList<ImageView>();
Joe Onoratofce2bf32011-02-01 17:00:29 -0800144 ArrayList<ImageView> mDataDirectionOverlayIconViews = new ArrayList<ImageView>();
Joe Onoratoddbba422010-11-23 15:42:28 -0800145 ArrayList<ImageView> mWifiIconViews = new ArrayList<ImageView>();
tk.mun148c7d02011-10-13 22:51:57 +0900146 ArrayList<ImageView> mWimaxIconViews = new ArrayList<ImageView>();
Joe Onoratoddbba422010-11-23 15:42:28 -0800147 ArrayList<ImageView> mCombinedSignalIconViews = new ArrayList<ImageView>();
148 ArrayList<ImageView> mDataTypeIconViews = new ArrayList<ImageView>();
Daniel Sandler5962fd52012-01-11 14:57:04 -0500149 ArrayList<TextView> mCombinedLabelViews = new ArrayList<TextView>();
150 ArrayList<TextView> mMobileLabelViews = new ArrayList<TextView>();
151 ArrayList<TextView> mWifiLabelViews = new ArrayList<TextView>();
Daniel Sandlerdd4ef492012-07-27 11:19:52 -0400152 ArrayList<TextView> mEmergencyLabelViews = new ArrayList<TextView>();
Christian Robertson2e347422011-08-11 14:01:04 -0700153 ArrayList<SignalCluster> mSignalClusters = new ArrayList<SignalCluster>();
Winson Chungd63c59782012-09-05 17:34:41 -0700154 ArrayList<NetworkSignalChangedCallback> mSignalsChangedCallbacks =
155 new ArrayList<NetworkSignalChangedCallback>();
Joe Onoratofd52b182010-11-10 18:00:52 -0800156 int mLastPhoneSignalIconId = -1;
Joe Onoratoddbba422010-11-23 15:42:28 -0800157 int mLastDataDirectionIconId = -1;
Joe Onoratofce2bf32011-02-01 17:00:29 -0800158 int mLastDataDirectionOverlayIconId = -1;
Joe Onoratoddbba422010-11-23 15:42:28 -0800159 int mLastWifiIconId = -1;
tk.mun148c7d02011-10-13 22:51:57 +0900160 int mLastWimaxIconId = -1;
Joe Onoratoddbba422010-11-23 15:42:28 -0800161 int mLastCombinedSignalIconId = -1;
162 int mLastDataTypeIconId = -1;
Daniel Sandler5962fd52012-01-11 14:57:04 -0500163 String mLastCombinedLabel = "";
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -0800164
Robert Greenwalt9b2886e2011-08-31 11:46:42 -0700165 private boolean mHasMobileDataFeature;
166
Daniel Sandler2b697352011-07-22 16:23:09 -0400167 boolean mDataAndWifiStacked = false;
168
Joe Onoratofd52b182010-11-10 18:00:52 -0800169 // yuck -- stop doing this here and put it in the framework
170 IBatteryStats mBatteryStats;
171
Christian Robertson2e347422011-08-11 14:01:04 -0700172 public interface SignalCluster {
John Wangd55cde12012-02-13 17:16:41 -0800173 void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon,
Daniel Sandlerbcf6ef0b2011-09-30 11:43:36 -0400174 String contentDescription);
Christian Robertson2e347422011-08-11 14:01:04 -0700175 void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
Daniel Sandlerbcf6ef0b2011-09-30 11:43:36 -0400176 int typeIcon, String contentDescription, String typeContentDescription);
Andrew Flynn061d43c2012-05-04 10:57:58 -0700177 void setIsAirplaneMode(boolean is, int airplaneIcon);
Christian Robertson2e347422011-08-11 14:01:04 -0700178 }
179
Winson Chungd63c59782012-09-05 17:34:41 -0700180 public interface NetworkSignalChangedCallback {
Casey Burkhardtbac221f2012-10-03 18:13:58 -0700181 void onWifiSignalChanged(boolean enabled, int wifiSignalIconId,
182 String wifitSignalContentDescriptionId, String description);
183 void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId,
184 String mobileSignalContentDescriptionId, int dataTypeIconId,
185 String dataTypeContentDescriptionId, String description);
Winson Chungd63c59782012-09-05 17:34:41 -0700186 void onAirplaneModeChanged(boolean enabled);
187 }
188
Joe Onoratofd52b182010-11-10 18:00:52 -0800189 /**
190 * Construct this controller object and register for updates.
191 */
192 public NetworkController(Context context) {
193 mContext = context;
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -0700194 final Resources res = context.getResources();
Joe Onoratofd52b182010-11-10 18:00:52 -0800195
Robert Greenwalt9b2886e2011-08-31 11:46:42 -0700196 ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(
197 Context.CONNECTIVITY_SERVICE);
198 mHasMobileDataFeature = cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE);
199
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -0700200 mShowPhoneRSSIForData = res.getBoolean(R.bool.config_showPhoneRSSIForData);
201 mShowAtLeastThreeGees = res.getBoolean(R.bool.config_showMin3G);
John Wangd55cde12012-02-13 17:16:41 -0800202 mAlwaysShowCdmaRssi = res.getBoolean(
203 com.android.internal.R.bool.config_alwaysUseCdmaRssi);
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -0700204
Daniel Sandler9a7c7122011-02-25 12:28:57 -0500205 // set up the default wifi icon, used when no radios have ever appeared
206 updateWifiIcons();
tk.mun148c7d02011-10-13 22:51:57 +0900207 updateWimaxIcons();
Daniel Sandler9a7c7122011-02-25 12:28:57 -0500208
Joe Onoratofd52b182010-11-10 18:00:52 -0800209 // telephony
210 mPhone = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
211 mPhone.listen(mPhoneStateListener,
212 PhoneStateListener.LISTEN_SERVICE_STATE
213 | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
214 | PhoneStateListener.LISTEN_CALL_STATE
215 | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
216 | PhoneStateListener.LISTEN_DATA_ACTIVITY);
217 mHspaDataDistinguishable = mContext.getResources().getBoolean(
218 R.bool.config_hspa_data_distinguishable);
Joe Onorato355ebc02010-12-01 17:37:00 -0800219 mNetworkNameSeparator = mContext.getString(R.string.status_bar_network_name_separator);
220 mNetworkNameDefault = mContext.getString(
221 com.android.internal.R.string.lockscreen_carrier_default);
222 mNetworkName = mNetworkNameDefault;
Joe Onoratofd52b182010-11-10 18:00:52 -0800223
224 // wifi
225 mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
Joe Onoratof32621a2011-03-10 15:29:49 -0800226 Handler handler = new WifiHandler();
Irfan Sheriff227bec42011-02-15 19:30:27 -0800227 mWifiChannel = new AsyncChannel();
Irfan Sheriff07573b32012-01-27 21:00:19 -0800228 Messenger wifiMessenger = mWifiManager.getWifiServiceMessenger();
Irfan Sheriff227bec42011-02-15 19:30:27 -0800229 if (wifiMessenger != null) {
230 mWifiChannel.connect(mContext, handler, wifiMessenger);
231 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800232
233 // broadcasts
234 IntentFilter filter = new IntentFilter();
235 filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
236 filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
Joe Onoratofd52b182010-11-10 18:00:52 -0800237 filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
238 filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
Wink Savillea639b312012-07-10 12:37:54 -0700239 filter.addAction(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION);
Joe Onorato355ebc02010-12-01 17:37:00 -0800240 filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
241 filter.addAction(ConnectivityManager.INET_CONDITION_ACTION);
Joe Onorato99641832011-01-30 12:12:05 -0800242 filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
Mike Corriganbd151122011-02-24 15:24:47 -0600243 filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
Daniel Sandler0fee2172011-11-10 00:15:38 -0500244 mWimaxSupported = mContext.getResources().getBoolean(
tk.mun148c7d02011-10-13 22:51:57 +0900245 com.android.internal.R.bool.config_wimaxEnabled);
Daniel Sandler0fee2172011-11-10 00:15:38 -0500246 if(mWimaxSupported) {
tk.mun148c7d02011-10-13 22:51:57 +0900247 filter.addAction(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION);
248 filter.addAction(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION);
249 filter.addAction(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION);
250 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800251 context.registerReceiver(this, filter);
252
Mike Corriganbd151122011-02-24 15:24:47 -0600253 // AIRPLANE_MODE_CHANGED is sent at boot; we've probably already missed it
254 updateAirplaneMode();
255
Joe Onoratofd52b182010-11-10 18:00:52 -0800256 // yuck
257 mBatteryStats = BatteryStatsService.getService();
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -0700258
259 mLastLocale = mContext.getResources().getConfiguration().locale;
Joe Onoratofd52b182010-11-10 18:00:52 -0800260 }
261
Daniel Sandler3d32a242012-06-05 13:44:14 -0400262 public boolean hasMobileDataFeature() {
263 return mHasMobileDataFeature;
264 }
265
Daniel Sandler8b268d42013-05-28 16:17:13 -0400266 public boolean hasVoiceCallingFeature() {
267 return mPhone.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE;
268 }
269
Daniel Sandlerdd4ef492012-07-27 11:19:52 -0400270 public boolean isEmergencyOnly() {
271 return (mServiceState != null && mServiceState.isEmergencyOnly());
272 }
273
Joe Onoratoddbba422010-11-23 15:42:28 -0800274 public void addPhoneSignalIconView(ImageView v) {
275 mPhoneSignalIconViews.add(v);
Joe Onoratofd52b182010-11-10 18:00:52 -0800276 }
277
Joe Onoratoddbba422010-11-23 15:42:28 -0800278 public void addDataDirectionIconView(ImageView v) {
279 mDataDirectionIconViews.add(v);
280 }
281
Joe Onoratofce2bf32011-02-01 17:00:29 -0800282 public void addDataDirectionOverlayIconView(ImageView v) {
283 mDataDirectionOverlayIconViews.add(v);
284 }
285
Joe Onoratoddbba422010-11-23 15:42:28 -0800286 public void addWifiIconView(ImageView v) {
287 mWifiIconViews.add(v);
288 }
tk.mun148c7d02011-10-13 22:51:57 +0900289 public void addWimaxIconView(ImageView v) {
290 mWimaxIconViews.add(v);
291 }
Joe Onoratoddbba422010-11-23 15:42:28 -0800292
293 public void addCombinedSignalIconView(ImageView v) {
294 mCombinedSignalIconViews.add(v);
295 }
296
297 public void addDataTypeIconView(ImageView v) {
298 mDataTypeIconViews.add(v);
Joe Onoratofd52b182010-11-10 18:00:52 -0800299 }
300
Daniel Sandler5962fd52012-01-11 14:57:04 -0500301 public void addCombinedLabelView(TextView v) {
302 mCombinedLabelViews.add(v);
303 }
304
305 public void addMobileLabelView(TextView v) {
306 mMobileLabelViews.add(v);
307 }
308
309 public void addWifiLabelView(TextView v) {
310 mWifiLabelViews.add(v);
Joe Onoratofd52b182010-11-10 18:00:52 -0800311 }
312
Daniel Sandlerdd4ef492012-07-27 11:19:52 -0400313 public void addEmergencyLabelView(TextView v) {
314 mEmergencyLabelViews.add(v);
315 }
316
Daniel Sandler28f89d42011-08-15 14:04:15 -0400317 public void addSignalCluster(SignalCluster cluster) {
318 mSignalClusters.add(cluster);
Daniel Sandler0fee2172011-11-10 00:15:38 -0500319 refreshSignalCluster(cluster);
320 }
321
Winson Chungd63c59782012-09-05 17:34:41 -0700322 public void addNetworkSignalChangedCallback(NetworkSignalChangedCallback cb) {
323 mSignalsChangedCallbacks.add(cb);
324 notifySignalsChangedCallbacks(cb);
325 }
326
Daniel Sandler0fee2172011-11-10 00:15:38 -0500327 public void refreshSignalCluster(SignalCluster cluster) {
Daniel Sandler28f89d42011-08-15 14:04:15 -0400328 cluster.setWifiIndicators(
Daniel Sandlerd4b7e922012-05-17 12:52:51 -0400329 // only show wifi in the cluster if connected or if wifi-only
330 mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature),
Daniel Sandler28f89d42011-08-15 14:04:15 -0400331 mWifiIconId,
Daniel Sandlerbcf6ef0b2011-09-30 11:43:36 -0400332 mWifiActivityIconId,
333 mContentDescriptionWifi);
Daniel Sandlerbcf6ef0b2011-09-30 11:43:36 -0400334
Daniel Sandler0fee2172011-11-10 00:15:38 -0500335 if (mIsWimaxEnabled && mWimaxConnected) {
336 // wimax is special
337 cluster.setMobileDataIndicators(
338 true,
John Wangd55cde12012-02-13 17:16:41 -0800339 mAlwaysShowCdmaRssi ? mPhoneSignalIconId : mWimaxIconId,
Daniel Sandler0fee2172011-11-10 00:15:38 -0500340 mMobileActivityIconId,
341 mDataTypeIconId,
342 mContentDescriptionWimax,
343 mContentDescriptionDataType);
344 } else {
345 // normal mobile data
346 cluster.setMobileDataIndicators(
347 mHasMobileDataFeature,
348 mShowPhoneRSSIForData ? mPhoneSignalIconId : mDataSignalIconId,
349 mMobileActivityIconId,
350 mDataTypeIconId,
351 mContentDescriptionPhoneSignal,
352 mContentDescriptionDataType);
353 }
Andrew Flynn061d43c2012-05-04 10:57:58 -0700354 cluster.setIsAirplaneMode(mAirplaneMode, mAirplaneIconId);
Christian Robertson2e347422011-08-11 14:01:04 -0700355 }
356
Winson Chungd63c59782012-09-05 17:34:41 -0700357 void notifySignalsChangedCallbacks(NetworkSignalChangedCallback cb) {
358 // only show wifi in the cluster if connected or if wifi-only
359 boolean wifiEnabled = mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature);
360 String wifiDesc = wifiEnabled ?
361 mWifiSsid : null;
Casey Burkhardtbac221f2012-10-03 18:13:58 -0700362 cb.onWifiSignalChanged(wifiEnabled, mQSWifiIconId, mContentDescriptionWifi, wifiDesc);
Winson Chungd63c59782012-09-05 17:34:41 -0700363
364 if (isEmergencyOnly()) {
Casey Burkhardtbac221f2012-10-03 18:13:58 -0700365 cb.onMobileDataSignalChanged(false, mQSPhoneSignalIconId,
366 mContentDescriptionPhoneSignal, mQSDataTypeIconId, mContentDescriptionDataType,
367 null);
Winson Chungd63c59782012-09-05 17:34:41 -0700368 } else {
369 if (mIsWimaxEnabled && mWimaxConnected) {
Winson Chung4f49d942012-09-14 14:01:40 -0700370 // Wimax is special
Casey Burkhardtbac221f2012-10-03 18:13:58 -0700371 cb.onMobileDataSignalChanged(true, mQSPhoneSignalIconId,
372 mContentDescriptionPhoneSignal, mQSDataTypeIconId,
373 mContentDescriptionDataType, mNetworkName);
Winson Chung4f49d942012-09-14 14:01:40 -0700374 } else {
375 // Normal mobile data
376 cb.onMobileDataSignalChanged(mHasMobileDataFeature, mQSPhoneSignalIconId,
Casey Burkhardtbac221f2012-10-03 18:13:58 -0700377 mContentDescriptionPhoneSignal, mQSDataTypeIconId,
378 mContentDescriptionDataType, mNetworkName);
Winson Chungd63c59782012-09-05 17:34:41 -0700379 }
380 }
381 cb.onAirplaneModeChanged(mAirplaneMode);
382 }
383
Daniel Sandler2b697352011-07-22 16:23:09 -0400384 public void setStackedMode(boolean stacked) {
385 mDataAndWifiStacked = true;
386 }
387
Wink Saville52840902011-02-18 12:40:47 -0800388 @Override
Joe Onoratofd52b182010-11-10 18:00:52 -0800389 public void onReceive(Context context, Intent intent) {
390 final String action = intent.getAction();
391 if (action.equals(WifiManager.RSSI_CHANGED_ACTION)
392 || action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)
Joe Onoratofd52b182010-11-10 18:00:52 -0800393 || action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
394 updateWifiState(intent);
395 refreshViews();
396 } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) {
397 updateSimState(intent);
398 updateDataIcon();
399 refreshViews();
Wink Savillea639b312012-07-10 12:37:54 -0700400 } else if (action.equals(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION)) {
401 updateNetworkName(intent.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_SPN, false),
402 intent.getStringExtra(TelephonyIntents.EXTRA_SPN),
403 intent.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_PLMN, false),
404 intent.getStringExtra(TelephonyIntents.EXTRA_PLMN));
Joe Onorato355ebc02010-12-01 17:37:00 -0800405 refreshViews();
Joe Onoratofd52b182010-11-10 18:00:52 -0800406 } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION) ||
407 action.equals(ConnectivityManager.INET_CONDITION_ACTION)) {
408 updateConnectivity(intent);
409 refreshViews();
Joe Onorato99641832011-01-30 12:12:05 -0800410 } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -0700411 refreshLocale();
Joe Onorato99641832011-01-30 12:12:05 -0800412 refreshViews();
Mike Corriganbd151122011-02-24 15:24:47 -0600413 } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -0700414 refreshLocale();
Mike Corriganbd151122011-02-24 15:24:47 -0600415 updateAirplaneMode();
416 refreshViews();
tk.mun148c7d02011-10-13 22:51:57 +0900417 } else if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION) ||
418 action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION) ||
419 action.equals(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION)) {
Daniel Sandler0fee2172011-11-10 00:15:38 -0500420 updateWimaxState(intent);
tk.mun148c7d02011-10-13 22:51:57 +0900421 refreshViews();
Joe Onoratofd52b182010-11-10 18:00:52 -0800422 }
423 }
424
425
426 // ===== Telephony ==============================================================
427
428 PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
429 @Override
430 public void onSignalStrengthsChanged(SignalStrength signalStrength) {
Daniel Sandlerda49dac2011-09-20 15:36:50 -0400431 if (DEBUG) {
John Wangd55cde12012-02-13 17:16:41 -0800432 Slog.d(TAG, "onSignalStrengthsChanged signalStrength=" + signalStrength +
Daniel Sandlerc49e1952011-09-20 10:45:53 -0400433 ((signalStrength == null) ? "" : (" level=" + signalStrength.getLevel())));
Joe Onoratofd52b182010-11-10 18:00:52 -0800434 }
435 mSignalStrength = signalStrength;
436 updateTelephonySignalStrength();
437 refreshViews();
438 }
439
440 @Override
441 public void onServiceStateChanged(ServiceState state) {
442 if (DEBUG) {
443 Slog.d(TAG, "onServiceStateChanged state=" + state.getState());
444 }
445 mServiceState = state;
446 updateTelephonySignalStrength();
Daniel Sandler89d97132011-09-08 15:31:57 -0400447 updateDataNetType();
Joe Onoratofd52b182010-11-10 18:00:52 -0800448 updateDataIcon();
449 refreshViews();
450 }
451
452 @Override
453 public void onCallStateChanged(int state, String incomingNumber) {
454 if (DEBUG) {
455 Slog.d(TAG, "onCallStateChanged state=" + state);
456 }
457 // In cdma, if a voice call is made, RSSI should switch to 1x.
458 if (isCdma()) {
459 updateTelephonySignalStrength();
460 refreshViews();
461 }
462 }
463
464 @Override
465 public void onDataConnectionStateChanged(int state, int networkType) {
Daniel Sandlerc49e1952011-09-20 10:45:53 -0400466 if (DEBUG) {
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -0800467 Slog.d(TAG, "onDataConnectionStateChanged: state=" + state
Joe Onoratofd52b182010-11-10 18:00:52 -0800468 + " type=" + networkType);
469 }
470 mDataState = state;
Joe Onorato933464d2011-01-05 15:53:36 -0800471 mDataNetType = networkType;
472 updateDataNetType();
Joe Onoratofd52b182010-11-10 18:00:52 -0800473 updateDataIcon();
474 refreshViews();
475 }
476
477 @Override
478 public void onDataActivity(int direction) {
479 if (DEBUG) {
480 Slog.d(TAG, "onDataActivity: direction=" + direction);
481 }
482 mDataActivity = direction;
483 updateDataIcon();
484 refreshViews();
485 }
486 };
487
488 private final void updateSimState(Intent intent) {
Wink Savillea639b312012-07-10 12:37:54 -0700489 String stateExtra = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);
490 if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(stateExtra)) {
491 mSimState = IccCardConstants.State.ABSENT;
Joe Onoratofd52b182010-11-10 18:00:52 -0800492 }
Wink Savillea639b312012-07-10 12:37:54 -0700493 else if (IccCardConstants.INTENT_VALUE_ICC_READY.equals(stateExtra)) {
494 mSimState = IccCardConstants.State.READY;
Joe Onoratofd52b182010-11-10 18:00:52 -0800495 }
Wink Savillea639b312012-07-10 12:37:54 -0700496 else if (IccCardConstants.INTENT_VALUE_ICC_LOCKED.equals(stateExtra)) {
497 final String lockedReason =
498 intent.getStringExtra(IccCardConstants.INTENT_KEY_LOCKED_REASON);
499 if (IccCardConstants.INTENT_VALUE_LOCKED_ON_PIN.equals(lockedReason)) {
500 mSimState = IccCardConstants.State.PIN_REQUIRED;
Joe Onoratofd52b182010-11-10 18:00:52 -0800501 }
Wink Savillea639b312012-07-10 12:37:54 -0700502 else if (IccCardConstants.INTENT_VALUE_LOCKED_ON_PUK.equals(lockedReason)) {
503 mSimState = IccCardConstants.State.PUK_REQUIRED;
Joe Onoratofd52b182010-11-10 18:00:52 -0800504 }
505 else {
Wink Savillea639b312012-07-10 12:37:54 -0700506 mSimState = IccCardConstants.State.NETWORK_LOCKED;
Joe Onoratofd52b182010-11-10 18:00:52 -0800507 }
508 } else {
Wink Savillea639b312012-07-10 12:37:54 -0700509 mSimState = IccCardConstants.State.UNKNOWN;
Joe Onoratofd52b182010-11-10 18:00:52 -0800510 }
511 }
512
513 private boolean isCdma() {
514 return (mSignalStrength != null) && !mSignalStrength.isGsm();
515 }
516
Joe Onoratofd52b182010-11-10 18:00:52 -0800517 private boolean hasService() {
518 if (mServiceState != null) {
519 switch (mServiceState.getState()) {
520 case ServiceState.STATE_OUT_OF_SERVICE:
521 case ServiceState.STATE_POWER_OFF:
522 return false;
523 default:
524 return true;
525 }
526 } else {
527 return false;
528 }
529 }
530
Mike Corriganbd151122011-02-24 15:24:47 -0600531 private void updateAirplaneMode() {
Christopher Tatec09cdce2012-09-10 16:50:14 -0700532 mAirplaneMode = (Settings.Global.getInt(mContext.getContentResolver(),
533 Settings.Global.AIRPLANE_MODE_ON, 0) == 1);
Mike Corriganbd151122011-02-24 15:24:47 -0600534 }
535
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -0700536 private void refreshLocale() {
537 mLocale = mContext.getResources().getConfiguration().locale;
538 }
539
Joe Onoratofd52b182010-11-10 18:00:52 -0800540 private final void updateTelephonySignalStrength() {
Mike Corriganbd151122011-02-24 15:24:47 -0600541 if (!hasService()) {
Daniel Sandlerc49e1952011-09-20 10:45:53 -0400542 if (CHATTY) Slog.d(TAG, "updateTelephonySignalStrength: !hasService()");
Daniel Sandlere3b86f22012-01-18 15:49:49 -0500543 mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
Winson Chunged1395f2012-09-13 18:13:44 -0700544 mQSPhoneSignalIconId = R.drawable.ic_qs_signal_no_signal;
Daniel Sandlere3b86f22012-01-18 15:49:49 -0500545 mDataSignalIconId = R.drawable.stat_sys_signal_null;
Joe Onoratofd52b182010-11-10 18:00:52 -0800546 } else {
Joe Onorato801ade02010-11-15 15:33:39 -0800547 if (mSignalStrength == null) {
Daniel Sandlerc49e1952011-09-20 10:45:53 -0400548 if (CHATTY) Slog.d(TAG, "updateTelephonySignalStrength: mSignalStrength == null");
Daniel Sandlere3b86f22012-01-18 15:49:49 -0500549 mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
Winson Chunged1395f2012-09-13 18:13:44 -0700550 mQSPhoneSignalIconId = R.drawable.ic_qs_signal_no_signal;
Daniel Sandlere3b86f22012-01-18 15:49:49 -0500551 mDataSignalIconId = R.drawable.stat_sys_signal_null;
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700552 mContentDescriptionPhoneSignal = mContext.getString(
553 AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0]);
Joe Onoratofd52b182010-11-10 18:00:52 -0800554 } else {
Joe Onoratofd52b182010-11-10 18:00:52 -0800555 int iconLevel;
Joe Onoratofd52b182010-11-10 18:00:52 -0800556 int[] iconList;
John Wangd55cde12012-02-13 17:16:41 -0800557 if (isCdma() && mAlwaysShowCdmaRssi) {
558 mLastSignalLevel = iconLevel = mSignalStrength.getCdmaLevel();
559 if(DEBUG) Slog.d(TAG, "mAlwaysShowCdmaRssi=" + mAlwaysShowCdmaRssi
560 + " set to cdmaLevel=" + mSignalStrength.getCdmaLevel()
561 + " instead of level=" + mSignalStrength.getLevel());
562 } else {
563 mLastSignalLevel = iconLevel = mSignalStrength.getLevel();
564 }
565
Wink Saville52840902011-02-18 12:40:47 -0800566 if (isCdma()) {
567 if (isCdmaEri()) {
568 iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[mInetCondition];
569 } else {
570 iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[mInetCondition];
571 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800572 } else {
Wink Saville52840902011-02-18 12:40:47 -0800573 // Though mPhone is a Manager, this call is not an IPC
574 if (mPhone.isNetworkRoaming()) {
575 iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[mInetCondition];
576 } else {
577 iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[mInetCondition];
578 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800579 }
580 mPhoneSignalIconId = iconList[iconLevel];
Winson Chung5f623012012-09-14 14:58:43 -0700581 mQSPhoneSignalIconId =
582 TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[mInetCondition][iconLevel];
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700583 mContentDescriptionPhoneSignal = mContext.getString(
584 AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[iconLevel]);
Joe Onoratoddbba422010-11-23 15:42:28 -0800585 mDataSignalIconId = TelephonyIcons.DATA_SIGNAL_STRENGTH[mInetCondition][iconLevel];
Joe Onoratofd52b182010-11-10 18:00:52 -0800586 }
587 }
588 }
589
Joe Onorato933464d2011-01-05 15:53:36 -0800590 private final void updateDataNetType() {
Daniel Sandler0fee2172011-11-10 00:15:38 -0500591 if (mIsWimaxEnabled && mWimaxConnected) {
592 // wimax is a special 4g network not handled by telephony
593 mDataIconList = TelephonyIcons.DATA_4G[mInetCondition];
594 mDataTypeIconId = R.drawable.stat_sys_data_connected_4g;
Winson Chung4f49d942012-09-14 14:01:40 -0700595 mQSDataTypeIconId = R.drawable.ic_qs_signal_4g;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500596 mContentDescriptionDataType = mContext.getString(
597 R.string.accessibility_data_connection_4g);
598 } else {
599 switch (mDataNetType) {
600 case TelephonyManager.NETWORK_TYPE_UNKNOWN:
601 if (!mShowAtLeastThreeGees) {
602 mDataIconList = TelephonyIcons.DATA_G[mInetCondition];
603 mDataTypeIconId = 0;
Winson Chung4f49d942012-09-14 14:01:40 -0700604 mQSDataTypeIconId = 0;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500605 mContentDescriptionDataType = mContext.getString(
606 R.string.accessibility_data_connection_gprs);
607 break;
608 } else {
609 // fall through
610 }
611 case TelephonyManager.NETWORK_TYPE_EDGE:
612 if (!mShowAtLeastThreeGees) {
613 mDataIconList = TelephonyIcons.DATA_E[mInetCondition];
614 mDataTypeIconId = R.drawable.stat_sys_data_connected_e;
Winson Chung4f49d942012-09-14 14:01:40 -0700615 mQSDataTypeIconId = R.drawable.ic_qs_signal_e;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500616 mContentDescriptionDataType = mContext.getString(
617 R.string.accessibility_data_connection_edge);
618 break;
619 } else {
620 // fall through
621 }
622 case TelephonyManager.NETWORK_TYPE_UMTS:
Joe Onoratofd52b182010-11-10 18:00:52 -0800623 mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
Christian Robertson2e347422011-08-11 14:01:04 -0700624 mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
Winson Chung4f49d942012-09-14 14:01:40 -0700625 mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700626 mContentDescriptionDataType = mContext.getString(
627 R.string.accessibility_data_connection_3g);
Daniel Sandler0fee2172011-11-10 00:15:38 -0500628 break;
629 case TelephonyManager.NETWORK_TYPE_HSDPA:
630 case TelephonyManager.NETWORK_TYPE_HSUPA:
631 case TelephonyManager.NETWORK_TYPE_HSPA:
632 case TelephonyManager.NETWORK_TYPE_HSPAP:
633 if (mHspaDataDistinguishable) {
634 mDataIconList = TelephonyIcons.DATA_H[mInetCondition];
635 mDataTypeIconId = R.drawable.stat_sys_data_connected_h;
Winson Chung4f49d942012-09-14 14:01:40 -0700636 mQSDataTypeIconId = R.drawable.ic_qs_signal_h;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500637 mContentDescriptionDataType = mContext.getString(
638 R.string.accessibility_data_connection_3_5g);
639 } else {
640 mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
641 mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
Winson Chung4f49d942012-09-14 14:01:40 -0700642 mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500643 mContentDescriptionDataType = mContext.getString(
644 R.string.accessibility_data_connection_3g);
645 }
646 break;
647 case TelephonyManager.NETWORK_TYPE_CDMA:
Madan Ankapura68cad3a2012-08-02 19:10:22 -0700648 if (!mShowAtLeastThreeGees) {
649 // display 1xRTT for IS95A/B
650 mDataIconList = TelephonyIcons.DATA_1X[mInetCondition];
651 mDataTypeIconId = R.drawable.stat_sys_data_connected_1x;
Winson Chung4f49d942012-09-14 14:01:40 -0700652 mQSDataTypeIconId = R.drawable.ic_qs_signal_1x;
Madan Ankapura68cad3a2012-08-02 19:10:22 -0700653 mContentDescriptionDataType = mContext.getString(
654 R.string.accessibility_data_connection_cdma);
655 break;
656 } else {
657 // fall through
658 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500659 case TelephonyManager.NETWORK_TYPE_1xRTT:
Madan Ankapura68cad3a2012-08-02 19:10:22 -0700660 if (!mShowAtLeastThreeGees) {
661 mDataIconList = TelephonyIcons.DATA_1X[mInetCondition];
662 mDataTypeIconId = R.drawable.stat_sys_data_connected_1x;
Winson Chung4f49d942012-09-14 14:01:40 -0700663 mQSDataTypeIconId = R.drawable.ic_qs_signal_1x;
Madan Ankapura68cad3a2012-08-02 19:10:22 -0700664 mContentDescriptionDataType = mContext.getString(
665 R.string.accessibility_data_connection_cdma);
666 break;
667 } else {
668 // fall through
669 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500670 case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through
671 case TelephonyManager.NETWORK_TYPE_EVDO_A:
672 case TelephonyManager.NETWORK_TYPE_EVDO_B:
673 case TelephonyManager.NETWORK_TYPE_EHRPD:
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -0700674 mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
675 mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
Winson Chung4f49d942012-09-14 14:01:40 -0700676 mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
Daniel Sandler9b5ae0c2011-08-25 17:29:26 -0700677 mContentDescriptionDataType = mContext.getString(
678 R.string.accessibility_data_connection_3g);
Daniel Sandler0fee2172011-11-10 00:15:38 -0500679 break;
680 case TelephonyManager.NETWORK_TYPE_LTE:
Wink Savillec06462c2013-06-20 18:15:20 -0700681 boolean show4GforLTE = mContext.getResources().getBoolean(R.bool.config_show4GForLTE);
682 if (show4GforLTE) {
Daniel Sandler2fe71d02013-06-06 16:15:43 -0400683 mDataIconList = TelephonyIcons.DATA_4G[mInetCondition];
684 mDataTypeIconId = R.drawable.stat_sys_data_connected_4g;
685 mQSDataTypeIconId = R.drawable.ic_qs_signal_4g;
686 mContentDescriptionDataType = mContext.getString(
687 R.string.accessibility_data_connection_4g);
688 } else {
689 mDataIconList = TelephonyIcons.DATA_LTE[mInetCondition];
690 mDataTypeIconId = R.drawable.stat_sys_data_connected_lte;
691 mQSDataTypeIconId = R.drawable.ic_qs_signal_lte;
692 mContentDescriptionDataType = mContext.getString(
693 R.string.accessibility_data_connection_lte);
694 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500695 break;
696 default:
697 if (!mShowAtLeastThreeGees) {
698 mDataIconList = TelephonyIcons.DATA_G[mInetCondition];
699 mDataTypeIconId = R.drawable.stat_sys_data_connected_g;
Winson Chung4f49d942012-09-14 14:01:40 -0700700 mQSDataTypeIconId = R.drawable.ic_qs_signal_g;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500701 mContentDescriptionDataType = mContext.getString(
702 R.string.accessibility_data_connection_gprs);
703 } else {
704 mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
705 mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
Winson Chung4f49d942012-09-14 14:01:40 -0700706 mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
Daniel Sandler0fee2172011-11-10 00:15:38 -0500707 mContentDescriptionDataType = mContext.getString(
708 R.string.accessibility_data_connection_3g);
709 }
710 break;
711 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800712 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500713
Kazuhiro Ondobc926132012-01-27 08:57:26 -0600714 if (isCdma()) {
715 if (isCdmaEri()) {
716 mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
Winson Chung4f49d942012-09-14 14:01:40 -0700717 mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
Kazuhiro Ondobc926132012-01-27 08:57:26 -0600718 }
719 } else if (mPhone.isNetworkRoaming()) {
720 mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
Winson Chung4f49d942012-09-14 14:01:40 -0700721 mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
Joe Onoratoddbba422010-11-23 15:42:28 -0800722 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800723 }
724
725 boolean isCdmaEri() {
Robert Greenwaltacab04d2011-06-06 15:28:45 -0700726 if (mServiceState != null) {
727 final int iconIndex = mServiceState.getCdmaEriIconIndex();
728 if (iconIndex != EriInfo.ROAMING_INDICATOR_OFF) {
729 final int iconMode = mServiceState.getCdmaEriIconMode();
730 if (iconMode == EriInfo.ROAMING_ICON_MODE_NORMAL
731 || iconMode == EriInfo.ROAMING_ICON_MODE_FLASH) {
732 return true;
733 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800734 }
735 }
736 return false;
737 }
738
739 private final void updateDataIcon() {
740 int iconId;
741 boolean visible = true;
742
743 if (!isCdma()) {
744 // GSM case, we have to check also the sim state
Wink Savillea639b312012-07-10 12:37:54 -0700745 if (mSimState == IccCardConstants.State.READY ||
746 mSimState == IccCardConstants.State.UNKNOWN) {
Joe Onoratofd52b182010-11-10 18:00:52 -0800747 if (hasService() && mDataState == TelephonyManager.DATA_CONNECTED) {
748 switch (mDataActivity) {
749 case TelephonyManager.DATA_ACTIVITY_IN:
750 iconId = mDataIconList[1];
751 break;
752 case TelephonyManager.DATA_ACTIVITY_OUT:
753 iconId = mDataIconList[2];
754 break;
755 case TelephonyManager.DATA_ACTIVITY_INOUT:
756 iconId = mDataIconList[3];
757 break;
758 default:
759 iconId = mDataIconList[0];
760 break;
761 }
Joe Onoratoddbba422010-11-23 15:42:28 -0800762 mDataDirectionIconId = iconId;
Joe Onoratofd52b182010-11-10 18:00:52 -0800763 } else {
764 iconId = 0;
765 visible = false;
766 }
767 } else {
768 iconId = R.drawable.stat_sys_no_sim;
Daniel Sandler1f1304a2011-08-07 16:36:39 -0400769 visible = false; // no SIM? no data
Joe Onoratofd52b182010-11-10 18:00:52 -0800770 }
771 } else {
772 // CDMA case, mDataActivity can be also DATA_ACTIVITY_DORMANT
773 if (hasService() && mDataState == TelephonyManager.DATA_CONNECTED) {
774 switch (mDataActivity) {
775 case TelephonyManager.DATA_ACTIVITY_IN:
776 iconId = mDataIconList[1];
777 break;
778 case TelephonyManager.DATA_ACTIVITY_OUT:
779 iconId = mDataIconList[2];
780 break;
781 case TelephonyManager.DATA_ACTIVITY_INOUT:
782 iconId = mDataIconList[3];
783 break;
784 case TelephonyManager.DATA_ACTIVITY_DORMANT:
785 default:
786 iconId = mDataIconList[0];
787 break;
788 }
789 } else {
790 iconId = 0;
791 visible = false;
792 }
793 }
794
795 // yuck - this should NOT be done by the status bar
796 long ident = Binder.clearCallingIdentity();
797 try {
798 mBatteryStats.notePhoneDataConnectionState(mPhone.getNetworkType(), visible);
799 } catch (RemoteException e) {
800 } finally {
801 Binder.restoreCallingIdentity(ident);
802 }
803
Joe Onoratoddbba422010-11-23 15:42:28 -0800804 mDataDirectionIconId = iconId;
Joe Onoratofd52b182010-11-10 18:00:52 -0800805 mDataConnected = visible;
806 }
807
Joe Onorato355ebc02010-12-01 17:37:00 -0800808 void updateNetworkName(boolean showSpn, String spn, boolean showPlmn, String plmn) {
809 if (false) {
810 Slog.d("CarrierLabel", "updateNetworkName showSpn=" + showSpn + " spn=" + spn
811 + " showPlmn=" + showPlmn + " plmn=" + plmn);
812 }
813 StringBuilder str = new StringBuilder();
814 boolean something = false;
815 if (showPlmn && plmn != null) {
816 str.append(plmn);
817 something = true;
818 }
819 if (showSpn && spn != null) {
820 if (something) {
821 str.append(mNetworkNameSeparator);
822 }
823 str.append(spn);
824 something = true;
825 }
826 if (something) {
827 mNetworkName = str.toString();
828 } else {
829 mNetworkName = mNetworkNameDefault;
830 }
831 }
832
Joe Onoratofd52b182010-11-10 18:00:52 -0800833 // ===== Wifi ===================================================================
834
Irfan Sheriff227bec42011-02-15 19:30:27 -0800835 class WifiHandler extends Handler {
Irfan Sheriff227bec42011-02-15 19:30:27 -0800836 @Override
837 public void handleMessage(Message msg) {
838 switch (msg.what) {
839 case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED:
840 if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
841 mWifiChannel.sendMessage(Message.obtain(this,
842 AsyncChannel.CMD_CHANNEL_FULL_CONNECTION));
843 } else {
844 Slog.e(TAG, "Failed to connect to wifi");
845 }
846 break;
847 case WifiManager.DATA_ACTIVITY_NOTIFICATION:
Joe Onoratof32621a2011-03-10 15:29:49 -0800848 if (msg.arg1 != mWifiActivity) {
849 mWifiActivity = msg.arg1;
850 refreshViews();
Irfan Sheriff227bec42011-02-15 19:30:27 -0800851 }
852 break;
853 default:
854 //Ignore
855 break;
856 }
857 }
858 }
859
Joe Onoratofd52b182010-11-10 18:00:52 -0800860 private void updateWifiState(Intent intent) {
861 final String action = intent.getAction();
862 if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
863 mWifiEnabled = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
864 WifiManager.WIFI_STATE_UNKNOWN) == WifiManager.WIFI_STATE_ENABLED;
865
Irfan Sheriffb8297cf2010-11-18 12:47:29 -0800866 } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
Joe Onoratofd52b182010-11-10 18:00:52 -0800867 final NetworkInfo networkInfo = (NetworkInfo)
868 intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
869 boolean wasConnected = mWifiConnected;
870 mWifiConnected = networkInfo != null && networkInfo.isConnected();
871 // If we just connected, grab the inintial signal strength and ssid
872 if (mWifiConnected && !wasConnected) {
Daniel Sandler0d6ff0102011-10-19 21:02:37 -0400873 // try getting it out of the intent first
874 WifiInfo info = (WifiInfo) intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
875 if (info == null) {
876 info = mWifiManager.getConnectionInfo();
877 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800878 if (info != null) {
Joe Onoratofd52b182010-11-10 18:00:52 -0800879 mWifiSsid = huntForSsid(info);
880 } else {
Joe Onoratofd52b182010-11-10 18:00:52 -0800881 mWifiSsid = null;
882 }
883 } else if (!mWifiConnected) {
Joe Onoratofd52b182010-11-10 18:00:52 -0800884 mWifiSsid = null;
885 }
Joe Onoratofd52b182010-11-10 18:00:52 -0800886 } else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
Irfan Sheriff07573b32012-01-27 21:00:19 -0800887 mWifiRssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200);
888 mWifiLevel = WifiManager.calculateSignalLevel(
889 mWifiRssi, WifiIcons.WIFI_LEVEL_COUNT);
Joe Onoratofd52b182010-11-10 18:00:52 -0800890 }
891
892 updateWifiIcons();
893 }
894
895 private void updateWifiIcons() {
896 if (mWifiConnected) {
897 mWifiIconId = WifiIcons.WIFI_SIGNAL_STRENGTH[mInetCondition][mWifiLevel];
Winson Chung5f623012012-09-14 14:58:43 -0700898 mQSWifiIconId = WifiIcons.QS_WIFI_SIGNAL_STRENGTH[mInetCondition][mWifiLevel];
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700899 mContentDescriptionWifi = mContext.getString(
900 AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH[mWifiLevel]);
Joe Onoratofd52b182010-11-10 18:00:52 -0800901 } else {
Daniel Sandler2b697352011-07-22 16:23:09 -0400902 if (mDataAndWifiStacked) {
903 mWifiIconId = 0;
Winson Chunged1395f2012-09-13 18:13:44 -0700904 mQSWifiIconId = 0;
Daniel Sandler2b697352011-07-22 16:23:09 -0400905 } else {
Daniel Sandlerd4b7e922012-05-17 12:52:51 -0400906 mWifiIconId = mWifiEnabled ? R.drawable.stat_sys_wifi_signal_null : 0;
Winson Chunged1395f2012-09-13 18:13:44 -0700907 mQSWifiIconId = mWifiEnabled ? R.drawable.ic_qs_wifi_no_network : 0;
Daniel Sandler2b697352011-07-22 16:23:09 -0400908 }
Svetoslav Ganov6179ea32011-06-28 01:12:41 -0700909 mContentDescriptionWifi = mContext.getString(R.string.accessibility_no_wifi);
Joe Onoratofd52b182010-11-10 18:00:52 -0800910 }
911 }
912
913 private String huntForSsid(WifiInfo info) {
914 String ssid = info.getSSID();
915 if (ssid != null) {
916 return ssid;
917 }
918 // OK, it's not in the connectionInfo; we have to go hunting for it
919 List<WifiConfiguration> networks = mWifiManager.getConfiguredNetworks();
920 for (WifiConfiguration net : networks) {
921 if (net.networkId == info.getNetworkId()) {
922 return net.SSID;
923 }
924 }
925 return null;
926 }
927
928
Daniel Sandler0fee2172011-11-10 00:15:38 -0500929 // ===== Wimax ===================================================================
tk.mun148c7d02011-10-13 22:51:57 +0900930 private final void updateWimaxState(Intent intent) {
931 final String action = intent.getAction();
932 boolean wasConnected = mWimaxConnected;
933 if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION)) {
934 int wimaxStatus = intent.getIntExtra(WimaxManagerConstants.EXTRA_4G_STATE,
935 WimaxManagerConstants.NET_4G_STATE_UNKNOWN);
936 mIsWimaxEnabled = (wimaxStatus ==
Daniel Sandler0fee2172011-11-10 00:15:38 -0500937 WimaxManagerConstants.NET_4G_STATE_ENABLED);
tk.mun148c7d02011-10-13 22:51:57 +0900938 } else if (action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION)) {
939 mWimaxSignal = intent.getIntExtra(WimaxManagerConstants.EXTRA_NEW_SIGNAL_LEVEL, 0);
940 } else if (action.equals(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION)) {
Daniel Sandler0fee2172011-11-10 00:15:38 -0500941 mWimaxState = intent.getIntExtra(WimaxManagerConstants.EXTRA_WIMAX_STATE,
tk.mun148c7d02011-10-13 22:51:57 +0900942 WimaxManagerConstants.NET_4G_STATE_UNKNOWN);
943 mWimaxExtraState = intent.getIntExtra(
944 WimaxManagerConstants.EXTRA_WIMAX_STATE_DETAIL,
945 WimaxManagerConstants.NET_4G_STATE_UNKNOWN);
946 mWimaxConnected = (mWimaxState ==
Daniel Sandler0fee2172011-11-10 00:15:38 -0500947 WimaxManagerConstants.WIMAX_STATE_CONNECTED);
948 mWimaxIdle = (mWimaxExtraState == WimaxManagerConstants.WIMAX_IDLE);
tk.mun148c7d02011-10-13 22:51:57 +0900949 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500950 updateDataNetType();
tk.mun148c7d02011-10-13 22:51:57 +0900951 updateWimaxIcons();
952 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500953
954 private void updateWimaxIcons() {
955 if (mIsWimaxEnabled) {
956 if (mWimaxConnected) {
957 if (mWimaxIdle)
958 mWimaxIconId = WimaxIcons.WIMAX_IDLE;
959 else
960 mWimaxIconId = WimaxIcons.WIMAX_SIGNAL_STRENGTH[mInetCondition][mWimaxSignal];
961 mContentDescriptionWimax = mContext.getString(
962 AccessibilityContentDescriptions.WIMAX_CONNECTION_STRENGTH[mWimaxSignal]);
963 } else {
964 mWimaxIconId = WimaxIcons.WIMAX_DISCONNECTED;
965 mContentDescriptionWimax = mContext.getString(R.string.accessibility_no_wimax);
966 }
967 } else {
968 mWimaxIconId = 0;
tk.mun148c7d02011-10-13 22:51:57 +0900969 }
Daniel Sandler0fee2172011-11-10 00:15:38 -0500970 }
971
Joe Onoratofd52b182010-11-10 18:00:52 -0800972 // ===== Full or limited Internet connectivity ==================================
973
974 private void updateConnectivity(Intent intent) {
Daniel Sandler60b3e9c2011-08-03 21:22:16 -0400975 if (CHATTY) {
976 Slog.d(TAG, "updateConnectivity: intent=" + intent);
977 }
978
Jeff Sharkey5e613312012-01-30 11:16:20 -0800979 final ConnectivityManager connManager = (ConnectivityManager) mContext
980 .getSystemService(Context.CONNECTIVITY_SERVICE);
981 final NetworkInfo info = connManager.getActiveNetworkInfo();
982
Daniel Sandler67234c42012-06-15 13:17:39 -0400983 // Are we connected at all, by any interface?
984 mConnected = info != null && info.isConnected();
985 if (mConnected) {
986 mConnectedNetworkType = info.getType();
987 mConnectedNetworkTypeName = info.getTypeName();
988 } else {
989 mConnectedNetworkType = ConnectivityManager.TYPE_NONE;
990 mConnectedNetworkTypeName = null;
991 }
992
Joe Onoratofd52b182010-11-10 18:00:52 -0800993 int connectionStatus = intent.getIntExtra(ConnectivityManager.EXTRA_INET_CONDITION, 0);
994
Daniel Sandler60b3e9c2011-08-03 21:22:16 -0400995 if (CHATTY) {
996 Slog.d(TAG, "updateConnectivity: networkInfo=" + info);
997 Slog.d(TAG, "updateConnectivity: connectionStatus=" + connectionStatus);
998 }
999
Daniel Sandler7c12eee2011-09-25 15:53:33 -04001000 mInetCondition = (connectionStatus > INET_CONDITION_THRESHOLD ? 1 : 0);
Joe Onoratofd52b182010-11-10 18:00:52 -08001001
Daniel Sandler7c12eee2011-09-25 15:53:33 -04001002 if (info != null && info.getType() == ConnectivityManager.TYPE_BLUETOOTH) {
Daniel Sandler0fee2172011-11-10 00:15:38 -05001003 mBluetoothTethered = info.isConnected();
Daniel Sandler7c12eee2011-09-25 15:53:33 -04001004 } else {
1005 mBluetoothTethered = false;
Joe Onoratofd52b182010-11-10 18:00:52 -08001006 }
Daniel Sandler7c12eee2011-09-25 15:53:33 -04001007
1008 // We want to update all the icons, all at once, for any condition change
1009 updateDataNetType();
Daniel Sandler0fee2172011-11-10 00:15:38 -05001010 updateWimaxIcons();
Daniel Sandler7c12eee2011-09-25 15:53:33 -04001011 updateDataIcon();
1012 updateTelephonySignalStrength();
1013 updateWifiIcons();
Joe Onoratofd52b182010-11-10 18:00:52 -08001014 }
1015
1016
1017 // ===== Update the views =======================================================
1018
Joe Onoratofd52b182010-11-10 18:00:52 -08001019 void refreshViews() {
1020 Context context = mContext;
1021
Daniel Sandler28f89d42011-08-15 14:04:15 -04001022 int combinedSignalIconId = 0;
1023 int combinedActivityIconId = 0;
Daniel Sandler5962fd52012-01-11 14:57:04 -05001024 String combinedLabel = "";
1025 String wifiLabel = "";
1026 String mobileLabel = "";
Joe Onoratoddbba422010-11-23 15:42:28 -08001027 int N;
Daniel Sandlerdd4ef492012-07-27 11:19:52 -04001028 final boolean emergencyOnly = isEmergencyOnly();
Joe Onoratofd52b182010-11-10 18:00:52 -08001029
Daniel Sandler639ed752012-01-20 14:22:07 -05001030 if (!mHasMobileDataFeature) {
1031 mDataSignalIconId = mPhoneSignalIconId = 0;
Winson Chunged1395f2012-09-13 18:13:44 -07001032 mQSPhoneSignalIconId = 0;
Daniel Sandler2e481b92012-01-24 14:45:40 -05001033 mobileLabel = "";
1034 } else {
Daniel Sandler62a1eb82012-01-26 10:22:23 -05001035 // We want to show the carrier name if in service and either:
1036 // - We are connected to mobile data, or
1037 // - We are not connected to mobile data, as long as the *reason* packets are not
1038 // being routed over that link is that we have better connectivity via wifi.
Casey Burkhardtbac221f2012-10-03 18:13:58 -07001039 // If data is disconnected for some other reason but wifi (or ethernet/bluetooth)
Daniel Sandler67234c42012-06-15 13:17:39 -04001040 // is connected, we show nothing.
Daniel Sandler62a1eb82012-01-26 10:22:23 -05001041 // Otherwise (nothing connected) we show "No internet connection".
1042
1043 if (mDataConnected) {
1044 mobileLabel = mNetworkName;
Daniel Sandler9af376e2012-07-25 12:31:22 -04001045 } else if (mConnected || emergencyOnly) {
1046 if (hasService() || emergencyOnly) {
Daniel Sandler0ae29272012-07-24 15:19:04 -04001047 // The isEmergencyOnly test covers the case of a phone with no SIM
Daniel Sandler62a1eb82012-01-26 10:22:23 -05001048 mobileLabel = mNetworkName;
1049 } else {
Daniel Sandler0ae29272012-07-24 15:19:04 -04001050 // Tablets, basically
Daniel Sandler62a1eb82012-01-26 10:22:23 -05001051 mobileLabel = "";
1052 }
1053 } else {
John Wangd55cde12012-02-13 17:16:41 -08001054 mobileLabel
Daniel Sandler62a1eb82012-01-26 10:22:23 -05001055 = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
Daniel Sandler5962fd52012-01-11 14:57:04 -05001056 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001057
Daniel Sandler2e481b92012-01-24 14:45:40 -05001058 // Now for things that should only be shown when actually using mobile data.
1059 if (mDataConnected) {
1060 combinedSignalIconId = mDataSignalIconId;
1061 switch (mDataActivity) {
1062 case TelephonyManager.DATA_ACTIVITY_IN:
1063 mMobileActivityIconId = R.drawable.stat_sys_signal_in;
1064 break;
1065 case TelephonyManager.DATA_ACTIVITY_OUT:
1066 mMobileActivityIconId = R.drawable.stat_sys_signal_out;
1067 break;
1068 case TelephonyManager.DATA_ACTIVITY_INOUT:
1069 mMobileActivityIconId = R.drawable.stat_sys_signal_inout;
1070 break;
1071 default:
1072 mMobileActivityIconId = 0;
1073 break;
1074 }
1075
1076 combinedLabel = mobileLabel;
1077 combinedActivityIconId = mMobileActivityIconId;
1078 combinedSignalIconId = mDataSignalIconId; // set by updateDataIcon()
1079 mContentDescriptionCombinedSignal = mContentDescriptionDataType;
Pawit Pornkitprasan3d305902012-04-03 10:43:54 +07001080 } else {
1081 mMobileActivityIconId = 0;
Daniel Sandler2e481b92012-01-24 14:45:40 -05001082 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001083 }
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001084
Daniel Sandler28f89d42011-08-15 14:04:15 -04001085 if (mWifiConnected) {
1086 if (mWifiSsid == null) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001087 wifiLabel = context.getString(R.string.status_bar_settings_signal_meter_wifi_nossid);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001088 mWifiActivityIconId = 0; // no wifis, no bits
1089 } else {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001090 wifiLabel = mWifiSsid;
1091 if (DEBUG) {
1092 wifiLabel += "xxxxXXXXxxxxXXXX";
1093 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001094 switch (mWifiActivity) {
1095 case WifiManager.DATA_ACTIVITY_IN:
1096 mWifiActivityIconId = R.drawable.stat_sys_wifi_in;
1097 break;
1098 case WifiManager.DATA_ACTIVITY_OUT:
1099 mWifiActivityIconId = R.drawable.stat_sys_wifi_out;
1100 break;
1101 case WifiManager.DATA_ACTIVITY_INOUT:
1102 mWifiActivityIconId = R.drawable.stat_sys_wifi_inout;
1103 break;
1104 case WifiManager.DATA_ACTIVITY_NONE:
repo syncecc430e2011-09-30 07:57:50 -07001105 mWifiActivityIconId = 0;
Daniel Sandler28f89d42011-08-15 14:04:15 -04001106 break;
1107 }
1108 }
1109
1110 combinedActivityIconId = mWifiActivityIconId;
Daniel Sandler5962fd52012-01-11 14:57:04 -05001111 combinedLabel = wifiLabel;
Daniel Sandler28f89d42011-08-15 14:04:15 -04001112 combinedSignalIconId = mWifiIconId; // set by updateWifiIcons()
1113 mContentDescriptionCombinedSignal = mContentDescriptionWifi;
Daniel Sandler2e481b92012-01-24 14:45:40 -05001114 } else {
1115 if (mHasMobileDataFeature) {
1116 wifiLabel = "";
1117 } else {
1118 wifiLabel = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
1119 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001120 }
1121
1122 if (mBluetoothTethered) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001123 combinedLabel = mContext.getString(R.string.bluetooth_tethered);
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -08001124 combinedSignalIconId = mBluetoothTetherIconId;
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001125 mContentDescriptionCombinedSignal = mContext.getString(
1126 R.string.accessibility_bluetooth_tether);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001127 }
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001128
Daniel Sandler67234c42012-06-15 13:17:39 -04001129 final boolean ethernetConnected = (mConnectedNetworkType == ConnectivityManager.TYPE_ETHERNET);
1130 if (ethernetConnected) {
Daniel Sandlerced8d212012-09-12 17:33:27 -07001131 combinedLabel = context.getString(R.string.ethernet_label);
Daniel Sandler67234c42012-06-15 13:17:39 -04001132 }
1133
Daniel Sandler28f89d42011-08-15 14:04:15 -04001134 if (mAirplaneMode &&
Mike Corriganbd151122011-02-24 15:24:47 -06001135 (mServiceState == null || (!hasService() && !mServiceState.isEmergencyOnly()))) {
1136 // Only display the flight-mode icon if not in "emergency calls only" mode.
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001137
Daniel Sandler28f89d42011-08-15 14:04:15 -04001138 // look again; your radios are now airplanes
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001139 mContentDescriptionPhoneSignal = mContext.getString(
1140 R.string.accessibility_airplane_mode);
Andrew Flynn061d43c2012-05-04 10:57:58 -07001141 mAirplaneIconId = R.drawable.stat_sys_signal_flightmode;
Winson Chung4f49d942012-09-14 14:01:40 -07001142 mPhoneSignalIconId = mDataSignalIconId = mDataTypeIconId = mQSDataTypeIconId = 0;
Winson Chunged1395f2012-09-13 18:13:44 -07001143 mQSPhoneSignalIconId = 0;
Daniel Sandler28f89d42011-08-15 14:04:15 -04001144
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001145 // combined values from connected wifi take precedence over airplane mode
Daniel Sandler2e481b92012-01-24 14:45:40 -05001146 if (mWifiConnected) {
1147 // Suppress "No internet connection." from mobile if wifi connected.
1148 mobileLabel = "";
1149 } else {
1150 if (mHasMobileDataFeature) {
1151 // let the mobile icon show "No internet connection."
1152 wifiLabel = "";
1153 } else {
1154 wifiLabel = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
1155 combinedLabel = wifiLabel;
1156 }
Jeff Sharkeyec9cc1b2011-11-30 11:02:27 -08001157 mContentDescriptionCombinedSignal = mContentDescriptionPhoneSignal;
1158 combinedSignalIconId = mDataSignalIconId;
1159 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001160 }
Daniel Sandler67234c42012-06-15 13:17:39 -04001161 else if (!mDataConnected && !mWifiConnected && !mBluetoothTethered && !mWimaxConnected && !ethernetConnected) {
Daniel Sandler28f89d42011-08-15 14:04:15 -04001162 // pretty much totally disconnected
1163
Daniel Sandler5962fd52012-01-11 14:57:04 -05001164 combinedLabel = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
Daniel Sandler9a7c7122011-02-25 12:28:57 -05001165 // On devices without mobile radios, we want to show the wifi icon
1166 combinedSignalIconId =
Robert Greenwalt9b2886e2011-08-31 11:46:42 -07001167 mHasMobileDataFeature ? mDataSignalIconId : mWifiIconId;
1168 mContentDescriptionCombinedSignal = mHasMobileDataFeature
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001169 ? mContentDescriptionDataType : mContentDescriptionWifi;
Daniel Sandler89d97132011-09-08 15:31:57 -04001170
Kazuhiro Ondobc926132012-01-27 08:57:26 -06001171 mDataTypeIconId = 0;
Winson Chung4f49d942012-09-14 14:01:40 -07001172 mQSDataTypeIconId = 0;
Kazuhiro Ondobc926132012-01-27 08:57:26 -06001173 if (isCdma()) {
1174 if (isCdmaEri()) {
1175 mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
Winson Chung4f49d942012-09-14 14:01:40 -07001176 mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
Kazuhiro Ondobc926132012-01-27 08:57:26 -06001177 }
1178 } else if (mPhone.isNetworkRoaming()) {
Daniel Sandler89d97132011-09-08 15:31:57 -04001179 mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
Winson Chung4f49d942012-09-14 14:01:40 -07001180 mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
Daniel Sandler89d97132011-09-08 15:31:57 -04001181 }
Joe Onoratofd52b182010-11-10 18:00:52 -08001182 }
1183
Daniel Sandler9a7c7122011-02-25 12:28:57 -05001184 if (DEBUG) {
Daniel Sandler1f1304a2011-08-07 16:36:39 -04001185 Slog.d(TAG, "refreshViews connected={"
1186 + (mWifiConnected?" wifi":"")
1187 + (mDataConnected?" data":"")
1188 + " } level="
1189 + ((mSignalStrength == null)?"??":Integer.toString(mSignalStrength.getLevel()))
1190 + " combinedSignalIconId=0x"
Joe Onoratoc198bb12011-01-31 20:28:59 -08001191 + Integer.toHexString(combinedSignalIconId)
1192 + "/" + getResourceName(combinedSignalIconId)
Daniel Sandler28f89d42011-08-15 14:04:15 -04001193 + " combinedActivityIconId=0x" + Integer.toHexString(combinedActivityIconId)
Daniel Sandler3d32a242012-06-05 13:44:14 -04001194 + " mobileLabel=" + mobileLabel
1195 + " wifiLabel=" + wifiLabel
Daniel Sandlerdd4ef492012-07-27 11:19:52 -04001196 + " emergencyOnly=" + emergencyOnly
Daniel Sandler3d32a242012-06-05 13:44:14 -04001197 + " combinedLabel=" + combinedLabel
Mike Corriganbd151122011-02-24 15:24:47 -06001198 + " mAirplaneMode=" + mAirplaneMode
Joe Onoratoc198bb12011-01-31 20:28:59 -08001199 + " mDataActivity=" + mDataActivity
Joe Onoratoddbba422010-11-23 15:42:28 -08001200 + " mPhoneSignalIconId=0x" + Integer.toHexString(mPhoneSignalIconId)
Winson Chunged1395f2012-09-13 18:13:44 -07001201 + " mQSPhoneSignalIconId=0x" + Integer.toHexString(mQSPhoneSignalIconId)
Joe Onoratoddbba422010-11-23 15:42:28 -08001202 + " mDataDirectionIconId=0x" + Integer.toHexString(mDataDirectionIconId)
1203 + " mDataSignalIconId=0x" + Integer.toHexString(mDataSignalIconId)
1204 + " mDataTypeIconId=0x" + Integer.toHexString(mDataTypeIconId)
Winson Chung4f49d942012-09-14 14:01:40 -07001205 + " mQSDataTypeIconId=0x" + Integer.toHexString(mQSDataTypeIconId)
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -08001206 + " mWifiIconId=0x" + Integer.toHexString(mWifiIconId)
Winson Chunged1395f2012-09-13 18:13:44 -07001207 + " mQSWifiIconId=0x" + Integer.toHexString(mQSWifiIconId)
Joe Onoratoc198bb12011-01-31 20:28:59 -08001208 + " mBluetoothTetherIconId=0x" + Integer.toHexString(mBluetoothTetherIconId));
Joe Onoratoddbba422010-11-23 15:42:28 -08001209 }
Joe Onoratofd52b182010-11-10 18:00:52 -08001210
Christian Robertson2e347422011-08-11 14:01:04 -07001211 if (mLastPhoneSignalIconId != mPhoneSignalIconId
Daniel Sandler28f89d42011-08-15 14:04:15 -04001212 || mLastDataDirectionOverlayIconId != combinedActivityIconId
Christian Robertson2e347422011-08-11 14:01:04 -07001213 || mLastWifiIconId != mWifiIconId
Daniel Sandler0fee2172011-11-10 00:15:38 -05001214 || mLastWimaxIconId != mWimaxIconId
Andrew Flynn0fa9d2d2012-05-31 15:39:15 -07001215 || mLastDataTypeIconId != mDataTypeIconId
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -07001216 || mLastAirplaneMode != mAirplaneMode
1217 || mLastLocale != mLocale)
Christian Robertson2e347422011-08-11 14:01:04 -07001218 {
1219 // NB: the mLast*s will be updated later
1220 for (SignalCluster cluster : mSignalClusters) {
Daniel Sandler0fee2172011-11-10 00:15:38 -05001221 refreshSignalCluster(cluster);
Christian Robertson2e347422011-08-11 14:01:04 -07001222 }
Winson Chungd63c59782012-09-05 17:34:41 -07001223 for (NetworkSignalChangedCallback cb : mSignalsChangedCallbacks) {
1224 notifySignalsChangedCallbacks(cb);
1225 }
Christian Robertson2e347422011-08-11 14:01:04 -07001226 }
1227
Andrew Flynn0fa9d2d2012-05-31 15:39:15 -07001228 if (mLastAirplaneMode != mAirplaneMode) {
1229 mLastAirplaneMode = mAirplaneMode;
1230 }
1231
Fabrice Di Meglio8afcd142012-07-27 18:27:11 -07001232 if (mLastLocale != mLocale) {
1233 mLastLocale = mLocale;
1234 }
1235
Joe Onoratoddbba422010-11-23 15:42:28 -08001236 // the phone icon on phones
Joe Onoratofd52b182010-11-10 18:00:52 -08001237 if (mLastPhoneSignalIconId != mPhoneSignalIconId) {
1238 mLastPhoneSignalIconId = mPhoneSignalIconId;
Joe Onoratoddbba422010-11-23 15:42:28 -08001239 N = mPhoneSignalIconViews.size();
Joe Onoratofd52b182010-11-10 18:00:52 -08001240 for (int i=0; i<N; i++) {
Joe Onoratoddbba422010-11-23 15:42:28 -08001241 final ImageView v = mPhoneSignalIconViews.get(i);
Daniel Sandler639ed752012-01-20 14:22:07 -05001242 if (mPhoneSignalIconId == 0) {
1243 v.setVisibility(View.GONE);
1244 } else {
1245 v.setVisibility(View.VISIBLE);
1246 v.setImageResource(mPhoneSignalIconId);
1247 v.setContentDescription(mContentDescriptionPhoneSignal);
1248 }
Joe Onoratofd52b182010-11-10 18:00:52 -08001249 }
1250 }
1251
Joe Onoratoddbba422010-11-23 15:42:28 -08001252 // the data icon on phones
1253 if (mLastDataDirectionIconId != mDataDirectionIconId) {
1254 mLastDataDirectionIconId = mDataDirectionIconId;
1255 N = mDataDirectionIconViews.size();
Joe Onoratofd52b182010-11-10 18:00:52 -08001256 for (int i=0; i<N; i++) {
Joe Onoratoddbba422010-11-23 15:42:28 -08001257 final ImageView v = mDataDirectionIconViews.get(i);
1258 v.setImageResource(mDataDirectionIconId);
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001259 v.setContentDescription(mContentDescriptionDataType);
Joe Onoratofd52b182010-11-10 18:00:52 -08001260 }
1261 }
1262
Joe Onoratoddbba422010-11-23 15:42:28 -08001263 // the wifi icon on phones
1264 if (mLastWifiIconId != mWifiIconId) {
1265 mLastWifiIconId = mWifiIconId;
1266 N = mWifiIconViews.size();
1267 for (int i=0; i<N; i++) {
1268 final ImageView v = mWifiIconViews.get(i);
Daniel Sandler2b697352011-07-22 16:23:09 -04001269 if (mWifiIconId == 0) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001270 v.setVisibility(View.GONE);
Daniel Sandler2b697352011-07-22 16:23:09 -04001271 } else {
1272 v.setVisibility(View.VISIBLE);
1273 v.setImageResource(mWifiIconId);
1274 v.setContentDescription(mContentDescriptionWifi);
1275 }
Joe Onoratoddbba422010-11-23 15:42:28 -08001276 }
1277 }
1278
tk.mun148c7d02011-10-13 22:51:57 +09001279 // the wimax icon on phones
1280 if (mLastWimaxIconId != mWimaxIconId) {
1281 mLastWimaxIconId = mWimaxIconId;
1282 N = mWimaxIconViews.size();
1283 for (int i=0; i<N; i++) {
1284 final ImageView v = mWimaxIconViews.get(i);
1285 if (mWimaxIconId == 0) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001286 v.setVisibility(View.GONE);
tk.mun148c7d02011-10-13 22:51:57 +09001287 } else {
1288 v.setVisibility(View.VISIBLE);
1289 v.setImageResource(mWimaxIconId);
1290 v.setContentDescription(mContentDescriptionWimax);
1291 }
1292 }
1293 }
Joe Onoratoddbba422010-11-23 15:42:28 -08001294 // the combined data signal icon
1295 if (mLastCombinedSignalIconId != combinedSignalIconId) {
1296 mLastCombinedSignalIconId = combinedSignalIconId;
1297 N = mCombinedSignalIconViews.size();
1298 for (int i=0; i<N; i++) {
1299 final ImageView v = mCombinedSignalIconViews.get(i);
1300 v.setImageResource(combinedSignalIconId);
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001301 v.setContentDescription(mContentDescriptionCombinedSignal);
Joe Onoratoddbba422010-11-23 15:42:28 -08001302 }
1303 }
1304
1305 // the data network type overlay
Daniel Sandler28f89d42011-08-15 14:04:15 -04001306 if (mLastDataTypeIconId != mDataTypeIconId) {
1307 mLastDataTypeIconId = mDataTypeIconId;
Joe Onoratoddbba422010-11-23 15:42:28 -08001308 N = mDataTypeIconViews.size();
1309 for (int i=0; i<N; i++) {
1310 final ImageView v = mDataTypeIconViews.get(i);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001311 if (mDataTypeIconId == 0) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001312 v.setVisibility(View.GONE);
Joe Onoratoddbba422010-11-23 15:42:28 -08001313 } else {
1314 v.setVisibility(View.VISIBLE);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001315 v.setImageResource(mDataTypeIconId);
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001316 v.setContentDescription(mContentDescriptionDataType);
Joe Onoratoddbba422010-11-23 15:42:28 -08001317 }
1318 }
1319 }
1320
Joe Onoratofce2bf32011-02-01 17:00:29 -08001321 // the data direction overlay
Daniel Sandler28f89d42011-08-15 14:04:15 -04001322 if (mLastDataDirectionOverlayIconId != combinedActivityIconId) {
Daniel Sandler8d5d19c2011-03-16 15:01:30 -04001323 if (DEBUG) {
Daniel Sandler28f89d42011-08-15 14:04:15 -04001324 Slog.d(TAG, "changing data overlay icon id to " + combinedActivityIconId);
Daniel Sandler8d5d19c2011-03-16 15:01:30 -04001325 }
Daniel Sandler28f89d42011-08-15 14:04:15 -04001326 mLastDataDirectionOverlayIconId = combinedActivityIconId;
Joe Onoratofce2bf32011-02-01 17:00:29 -08001327 N = mDataDirectionOverlayIconViews.size();
1328 for (int i=0; i<N; i++) {
1329 final ImageView v = mDataDirectionOverlayIconViews.get(i);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001330 if (combinedActivityIconId == 0) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001331 v.setVisibility(View.GONE);
Joe Onoratofce2bf32011-02-01 17:00:29 -08001332 } else {
1333 v.setVisibility(View.VISIBLE);
Daniel Sandler28f89d42011-08-15 14:04:15 -04001334 v.setImageResource(combinedActivityIconId);
Svetoslav Ganov6179ea32011-06-28 01:12:41 -07001335 v.setContentDescription(mContentDescriptionDataType);
Joe Onoratofce2bf32011-02-01 17:00:29 -08001336 }
1337 }
1338 }
1339
Daniel Sandler5962fd52012-01-11 14:57:04 -05001340 // the combinedLabel in the notification panel
1341 if (!mLastCombinedLabel.equals(combinedLabel)) {
1342 mLastCombinedLabel = combinedLabel;
1343 N = mCombinedLabelViews.size();
Joe Onoratofd52b182010-11-10 18:00:52 -08001344 for (int i=0; i<N; i++) {
Daniel Sandler5962fd52012-01-11 14:57:04 -05001345 TextView v = mCombinedLabelViews.get(i);
1346 v.setText(combinedLabel);
Joe Onoratofd52b182010-11-10 18:00:52 -08001347 }
1348 }
Daniel Sandler5962fd52012-01-11 14:57:04 -05001349
1350 // wifi label
1351 N = mWifiLabelViews.size();
1352 for (int i=0; i<N; i++) {
1353 TextView v = mWifiLabelViews.get(i);
Daniel Sandler3d32a242012-06-05 13:44:14 -04001354 v.setText(wifiLabel);
Daniel Sandler639ed752012-01-20 14:22:07 -05001355 if ("".equals(wifiLabel)) {
1356 v.setVisibility(View.GONE);
1357 } else {
1358 v.setVisibility(View.VISIBLE);
Daniel Sandler639ed752012-01-20 14:22:07 -05001359 }
Daniel Sandler5962fd52012-01-11 14:57:04 -05001360 }
John Wangd55cde12012-02-13 17:16:41 -08001361
Daniel Sandler5962fd52012-01-11 14:57:04 -05001362 // mobile label
1363 N = mMobileLabelViews.size();
1364 for (int i=0; i<N; i++) {
1365 TextView v = mMobileLabelViews.get(i);
Daniel Sandler3d32a242012-06-05 13:44:14 -04001366 v.setText(mobileLabel);
Daniel Sandler639ed752012-01-20 14:22:07 -05001367 if ("".equals(mobileLabel)) {
1368 v.setVisibility(View.GONE);
1369 } else {
1370 v.setVisibility(View.VISIBLE);
Daniel Sandler639ed752012-01-20 14:22:07 -05001371 }
Daniel Sandler5962fd52012-01-11 14:57:04 -05001372 }
Daniel Sandlerdd4ef492012-07-27 11:19:52 -04001373
1374 // e-call label
1375 N = mEmergencyLabelViews.size();
1376 for (int i=0; i<N; i++) {
1377 TextView v = mEmergencyLabelViews.get(i);
1378 if (!emergencyOnly) {
1379 v.setVisibility(View.GONE);
1380 } else {
1381 v.setText(mobileLabel); // comes from the telephony stack
1382 v.setVisibility(View.VISIBLE);
1383 }
1384 }
Joe Onoratofd52b182010-11-10 18:00:52 -08001385 }
Joe Onorato933464d2011-01-05 15:53:36 -08001386
1387 public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
Daniel Sandlerc49e1952011-09-20 10:45:53 -04001388 pw.println("NetworkController state:");
Casey Burkhardtbac221f2012-10-03 18:13:58 -07001389 pw.println(String.format(" %s network type %d (%s)",
Daniel Sandler67234c42012-06-15 13:17:39 -04001390 mConnected?"CONNECTED":"DISCONNECTED",
1391 mConnectedNetworkType, mConnectedNetworkTypeName));
Joe Onorato933464d2011-01-05 15:53:36 -08001392 pw.println(" - telephony ------");
Daniel Sandler8b268d42013-05-28 16:17:13 -04001393 pw.print(" hasVoiceCallingFeature()=");
1394 pw.println(hasVoiceCallingFeature());
Daniel Sandlerc49e1952011-09-20 10:45:53 -04001395 pw.print(" hasService()=");
1396 pw.println(hasService());
Joe Onorato933464d2011-01-05 15:53:36 -08001397 pw.print(" mHspaDataDistinguishable=");
1398 pw.println(mHspaDataDistinguishable);
1399 pw.print(" mDataConnected=");
1400 pw.println(mDataConnected);
1401 pw.print(" mSimState=");
1402 pw.println(mSimState);
1403 pw.print(" mPhoneState=");
1404 pw.println(mPhoneState);
1405 pw.print(" mDataState=");
1406 pw.println(mDataState);
1407 pw.print(" mDataActivity=");
1408 pw.println(mDataActivity);
Daniel Sandler89d97132011-09-08 15:31:57 -04001409 pw.print(" mDataNetType=");
1410 pw.print(mDataNetType);
1411 pw.print("/");
1412 pw.println(TelephonyManager.getNetworkTypeName(mDataNetType));
Joe Onorato933464d2011-01-05 15:53:36 -08001413 pw.print(" mServiceState=");
Robert Greenwaltacab04d2011-06-06 15:28:45 -07001414 pw.println(mServiceState);
Daniel Sandlerc49e1952011-09-20 10:45:53 -04001415 pw.print(" mSignalStrength=");
1416 pw.println(mSignalStrength);
1417 pw.print(" mLastSignalLevel=");
1418 pw.println(mLastSignalLevel);
Joe Onorato933464d2011-01-05 15:53:36 -08001419 pw.print(" mNetworkName=");
1420 pw.println(mNetworkName);
1421 pw.print(" mNetworkNameDefault=");
1422 pw.println(mNetworkNameDefault);
1423 pw.print(" mNetworkNameSeparator=");
Daniel Sandler89d97132011-09-08 15:31:57 -04001424 pw.println(mNetworkNameSeparator.replace("\n","\\n"));
Joe Onorato933464d2011-01-05 15:53:36 -08001425 pw.print(" mPhoneSignalIconId=0x");
1426 pw.print(Integer.toHexString(mPhoneSignalIconId));
1427 pw.print("/");
Winson Chunged1395f2012-09-13 18:13:44 -07001428 pw.print(" mQSPhoneSignalIconId=0x");
1429 pw.print(Integer.toHexString(mQSPhoneSignalIconId));
1430 pw.print("/");
Joe Onorato933464d2011-01-05 15:53:36 -08001431 pw.println(getResourceName(mPhoneSignalIconId));
1432 pw.print(" mDataDirectionIconId=");
1433 pw.print(Integer.toHexString(mDataDirectionIconId));
1434 pw.print("/");
1435 pw.println(getResourceName(mDataDirectionIconId));
1436 pw.print(" mDataSignalIconId=");
1437 pw.print(Integer.toHexString(mDataSignalIconId));
1438 pw.print("/");
1439 pw.println(getResourceName(mDataSignalIconId));
1440 pw.print(" mDataTypeIconId=");
1441 pw.print(Integer.toHexString(mDataTypeIconId));
1442 pw.print("/");
1443 pw.println(getResourceName(mDataTypeIconId));
Winson Chung4f49d942012-09-14 14:01:40 -07001444 pw.print(" mQSDataTypeIconId=");
1445 pw.print(Integer.toHexString(mQSDataTypeIconId));
1446 pw.print("/");
1447 pw.println(getResourceName(mQSDataTypeIconId));
Joe Onorato933464d2011-01-05 15:53:36 -08001448
1449 pw.println(" - wifi ------");
1450 pw.print(" mWifiEnabled=");
1451 pw.println(mWifiEnabled);
1452 pw.print(" mWifiConnected=");
1453 pw.println(mWifiConnected);
Daniel Sandler0d6ff0102011-10-19 21:02:37 -04001454 pw.print(" mWifiRssi=");
1455 pw.println(mWifiRssi);
Joe Onorato933464d2011-01-05 15:53:36 -08001456 pw.print(" mWifiLevel=");
1457 pw.println(mWifiLevel);
1458 pw.print(" mWifiSsid=");
1459 pw.println(mWifiSsid);
Daniel Sandler0fee2172011-11-10 00:15:38 -05001460 pw.println(String.format(" mWifiIconId=0x%08x/%s",
Daniel Sandler7c12eee2011-09-25 15:53:33 -04001461 mWifiIconId, getResourceName(mWifiIconId)));
Winson Chunged1395f2012-09-13 18:13:44 -07001462 pw.println(String.format(" mQSWifiIconId=0x%08x/%s",
1463 mQSWifiIconId, getResourceName(mQSWifiIconId)));
Joe Onoratof32621a2011-03-10 15:29:49 -08001464 pw.print(" mWifiActivity=");
1465 pw.println(mWifiActivity);
1466
Daniel Sandler0fee2172011-11-10 00:15:38 -05001467 if (mWimaxSupported) {
1468 pw.println(" - wimax ------");
1469 pw.print(" mIsWimaxEnabled="); pw.println(mIsWimaxEnabled);
1470 pw.print(" mWimaxConnected="); pw.println(mWimaxConnected);
1471 pw.print(" mWimaxIdle="); pw.println(mWimaxIdle);
1472 pw.println(String.format(" mWimaxIconId=0x%08x/%s",
1473 mWimaxIconId, getResourceName(mWimaxIconId)));
1474 pw.println(String.format(" mWimaxSignal=%d", mWimaxSignal));
1475 pw.println(String.format(" mWimaxState=%d", mWimaxState));
1476 pw.println(String.format(" mWimaxExtraState=%d", mWimaxExtraState));
1477 }
Joe Onorato933464d2011-01-05 15:53:36 -08001478
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -08001479 pw.println(" - Bluetooth ----");
Daniel Sandlerc49e1952011-09-20 10:45:53 -04001480 pw.print(" mBtReverseTethered=");
Jaikumar Ganeshfde7f0e2011-01-10 10:05:58 -08001481 pw.println(mBluetoothTethered);
1482
Joe Onorato933464d2011-01-05 15:53:36 -08001483 pw.println(" - connectivity ------");
1484 pw.print(" mInetCondition=");
1485 pw.println(mInetCondition);
1486
1487 pw.println(" - icons ------");
1488 pw.print(" mLastPhoneSignalIconId=0x");
1489 pw.print(Integer.toHexString(mLastPhoneSignalIconId));
1490 pw.print("/");
1491 pw.println(getResourceName(mLastPhoneSignalIconId));
1492 pw.print(" mLastDataDirectionIconId=0x");
1493 pw.print(Integer.toHexString(mLastDataDirectionIconId));
1494 pw.print("/");
1495 pw.println(getResourceName(mLastDataDirectionIconId));
Joe Onoratofce2bf32011-02-01 17:00:29 -08001496 pw.print(" mLastDataDirectionOverlayIconId=0x");
1497 pw.print(Integer.toHexString(mLastDataDirectionOverlayIconId));
1498 pw.print("/");
1499 pw.println(getResourceName(mLastDataDirectionOverlayIconId));
Joe Onorato933464d2011-01-05 15:53:36 -08001500 pw.print(" mLastWifiIconId=0x");
1501 pw.print(Integer.toHexString(mLastWifiIconId));
1502 pw.print("/");
1503 pw.println(getResourceName(mLastWifiIconId));
1504 pw.print(" mLastCombinedSignalIconId=0x");
1505 pw.print(Integer.toHexString(mLastCombinedSignalIconId));
1506 pw.print("/");
1507 pw.println(getResourceName(mLastCombinedSignalIconId));
1508 pw.print(" mLastDataTypeIconId=0x");
1509 pw.print(Integer.toHexString(mLastDataTypeIconId));
1510 pw.print("/");
Daniel Sandler0fee2172011-11-10 00:15:38 -05001511 pw.println(getResourceName(mLastDataTypeIconId));
Daniel Sandler5962fd52012-01-11 14:57:04 -05001512 pw.print(" mLastCombinedLabel=");
1513 pw.print(mLastCombinedLabel);
Daniel Sandlerc49e1952011-09-20 10:45:53 -04001514 pw.println("");
Joe Onorato933464d2011-01-05 15:53:36 -08001515 }
1516
1517 private String getResourceName(int resId) {
Daniel Sandler89d97132011-09-08 15:31:57 -04001518 if (resId != 0) {
Joe Onorato933464d2011-01-05 15:53:36 -08001519 final Resources res = mContext.getResources();
1520 try {
1521 return res.getResourceName(resId);
1522 } catch (android.content.res.Resources.NotFoundException ex) {
1523 return "(unknown)";
1524 }
1525 } else {
1526 return "(null)";
1527 }
1528 }
1529
Joe Onoratofd52b182010-11-10 18:00:52 -08001530}