NetworkControllerImpl.java revision 7f8f22a53005f776c8ee4d299e748e74b077ffd9
1af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock/* 2af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Copyright (C) 2010 The Android Open Source Project 3af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 4af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 5af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * you may not use this file except in compliance with the License. 6af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * You may obtain a copy of the License at 7af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 8af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * http://www.apache.org/licenses/LICENSE-2.0 9af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 10af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Unless required by applicable law or agreed to in writing, software 11af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 12af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * See the License for the specific language governing permissions and 14af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * limitations under the License. 15af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock */ 16af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 17af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockpackage com.android.systemui.statusbar.policy; 18af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 19af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.BroadcastReceiver; 20af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.Context; 21af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.Intent; 22af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.IntentFilter; 23af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.res.Resources; 24af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.net.ConnectivityManager; 25af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.net.NetworkInfo; 26af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.net.wifi.WifiConfiguration; 27af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.net.wifi.WifiInfo; 28af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.net.wifi.WifiManager; 29af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.net.wimax.WimaxManagerConstants; 30af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.os.AsyncTask; 31af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.os.Bundle; 32af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.os.Handler; 33af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.os.Message; 34af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.os.Messenger; 35af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.provider.Settings; 36af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.telephony.PhoneStateListener; 37af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.telephony.ServiceState; 38af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.telephony.SignalStrength; 39af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.telephony.TelephonyManager; 40af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.util.Log; 41af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.view.View; 42af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.widget.TextView; 43af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 44af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.internal.telephony.IccCardConstants; 45af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.internal.telephony.TelephonyIntents; 46af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.internal.telephony.cdma.EriInfo; 47af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.internal.util.AsyncChannel; 48af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.DemoMode; 49af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.R; 5059a6127551650e7307fd6e6e1b72c1c2377fac80Adrian Roosimport com.android.systemui.statusbar.phone.StatusBarHeaderView; 51af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 52af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport java.io.FileDescriptor; 53af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport java.io.PrintWriter; 54af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport java.util.ArrayList; 55af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport java.util.List; 56af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport java.util.Locale; 57af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 58af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock/** Platform implementation of the network controller. **/ 59af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockpublic class NetworkControllerImpl extends BroadcastReceiver 60af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock implements NetworkController, DemoMode { 61af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // debug 62af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock static final String TAG = "StatusBar.NetworkController"; 63af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock static final boolean DEBUG = false; 64af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock static final boolean CHATTY = false; // additional diagnostics, but not logspew 65af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 66af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private static final int FLIGHT_MODE_ICON = R.drawable.stat_sys_signal_flightmode; 67af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 68af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // telephony 69af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean mHspaDataDistinguishable; 70af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final TelephonyManager mPhone; 71af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean mDataConnected; 72af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock IccCardConstants.State mSimState = IccCardConstants.State.READY; 73af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mPhoneState = TelephonyManager.CALL_STATE_IDLE; 74af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mDataNetType = TelephonyManager.NETWORK_TYPE_UNKNOWN; 75af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mDataState = TelephonyManager.DATA_DISCONNECTED; 76af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mDataActivity = TelephonyManager.DATA_ACTIVITY_NONE; 77af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock ServiceState mServiceState; 78af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock SignalStrength mSignalStrength; 79af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int[] mDataIconList = TelephonyIcons.DATA_G[0]; 80af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mNetworkName; 81af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mNetworkNameDefault; 82af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mNetworkNameSeparator; 83af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mPhoneSignalIconId; 84af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mQSPhoneSignalIconId; 85af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mDataDirectionIconId; // data + data direction on phones 86af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mDataSignalIconId; 87af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mDataTypeIconId; 88af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mQSDataTypeIconId; 89af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mAirplaneIconId; 90af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean mDataActive; 91899f439a29ab1e609e7ba2aea3e9de3afef35c50John Spurlock boolean mNoSim; 92af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mLastSignalLevel; 93af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean mShowPhoneRSSIForData = false; 94af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean mShowAtLeastThreeGees = false; 95af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean mAlwaysShowCdmaRssi = false; 96af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 97af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mContentDescriptionPhoneSignal; 98af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mContentDescriptionWifi; 99af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mContentDescriptionWimax; 100af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mContentDescriptionCombinedSignal; 101af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mContentDescriptionDataType; 102af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 103af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // wifi 104af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final WifiManager mWifiManager; 105af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock AsyncChannel mWifiChannel; 106af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean mWifiEnabled, mWifiConnected; 107af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mWifiRssi, mWifiLevel; 108af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mWifiSsid; 109af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mWifiIconId = 0; 110af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mQSWifiIconId = 0; 111af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mWifiActivity = WifiManager.DATA_ACTIVITY_NONE; 112af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 113af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // bluetooth 114af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean mBluetoothTethered = false; 115af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mBluetoothTetherIconId = 116af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock com.android.internal.R.drawable.stat_sys_tether_bluetooth; 117af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 118af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock //wimax 119af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean mWimaxSupported = false; 120af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean mIsWimaxEnabled = false; 121af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean mWimaxConnected = false; 122af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean mWimaxIdle = false; 123af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mWimaxIconId = 0; 124af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mWimaxSignal = 0; 125af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mWimaxState = 0; 126af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mWimaxExtraState = 0; 127af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 128af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // data connectivity (regardless of state, can we access the internet?) 129af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // state of inet connection - 0 not connected, 100 connected 130af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean mConnected = false; 131af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mConnectedNetworkType = ConnectivityManager.TYPE_NONE; 132af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private String mConnectedNetworkTypeName; 133af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mInetCondition = 0; 134af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mLastInetCondition = 0; 135af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private static final int INET_CONDITION_THRESHOLD = 50; 136af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 137af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean mAirplaneMode = false; 138af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean mLastAirplaneMode = true; 139af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 140af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private Locale mLocale = null; 141af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private Locale mLastLocale = null; 142af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 143af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // our ui 144af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Context mContext; 145af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock ArrayList<TextView> mCombinedLabelViews = new ArrayList<TextView>(); 146af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock ArrayList<TextView> mMobileLabelViews = new ArrayList<TextView>(); 147af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock ArrayList<TextView> mWifiLabelViews = new ArrayList<TextView>(); 14859a6127551650e7307fd6e6e1b72c1c2377fac80Adrian Roos ArrayList<StatusBarHeaderView> mEmergencyViews = new ArrayList<>(); 149af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock ArrayList<SignalCluster> mSignalClusters = new ArrayList<SignalCluster>(); 150af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock ArrayList<NetworkSignalChangedCallback> mSignalsChangedCallbacks = 151af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock new ArrayList<NetworkSignalChangedCallback>(); 152af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mLastPhoneSignalIconId = -1; 153af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mLastDataDirectionIconId = -1; 154af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mLastWifiIconId = -1; 155af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mLastWimaxIconId = -1; 156af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mLastCombinedSignalIconId = -1; 157af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mLastDataTypeIconId = -1; 158af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mLastCombinedLabel = ""; 159af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 160af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean mHasMobileDataFeature; 161af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 162af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean mDataAndWifiStacked = false; 163af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 164af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public interface SignalCluster { 165af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock void setWifiIndicators(boolean visible, int strengthIcon, boolean problem, 166af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String contentDescription); 167af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock void setMobileDataIndicators(boolean visible, int strengthIcon, boolean problem, 168af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int typeIcon, String contentDescription, String typeContentDescription); 169af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock void setIsAirplaneMode(boolean is, int airplaneIcon); 170af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 171af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1727f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock private final WifiAccessPointController mAccessPoints; 1737f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 174af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock /** 175af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Construct this controller object and register for updates. 176af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock */ 177af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public NetworkControllerImpl(Context context) { 178af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContext = context; 179af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final Resources res = context.getResources(); 180af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 181af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService( 182af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Context.CONNECTIVITY_SERVICE); 183af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mHasMobileDataFeature = cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE); 184af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 185af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mShowPhoneRSSIForData = res.getBoolean(R.bool.config_showPhoneRSSIForData); 186af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mShowAtLeastThreeGees = res.getBoolean(R.bool.config_showMin3G); 187af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mAlwaysShowCdmaRssi = res.getBoolean( 188af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock com.android.internal.R.bool.config_alwaysUseCdmaRssi); 189af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 190af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // set up the default wifi icon, used when no radios have ever appeared 191af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateWifiIcons(); 192af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateWimaxIcons(); 193af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 194af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // telephony 195af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mPhone = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 196af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mPhone.listen(mPhoneStateListener, 197af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock PhoneStateListener.LISTEN_SERVICE_STATE 198af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS 199af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock | PhoneStateListener.LISTEN_CALL_STATE 200af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE 201af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock | PhoneStateListener.LISTEN_DATA_ACTIVITY); 202af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mHspaDataDistinguishable = mContext.getResources().getBoolean( 203af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.bool.config_hspa_data_distinguishable); 204af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mNetworkNameSeparator = mContext.getString(R.string.status_bar_network_name_separator); 205af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mNetworkNameDefault = mContext.getString( 206af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock com.android.internal.R.string.lockscreen_carrier_default); 207af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mNetworkName = mNetworkNameDefault; 208af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 209af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // wifi 210af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 211af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Handler handler = new WifiHandler(); 212af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiChannel = new AsyncChannel(); 213af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Messenger wifiMessenger = mWifiManager.getWifiServiceMessenger(); 214af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (wifiMessenger != null) { 215af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiChannel.connect(mContext, handler, wifiMessenger); 216af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 217af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 218af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // broadcasts 219af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock IntentFilter filter = new IntentFilter(); 220af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(WifiManager.RSSI_CHANGED_ACTION); 221af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 222af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 223af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); 224af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION); 225af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 226af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(ConnectivityManager.INET_CONDITION_ACTION); 227af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); 228af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); 229af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxSupported = mContext.getResources().getBoolean( 230af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock com.android.internal.R.bool.config_wimaxEnabled); 231af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if(mWimaxSupported) { 232af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION); 233af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION); 234af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock filter.addAction(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION); 235af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 236af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock context.registerReceiver(this, filter); 237af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 238af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // AIRPLANE_MODE_CHANGED is sent at boot; we've probably already missed it 239af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateAirplaneMode(); 240af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 241af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastLocale = mContext.getResources().getConfiguration().locale; 2427f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock mAccessPoints = new WifiAccessPointController(mContext); 243af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 244af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 245af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public boolean hasMobileDataFeature() { 246af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return mHasMobileDataFeature; 247af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 248af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 249af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public boolean hasVoiceCallingFeature() { 250af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return mPhone.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE; 251af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 252af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 253af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public boolean isEmergencyOnly() { 254af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return (mServiceState != null && mServiceState.isEmergencyOnly()); 255af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 256af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 257af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void addCombinedLabelView(TextView v) { 258af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mCombinedLabelViews.add(v); 259af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 260af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 261af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void addMobileLabelView(TextView v) { 262af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mMobileLabelViews.add(v); 263af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 264af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 265af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void addWifiLabelView(TextView v) { 266af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiLabelViews.add(v); 267af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 268af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 26959a6127551650e7307fd6e6e1b72c1c2377fac80Adrian Roos public void addEmergencyLabelView(StatusBarHeaderView v) { 27059a6127551650e7307fd6e6e1b72c1c2377fac80Adrian Roos mEmergencyViews.add(v); 271af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 272af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 273af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void addSignalCluster(SignalCluster cluster) { 274af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSignalClusters.add(cluster); 275af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshSignalCluster(cluster); 276af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 277af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 278af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void addNetworkSignalChangedCallback(NetworkSignalChangedCallback cb) { 279af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSignalsChangedCallbacks.add(cb); 280af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock notifySignalsChangedCallbacks(cb); 281af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 282af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 283af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void removeNetworkSignalChangedCallback(NetworkSignalChangedCallback cb) { 284af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSignalsChangedCallbacks.remove(cb); 285af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 286af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 287af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 2887f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public void addAccessPointCallback(AccessPointCallback callback) { 2897f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock mAccessPoints.addCallback(callback); 2907f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 2917f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 2927f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock @Override 2937f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public void removeAccessPointCallback(AccessPointCallback callback) { 2947f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock mAccessPoints.removeCallback(callback); 2957f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 2967f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 2977f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock @Override 2987f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public void scanForAccessPoints() { 2997f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock mAccessPoints.scan(); 3007f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 3017f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 3027f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock @Override 3037f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public void connect(AccessPoint ap) { 3047f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock mAccessPoints.connect(ap); 3057f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 3067f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 3077f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock @Override 308af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void setWifiEnabled(final boolean enabled) { 309af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock new AsyncTask<Void, Void, Void>() { 310af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 311af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock protected Void doInBackground(Void... args) { 312af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Disable tethering if enabling Wifi 313af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final int wifiApState = mWifiManager.getWifiApState(); 314af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (enabled && ((wifiApState == WifiManager.WIFI_AP_STATE_ENABLING) || 315af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock (wifiApState == WifiManager.WIFI_AP_STATE_ENABLED))) { 316af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiManager.setWifiApEnabled(null, false); 317af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 318af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 319af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiManager.setWifiEnabled(enabled); 320af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return null; 321af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 322af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock }.execute(); 323af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 324af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 325af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void refreshSignalCluster(SignalCluster cluster) { 326af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mDemoMode) return; 327af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cluster.setWifiIndicators( 328af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // only show wifi in the cluster if connected or if wifi-only 329af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature), 330af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiIconId, 331af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mInetCondition == 0, 332af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionWifi); 333af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 334af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mIsWimaxEnabled && mWimaxConnected) { 335af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // wimax is special 336af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cluster.setMobileDataIndicators( 337af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock true, 338af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mAlwaysShowCdmaRssi ? mPhoneSignalIconId : mWimaxIconId, 339af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mInetCondition == 0, 340af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId, 341af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionWimax, 342af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType); 343af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 344af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // normal mobile data 345af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cluster.setMobileDataIndicators( 346af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mHasMobileDataFeature, 347af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mShowPhoneRSSIForData ? mPhoneSignalIconId : mDataSignalIconId, 348af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mInetCondition == 0, 349af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId, 350af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionPhoneSignal, 351af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType); 352af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 353af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cluster.setIsAirplaneMode(mAirplaneMode, mAirplaneIconId); 354af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 355af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 356af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock void notifySignalsChangedCallbacks(NetworkSignalChangedCallback cb) { 357af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // only show wifi in the cluster if connected or if wifi-only 358af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean wifiEnabled = mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature); 359af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String wifiDesc = wifiEnabled ? 360af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiSsid : null; 361af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean wifiIn = wifiEnabled && mWifiSsid != null 362af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock && (mWifiActivity == WifiManager.DATA_ACTIVITY_INOUT 363af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || mWifiActivity == WifiManager.DATA_ACTIVITY_IN); 364af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean wifiOut = wifiEnabled && mWifiSsid != null 365af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock && (mWifiActivity == WifiManager.DATA_ACTIVITY_INOUT 366af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || mWifiActivity == WifiManager.DATA_ACTIVITY_OUT); 367a9cc0c035dcf6e7954faee18699e50e2d9d7578dJohn Spurlock cb.onWifiSignalChanged(mWifiEnabled, mQSWifiIconId, wifiIn, wifiOut, 368af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionWifi, wifiDesc); 369af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 370af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean mobileIn = mDataConnected && (mDataActivity == TelephonyManager.DATA_ACTIVITY_INOUT 371af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || mDataActivity == TelephonyManager.DATA_ACTIVITY_IN); 372af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean mobileOut = mDataConnected && (mDataActivity == TelephonyManager.DATA_ACTIVITY_INOUT 373af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || mDataActivity == TelephonyManager.DATA_ACTIVITY_OUT); 374af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (isEmergencyOnly()) { 375af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cb.onMobileDataSignalChanged(false, mQSPhoneSignalIconId, 376af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut, 377899f439a29ab1e609e7ba2aea3e9de3afef35c50John Spurlock mContentDescriptionDataType, null, mNoSim); 378af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 379af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mIsWimaxEnabled && mWimaxConnected) { 380af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Wimax is special 381af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cb.onMobileDataSignalChanged(true, mQSPhoneSignalIconId, 382af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut, 383899f439a29ab1e609e7ba2aea3e9de3afef35c50John Spurlock mContentDescriptionDataType, mNetworkName, mNoSim); 384af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 385af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Normal mobile data 386af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cb.onMobileDataSignalChanged(mHasMobileDataFeature, mQSPhoneSignalIconId, 387af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut, 388899f439a29ab1e609e7ba2aea3e9de3afef35c50John Spurlock mContentDescriptionDataType, mNetworkName, mNoSim); 389af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 390af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 391af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cb.onAirplaneModeChanged(mAirplaneMode); 392af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 393af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 394af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void setStackedMode(boolean stacked) { 395af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataAndWifiStacked = true; 396af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 397af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 398af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 399af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void onReceive(Context context, Intent intent) { 400af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final String action = intent.getAction(); 401af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (action.equals(WifiManager.RSSI_CHANGED_ACTION) 402af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION) 403af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { 404af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateWifiState(intent); 405af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 406af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { 407af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateSimState(intent); 408af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateDataIcon(); 409af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 410af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (action.equals(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION)) { 411af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateNetworkName(intent.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_SPN, false), 412af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock intent.getStringExtra(TelephonyIntents.EXTRA_SPN), 413af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock intent.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_PLMN, false), 414af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock intent.getStringExtra(TelephonyIntents.EXTRA_PLMN)); 415af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 416af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION) || 417af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock action.equals(ConnectivityManager.INET_CONDITION_ACTION)) { 418af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateConnectivity(intent); 419af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 420af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) { 421af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshLocale(); 422af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 423af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) { 424af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshLocale(); 425af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateAirplaneMode(); 426af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 427af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION) || 428af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION) || 429af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock action.equals(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION)) { 430af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateWimaxState(intent); 431af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 432af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 433af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 434af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 435af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 436af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // ===== Telephony ============================================================== 437af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 438af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock PhoneStateListener mPhoneStateListener = new PhoneStateListener() { 439af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 440af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void onSignalStrengthsChanged(SignalStrength signalStrength) { 441af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (DEBUG) { 442af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.d(TAG, "onSignalStrengthsChanged signalStrength=" + signalStrength + 443af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock ((signalStrength == null) ? "" : (" level=" + signalStrength.getLevel()))); 444af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 445af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSignalStrength = signalStrength; 446af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateTelephonySignalStrength(); 447af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 448af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 449af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 450af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 451af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void onServiceStateChanged(ServiceState state) { 452af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (DEBUG) { 453af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.d(TAG, "onServiceStateChanged voiceState=" + state.getVoiceRegState() 454af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " dataState=" + state.getDataRegState()); 455af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 456af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mServiceState = state; 457af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateTelephonySignalStrength(); 458af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateDataNetType(); 459af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateDataIcon(); 460af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 461af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 462af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 463af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 464af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void onCallStateChanged(int state, String incomingNumber) { 465af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (DEBUG) { 466af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.d(TAG, "onCallStateChanged state=" + state); 467af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 468af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // In cdma, if a voice call is made, RSSI should switch to 1x. 469af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (isCdma()) { 470af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateTelephonySignalStrength(); 471af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 472af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 473af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 474af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 475af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 476af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void onDataConnectionStateChanged(int state, int networkType) { 477af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (DEBUG) { 478af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.d(TAG, "onDataConnectionStateChanged: state=" + state 479af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " type=" + networkType); 480af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 481af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataState = state; 482af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataNetType = networkType; 483af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateDataNetType(); 484af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateDataIcon(); 485af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 486af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 487af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 488af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 489af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void onDataActivity(int direction) { 490af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (DEBUG) { 491af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.d(TAG, "onDataActivity: direction=" + direction); 492af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 493af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataActivity = direction; 494af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateDataIcon(); 495af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 496af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 497af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock }; 498af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 499af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final void updateSimState(Intent intent) { 500af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String stateExtra = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE); 501af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(stateExtra)) { 502af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSimState = IccCardConstants.State.ABSENT; 503af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 504af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock else if (IccCardConstants.INTENT_VALUE_ICC_READY.equals(stateExtra)) { 505af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSimState = IccCardConstants.State.READY; 506af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 507af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock else if (IccCardConstants.INTENT_VALUE_ICC_LOCKED.equals(stateExtra)) { 508af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final String lockedReason = 509af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock intent.getStringExtra(IccCardConstants.INTENT_KEY_LOCKED_REASON); 510af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (IccCardConstants.INTENT_VALUE_LOCKED_ON_PIN.equals(lockedReason)) { 511af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSimState = IccCardConstants.State.PIN_REQUIRED; 512af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 513af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock else if (IccCardConstants.INTENT_VALUE_LOCKED_ON_PUK.equals(lockedReason)) { 514af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSimState = IccCardConstants.State.PUK_REQUIRED; 515af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 516af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock else { 517af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSimState = IccCardConstants.State.NETWORK_LOCKED; 518af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 519af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 520af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSimState = IccCardConstants.State.UNKNOWN; 521af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 522af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 523af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 524af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean isCdma() { 525af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return (mSignalStrength != null) && !mSignalStrength.isGsm(); 526af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 527af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 528af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean hasService() { 529af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mServiceState != null) { 530af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Consider the device to be in service if either voice or data service is available. 531af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Some SIM cards are marketed as data-only and do not support voice service, and on 532af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // these SIM cards, we want to show signal bars for data service as well as the "no 533af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // service" or "emergency calls only" text that indicates that voice is not available. 534af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock switch(mServiceState.getVoiceRegState()) { 535af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case ServiceState.STATE_POWER_OFF: 536af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return false; 537af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case ServiceState.STATE_OUT_OF_SERVICE: 538af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case ServiceState.STATE_EMERGENCY_ONLY: 539af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return mServiceState.getDataRegState() == ServiceState.STATE_IN_SERVICE; 540af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock default: 541af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return true; 542af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 543af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 544af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return false; 545af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 546af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 547af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 548af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private void updateAirplaneMode() { 549af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mAirplaneMode = (Settings.Global.getInt(mContext.getContentResolver(), 550af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Settings.Global.AIRPLANE_MODE_ON, 0) == 1); 551af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 552af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 553af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private void refreshLocale() { 554af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLocale = mContext.getResources().getConfiguration().locale; 555af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 556af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 557af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final void updateTelephonySignalStrength() { 558af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (!hasService()) { 559af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (CHATTY) Log.d(TAG, "updateTelephonySignalStrength: !hasService()"); 560af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mPhoneSignalIconId = R.drawable.stat_sys_signal_null; 561af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSPhoneSignalIconId = R.drawable.ic_qs_signal_no_signal; 562af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataSignalIconId = R.drawable.stat_sys_signal_null; 563af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 564af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mSignalStrength == null) { 565af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (CHATTY) Log.d(TAG, "updateTelephonySignalStrength: mSignalStrength == null"); 566af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mPhoneSignalIconId = R.drawable.stat_sys_signal_null; 567af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSPhoneSignalIconId = R.drawable.ic_qs_signal_no_signal; 568af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataSignalIconId = R.drawable.stat_sys_signal_null; 569af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionPhoneSignal = mContext.getString( 570af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0]); 571af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 572af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int iconLevel; 573af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int[] iconList; 574af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (isCdma() && mAlwaysShowCdmaRssi) { 575af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastSignalLevel = iconLevel = mSignalStrength.getCdmaLevel(); 576af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if(DEBUG) Log.d(TAG, "mAlwaysShowCdmaRssi=" + mAlwaysShowCdmaRssi 577af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " set to cdmaLevel=" + mSignalStrength.getCdmaLevel() 578af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " instead of level=" + mSignalStrength.getLevel()); 579af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 580af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastSignalLevel = iconLevel = mSignalStrength.getLevel(); 581af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 582af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 583af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (isCdma()) { 584af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (isCdmaEri()) { 585af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[mInetCondition]; 586af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 587af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[mInetCondition]; 588af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 589af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 590af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Though mPhone is a Manager, this call is not an IPC 591af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mPhone.isNetworkRoaming()) { 592af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[mInetCondition]; 593af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 594af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[mInetCondition]; 595af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 596af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 597af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mPhoneSignalIconId = iconList[iconLevel]; 598af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSPhoneSignalIconId = 599af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[mInetCondition][iconLevel]; 600af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionPhoneSignal = mContext.getString( 601af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[iconLevel]); 602af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataSignalIconId = TelephonyIcons.DATA_SIGNAL_STRENGTH[mInetCondition][iconLevel]; 603af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 604af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 605af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 606af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 607af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final void updateDataNetType() { 608af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mIsWimaxEnabled && mWimaxConnected) { 609af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // wimax is a special 4g network not handled by telephony 610af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_4G[mInetCondition]; 611af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_4g; 612af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_4G[mInetCondition]; 613af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 614af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_4g); 615af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 616af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock switch (mDataNetType) { 617af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_UNKNOWN: 618af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (!mShowAtLeastThreeGees) { 619af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_G[mInetCondition]; 620af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = 0; 621af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = 0; 622af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 623af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_gprs); 624af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 625af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 626af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // fall through 627af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 628af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_EDGE: 629af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (!mShowAtLeastThreeGees) { 630af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_E[mInetCondition]; 631af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_e; 632af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_E[mInetCondition]; 633af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 634af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_edge); 635af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 636af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 637af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // fall through 638af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 639af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_UMTS: 640af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_3G[mInetCondition]; 641af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_3g; 642af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_3G[mInetCondition]; 643af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 644af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_3g); 645af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 646af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_HSDPA: 647af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_HSUPA: 648af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_HSPA: 649af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_HSPAP: 650af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mHspaDataDistinguishable) { 651af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_H[mInetCondition]; 652af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_h; 653af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_H[mInetCondition]; 654af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 655af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_3_5g); 656af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 657af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_3G[mInetCondition]; 658af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_3g; 659af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_3G[mInetCondition]; 660af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 661af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_3g); 662af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 663af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 664af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_CDMA: 665af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (!mShowAtLeastThreeGees) { 666af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // display 1xRTT for IS95A/B 667af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_1X[mInetCondition]; 668af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_1x; 669af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_1X[mInetCondition]; 670af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 671af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_cdma); 672af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 673af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 674af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // fall through 675af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 676af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_1xRTT: 677af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (!mShowAtLeastThreeGees) { 678af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_1X[mInetCondition]; 679af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_1x; 680af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_1X[mInetCondition]; 681af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 682af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_cdma); 683af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 684af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 685af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // fall through 686af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 687af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through 688af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_EVDO_A: 689af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_EVDO_B: 690af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_EHRPD: 691af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_3G[mInetCondition]; 692af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_3g; 693af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_3G[mInetCondition]; 694af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 695af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_3g); 696af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 697af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.NETWORK_TYPE_LTE: 698af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean show4GforLTE = mContext.getResources().getBoolean(R.bool.config_show4GForLTE); 699af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (show4GforLTE) { 700af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_4G[mInetCondition]; 701af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_4g; 702af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_4G[mInetCondition]; 703af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 704af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_4g); 705af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 706af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_LTE[mInetCondition]; 707af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_lte; 708af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_LTE[mInetCondition]; 709af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 710af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_lte); 711af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 712af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 713af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock default: 714af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (!mShowAtLeastThreeGees) { 715af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_G[mInetCondition]; 716af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_g; 717af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_G[mInetCondition]; 718af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 719af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_gprs); 720af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 721af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataIconList = TelephonyIcons.DATA_3G[mInetCondition]; 722af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_3g; 723af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_3G[mInetCondition]; 724af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionDataType = mContext.getString( 725af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_data_connection_3g); 726af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 727af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 728af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 729af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 730af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 731af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (isCdma()) { 732af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (isCdmaEri()) { 733af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_roam; 734af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_R[mInetCondition]; 735af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 736af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (mPhone.isNetworkRoaming()) { 737af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_roam; 738af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_R[mInetCondition]; 739af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 740af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 741af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 742af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean isCdmaEri() { 743af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mServiceState != null) { 744af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final int iconIndex = mServiceState.getCdmaEriIconIndex(); 745af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (iconIndex != EriInfo.ROAMING_INDICATOR_OFF) { 746af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final int iconMode = mServiceState.getCdmaEriIconMode(); 747af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (iconMode == EriInfo.ROAMING_ICON_MODE_NORMAL 748af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || iconMode == EriInfo.ROAMING_ICON_MODE_FLASH) { 749af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return true; 750af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 751af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 752af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 753af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return false; 754af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 755af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 756af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final void updateDataIcon() { 757af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int iconId; 758af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean visible = true; 759af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 760af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (!isCdma()) { 761af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // GSM case, we have to check also the sim state 762af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mSimState == IccCardConstants.State.READY || 763af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mSimState == IccCardConstants.State.UNKNOWN) { 764899f439a29ab1e609e7ba2aea3e9de3afef35c50John Spurlock mNoSim = false; 765af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (hasService() && mDataState == TelephonyManager.DATA_CONNECTED) { 766af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock switch (mDataActivity) { 767af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.DATA_ACTIVITY_IN: 768af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = mDataIconList[1]; 769af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 770af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.DATA_ACTIVITY_OUT: 771af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = mDataIconList[2]; 772af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 773af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.DATA_ACTIVITY_INOUT: 774af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = mDataIconList[3]; 775af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 776af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock default: 777af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = mDataIconList[0]; 778af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 779af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 780af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataDirectionIconId = iconId; 781af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 782af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = 0; 783af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock visible = false; 784af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 785af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 786af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = R.drawable.stat_sys_no_sim; 787899f439a29ab1e609e7ba2aea3e9de3afef35c50John Spurlock mNoSim = true; 788af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock visible = false; // no SIM? no data 789af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 790af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 791af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // CDMA case, mDataActivity can be also DATA_ACTIVITY_DORMANT 792af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (hasService() && mDataState == TelephonyManager.DATA_CONNECTED) { 793af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock switch (mDataActivity) { 794af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.DATA_ACTIVITY_IN: 795af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = mDataIconList[1]; 796af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 797af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.DATA_ACTIVITY_OUT: 798af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = mDataIconList[2]; 799af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 800af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.DATA_ACTIVITY_INOUT: 801af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = mDataIconList[3]; 802af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 803af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case TelephonyManager.DATA_ACTIVITY_DORMANT: 804af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock default: 805af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = mDataIconList[0]; 806af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 807af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 808af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 809af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId = 0; 810af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock visible = false; 811af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 812af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 813af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 814af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataDirectionIconId = iconId; 815af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataConnected = visible; 816af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 817af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 818af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock void updateNetworkName(boolean showSpn, String spn, boolean showPlmn, String plmn) { 819af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (false) { 820af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.d("CarrierLabel", "updateNetworkName showSpn=" + showSpn + " spn=" + spn 821af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " showPlmn=" + showPlmn + " plmn=" + plmn); 822af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 823af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock StringBuilder str = new StringBuilder(); 824af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean something = false; 825af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (showPlmn && plmn != null) { 826af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock str.append(plmn); 827af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock something = true; 828af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 829af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (showSpn && spn != null) { 830af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (something) { 831af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock str.append(mNetworkNameSeparator); 832af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 833af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock str.append(spn); 834af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock something = true; 835af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 836af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (something) { 837af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mNetworkName = str.toString(); 838af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 839af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mNetworkName = mNetworkNameDefault; 840af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 841af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 842af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 843af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // ===== Wifi =================================================================== 844af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 845af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock class WifiHandler extends Handler { 846af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 847af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void handleMessage(Message msg) { 848af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock switch (msg.what) { 849af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: 850af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { 851af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiChannel.sendMessage(Message.obtain(this, 852af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock AsyncChannel.CMD_CHANNEL_FULL_CONNECTION)); 853af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 854af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.e(TAG, "Failed to connect to wifi"); 855af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 856af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 857af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock case WifiManager.DATA_ACTIVITY_NOTIFICATION: 858af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (msg.arg1 != mWifiActivity) { 859af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiActivity = msg.arg1; 860af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshViews(); 861af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 862af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 863af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock default: 864af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock //Ignore 865af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock break; 866af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 867af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 868af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 869af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 870af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private void updateWifiState(Intent intent) { 871af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final String action = intent.getAction(); 872af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { 873af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiEnabled = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 874af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock WifiManager.WIFI_STATE_UNKNOWN) == WifiManager.WIFI_STATE_ENABLED; 875af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 876af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { 877af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final NetworkInfo networkInfo = (NetworkInfo) 878af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 879af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean wasConnected = mWifiConnected; 880af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiConnected = networkInfo != null && networkInfo.isConnected(); 881af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // If we just connected, grab the inintial signal strength and ssid 882af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mWifiConnected && !wasConnected) { 883af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // try getting it out of the intent first 884af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock WifiInfo info = (WifiInfo) intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO); 885af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (info == null) { 886af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock info = mWifiManager.getConnectionInfo(); 887af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 888af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (info != null) { 889af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiSsid = huntForSsid(info); 890af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 891af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiSsid = null; 892af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 893af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (!mWifiConnected) { 894af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiSsid = null; 895af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 896af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) { 897af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiRssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200); 898af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiLevel = WifiManager.calculateSignalLevel( 899af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiRssi, WifiIcons.WIFI_LEVEL_COUNT); 900af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 901af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 902af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateWifiIcons(); 903af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 904af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 905af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private void updateWifiIcons() { 906af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mWifiConnected) { 907af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiIconId = WifiIcons.WIFI_SIGNAL_STRENGTH[mInetCondition][mWifiLevel]; 908af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSWifiIconId = WifiIcons.QS_WIFI_SIGNAL_STRENGTH[mInetCondition][mWifiLevel]; 909af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionWifi = mContext.getString( 910af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH[mWifiLevel]); 911af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 912af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mDataAndWifiStacked) { 913af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiIconId = 0; 914af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSWifiIconId = 0; 915af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 916af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiIconId = mWifiEnabled ? R.drawable.stat_sys_wifi_signal_null : 0; 917af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSWifiIconId = mWifiEnabled ? R.drawable.ic_qs_wifi_no_network : 0; 918af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 919af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionWifi = mContext.getString(R.string.accessibility_no_wifi); 920af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 921af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 922af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 923af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private String huntForSsid(WifiInfo info) { 924af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String ssid = info.getSSID(); 925af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (ssid != null) { 926af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return ssid; 927af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 928af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // OK, it's not in the connectionInfo; we have to go hunting for it 929af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock List<WifiConfiguration> networks = mWifiManager.getConfiguredNetworks(); 930af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (WifiConfiguration net : networks) { 931af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (net.networkId == info.getNetworkId()) { 932af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return net.SSID; 933af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 934af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 935af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return null; 936af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 937af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 938af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 939af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // ===== Wimax =================================================================== 940af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final void updateWimaxState(Intent intent) { 941af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final String action = intent.getAction(); 942af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean wasConnected = mWimaxConnected; 943af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION)) { 944af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int wimaxStatus = intent.getIntExtra(WimaxManagerConstants.EXTRA_4G_STATE, 945af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock WimaxManagerConstants.NET_4G_STATE_UNKNOWN); 946af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mIsWimaxEnabled = (wimaxStatus == 947af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock WimaxManagerConstants.NET_4G_STATE_ENABLED); 948af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION)) { 949af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxSignal = intent.getIntExtra(WimaxManagerConstants.EXTRA_NEW_SIGNAL_LEVEL, 0); 950af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (action.equals(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION)) { 951af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxState = intent.getIntExtra(WimaxManagerConstants.EXTRA_WIMAX_STATE, 952af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock WimaxManagerConstants.NET_4G_STATE_UNKNOWN); 953af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxExtraState = intent.getIntExtra( 954af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock WimaxManagerConstants.EXTRA_WIMAX_STATE_DETAIL, 955af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock WimaxManagerConstants.NET_4G_STATE_UNKNOWN); 956af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxConnected = (mWimaxState == 957af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock WimaxManagerConstants.WIMAX_STATE_CONNECTED); 958af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxIdle = (mWimaxExtraState == WimaxManagerConstants.WIMAX_IDLE); 959af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 960af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateDataNetType(); 961af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateWimaxIcons(); 962af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 963af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 964af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private void updateWimaxIcons() { 965af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mIsWimaxEnabled) { 966af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mWimaxConnected) { 967af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mWimaxIdle) 968af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxIconId = WimaxIcons.WIMAX_IDLE; 969af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock else 970af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxIconId = WimaxIcons.WIMAX_SIGNAL_STRENGTH[mInetCondition][mWimaxSignal]; 971af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionWimax = mContext.getString( 972af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock AccessibilityContentDescriptions.WIMAX_CONNECTION_STRENGTH[mWimaxSignal]); 973af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 974af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxIconId = WimaxIcons.WIMAX_DISCONNECTED; 975af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionWimax = mContext.getString(R.string.accessibility_no_wimax); 976af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 977af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 978af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxIconId = 0; 979af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 980af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 981af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 982af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // ===== Full or limited Internet connectivity ================================== 983af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 984af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private void updateConnectivity(Intent intent) { 985af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (CHATTY) { 986af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.d(TAG, "updateConnectivity: intent=" + intent); 987af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 988af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 989af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final ConnectivityManager connManager = (ConnectivityManager) mContext 990af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock .getSystemService(Context.CONNECTIVITY_SERVICE); 991af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final NetworkInfo info = connManager.getActiveNetworkInfo(); 992af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 993af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Are we connected at all, by any interface? 994af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mConnected = info != null && info.isConnected(); 995af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mConnected) { 996af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mConnectedNetworkType = info.getType(); 997af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mConnectedNetworkTypeName = info.getTypeName(); 998af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 999af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mConnectedNetworkType = ConnectivityManager.TYPE_NONE; 1000af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mConnectedNetworkTypeName = null; 1001af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1002af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1003af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int connectionStatus = intent.getIntExtra(ConnectivityManager.EXTRA_INET_CONDITION, 0); 1004af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1005af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (CHATTY) { 1006af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.d(TAG, "updateConnectivity: networkInfo=" + info); 1007af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.d(TAG, "updateConnectivity: connectionStatus=" + connectionStatus); 1008af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1009af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1010af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mInetCondition = (connectionStatus > INET_CONDITION_THRESHOLD ? 1 : 0); 1011af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1012af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (info != null && info.getType() == ConnectivityManager.TYPE_BLUETOOTH) { 1013af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mBluetoothTethered = info.isConnected(); 1014af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1015af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mBluetoothTethered = false; 1016af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1017af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1018af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // We want to update all the icons, all at once, for any condition change 1019af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateDataNetType(); 1020af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateWimaxIcons(); 1021af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateDataIcon(); 1022af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateTelephonySignalStrength(); 1023af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock updateWifiIcons(); 1024af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1025af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1026af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1027af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // ===== Update the views ======================================================= 1028af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1029af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock void refreshViews() { 1030af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Context context = mContext; 1031af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1032af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int combinedSignalIconId = 0; 1033af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String combinedLabel = ""; 1034af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String wifiLabel = ""; 1035af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mobileLabel = ""; 1036af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int N; 1037af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final boolean emergencyOnly = isEmergencyOnly(); 1038af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1039af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (!mHasMobileDataFeature) { 1040af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataSignalIconId = mPhoneSignalIconId = 0; 1041af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSPhoneSignalIconId = 0; 1042af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mobileLabel = ""; 1043af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1044af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // We want to show the carrier name if in service and either: 1045af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // - We are connected to mobile data, or 1046af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // - We are not connected to mobile data, as long as the *reason* packets are not 1047af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // being routed over that link is that we have better connectivity via wifi. 1048af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // If data is disconnected for some other reason but wifi (or ethernet/bluetooth) 1049af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // is connected, we show nothing. 1050af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Otherwise (nothing connected) we show "No internet connection". 1051af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1052af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mDataConnected) { 1053af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mobileLabel = mNetworkName; 1054af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (mConnected || emergencyOnly) { 1055af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (hasService() || emergencyOnly) { 1056af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // The isEmergencyOnly test covers the case of a phone with no SIM 1057af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mobileLabel = mNetworkName; 1058af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1059af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Tablets, basically 1060af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mobileLabel = ""; 1061af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1062af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1063af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mobileLabel 1064af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock = context.getString(R.string.status_bar_settings_signal_meter_disconnected); 1065af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1066af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1067af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Now for things that should only be shown when actually using mobile data. 1068af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mDataConnected) { 1069af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedSignalIconId = mDataSignalIconId; 1070af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1071af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedLabel = mobileLabel; 1072af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedSignalIconId = mDataSignalIconId; // set by updateDataIcon() 1073af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionCombinedSignal = mContentDescriptionDataType; 1074af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1075af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1076af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1077af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mWifiConnected) { 1078af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mWifiSsid == null) { 1079af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock wifiLabel = context.getString(R.string.status_bar_settings_signal_meter_wifi_nossid); 1080af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1081af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock wifiLabel = mWifiSsid; 1082af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (DEBUG) { 1083af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock wifiLabel += "xxxxXXXXxxxxXXXX"; 1084af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1085af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1086af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1087af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedLabel = wifiLabel; 1088af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedSignalIconId = mWifiIconId; // set by updateWifiIcons() 1089af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionCombinedSignal = mContentDescriptionWifi; 1090af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1091af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mHasMobileDataFeature) { 1092af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock wifiLabel = ""; 1093af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1094af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock wifiLabel = context.getString(R.string.status_bar_settings_signal_meter_disconnected); 1095af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1096af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1097af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1098af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mBluetoothTethered) { 1099af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedLabel = mContext.getString(R.string.bluetooth_tethered); 1100af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedSignalIconId = mBluetoothTetherIconId; 1101af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionCombinedSignal = mContext.getString( 1102af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_bluetooth_tether); 1103af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1104af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1105af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final boolean ethernetConnected = (mConnectedNetworkType == ConnectivityManager.TYPE_ETHERNET); 1106af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (ethernetConnected) { 1107af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedLabel = context.getString(R.string.ethernet_label); 1108af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1109af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1110af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mAirplaneMode && 1111af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock (mServiceState == null || (!hasService() && !mServiceState.isEmergencyOnly()))) { 1112af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Only display the flight-mode icon if not in "emergency calls only" mode. 1113af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1114af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // look again; your radios are now airplanes 1115af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionPhoneSignal = mContext.getString( 1116af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_airplane_mode); 1117af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mAirplaneIconId = FLIGHT_MODE_ICON; 1118af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mPhoneSignalIconId = mDataSignalIconId = mDataTypeIconId = mQSDataTypeIconId = 0; 1119af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSPhoneSignalIconId = 0; 1120af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1121af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // combined values from connected wifi take precedence over airplane mode 1122af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mWifiConnected) { 1123af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // Suppress "No internet connection." from mobile if wifi connected. 1124af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mobileLabel = ""; 1125af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1126af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mHasMobileDataFeature) { 1127af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // let the mobile icon show "No internet connection." 1128af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock wifiLabel = ""; 1129af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1130af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock wifiLabel = context.getString(R.string.status_bar_settings_signal_meter_disconnected); 1131af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedLabel = wifiLabel; 1132af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1133af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionCombinedSignal = mContentDescriptionPhoneSignal; 1134af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedSignalIconId = mDataSignalIconId; 1135af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1136af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1137af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock else if (!mDataConnected && !mWifiConnected && !mBluetoothTethered && !mWimaxConnected && !ethernetConnected) { 1138af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // pretty much totally disconnected 1139af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1140af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedLabel = context.getString(R.string.status_bar_settings_signal_meter_disconnected); 1141af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // On devices without mobile radios, we want to show the wifi icon 1142af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock combinedSignalIconId = 1143af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mHasMobileDataFeature ? mDataSignalIconId : mWifiIconId; 1144af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContentDescriptionCombinedSignal = mHasMobileDataFeature 1145af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock ? mContentDescriptionDataType : mContentDescriptionWifi; 1146af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1147af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = 0; 1148af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = 0; 1149af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (isCdma()) { 1150af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (isCdmaEri()) { 1151af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_roam; 1152af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_R[mInetCondition]; 1153af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1154af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (mPhone.isNetworkRoaming()) { 1155af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_roam; 1156af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSDataTypeIconId = TelephonyIcons.QS_DATA_R[mInetCondition]; 1157af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1158af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1159af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1160af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (DEBUG) { 1161af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock Log.d(TAG, "refreshViews connected={" 1162af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + (mWifiConnected?" wifi":"") 1163af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + (mDataConnected?" data":"") 1164af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " } level=" 1165af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + ((mSignalStrength == null)?"??":Integer.toString(mSignalStrength.getLevel())) 1166af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " combinedSignalIconId=0x" 1167af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + Integer.toHexString(combinedSignalIconId) 1168af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + "/" + getResourceName(combinedSignalIconId) 1169af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mobileLabel=" + mobileLabel 1170af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " wifiLabel=" + wifiLabel 1171af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " emergencyOnly=" + emergencyOnly 1172af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " combinedLabel=" + combinedLabel 1173af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mAirplaneMode=" + mAirplaneMode 1174af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mDataActivity=" + mDataActivity 1175af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mPhoneSignalIconId=0x" + Integer.toHexString(mPhoneSignalIconId) 1176af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mQSPhoneSignalIconId=0x" + Integer.toHexString(mQSPhoneSignalIconId) 1177af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mDataDirectionIconId=0x" + Integer.toHexString(mDataDirectionIconId) 1178af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mDataSignalIconId=0x" + Integer.toHexString(mDataSignalIconId) 1179af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mDataTypeIconId=0x" + Integer.toHexString(mDataTypeIconId) 1180af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mQSDataTypeIconId=0x" + Integer.toHexString(mQSDataTypeIconId) 1181af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mWifiIconId=0x" + Integer.toHexString(mWifiIconId) 1182af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mQSWifiIconId=0x" + Integer.toHexString(mQSWifiIconId) 1183af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock + " mBluetoothTetherIconId=0x" + Integer.toHexString(mBluetoothTetherIconId)); 1184af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1185af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1186af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // update QS 1187af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (NetworkSignalChangedCallback cb : mSignalsChangedCallbacks) { 1188af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock notifySignalsChangedCallbacks(cb); 1189af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1190af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1191af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mLastPhoneSignalIconId != mPhoneSignalIconId 1192af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || mLastWifiIconId != mWifiIconId 1193af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || mLastInetCondition != mInetCondition 1194af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || mLastWimaxIconId != mWimaxIconId 1195af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || mLastDataTypeIconId != mDataTypeIconId 1196af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || mLastAirplaneMode != mAirplaneMode 1197af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock || mLastLocale != mLocale) 1198af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock { 1199af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // NB: the mLast*s will be updated later 1200af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (SignalCluster cluster : mSignalClusters) { 1201af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshSignalCluster(cluster); 1202af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1203af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1204af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1205af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mLastAirplaneMode != mAirplaneMode) { 1206af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastAirplaneMode = mAirplaneMode; 1207af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1208af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1209af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mLastLocale != mLocale) { 1210af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastLocale = mLocale; 1211af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1212af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1213af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // the phone icon on phones 1214af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mLastPhoneSignalIconId != mPhoneSignalIconId) { 1215af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastPhoneSignalIconId = mPhoneSignalIconId; 1216af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1217af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1218af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // the data icon on phones 1219af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mLastDataDirectionIconId != mDataDirectionIconId) { 1220af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastDataDirectionIconId = mDataDirectionIconId; 1221af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1222af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1223af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // the wifi icon on phones 1224af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mLastWifiIconId != mWifiIconId) { 1225af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastWifiIconId = mWifiIconId; 1226af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1227af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1228af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mLastInetCondition != mInetCondition) { 1229af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastInetCondition = mInetCondition; 1230af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1231af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1232af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // the wimax icon on phones 1233af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mLastWimaxIconId != mWimaxIconId) { 1234af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastWimaxIconId = mWimaxIconId; 1235af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1236af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // the combined data signal icon 1237af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mLastCombinedSignalIconId != combinedSignalIconId) { 1238af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastCombinedSignalIconId = combinedSignalIconId; 1239af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1240af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1241af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // the data network type overlay 1242af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mLastDataTypeIconId != mDataTypeIconId) { 1243af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastDataTypeIconId = mDataTypeIconId; 1244af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1245af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1246af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // the combinedLabel in the notification panel 1247af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (!mLastCombinedLabel.equals(combinedLabel)) { 1248af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mLastCombinedLabel = combinedLabel; 1249af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock N = mCombinedLabelViews.size(); 1250af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (int i=0; i<N; i++) { 1251af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock TextView v = mCombinedLabelViews.get(i); 1252af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock v.setText(combinedLabel); 1253af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1254af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1255af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1256af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // wifi label 1257af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock N = mWifiLabelViews.size(); 1258af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (int i=0; i<N; i++) { 1259af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock TextView v = mWifiLabelViews.get(i); 1260af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock v.setText(wifiLabel); 1261af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if ("".equals(wifiLabel)) { 1262af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock v.setVisibility(View.GONE); 1263af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1264af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock v.setVisibility(View.VISIBLE); 1265af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1266af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1267af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1268af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // mobile label 1269af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock N = mMobileLabelViews.size(); 1270af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (int i=0; i<N; i++) { 1271af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock TextView v = mMobileLabelViews.get(i); 1272af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock v.setText(mobileLabel); 1273af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if ("".equals(mobileLabel)) { 1274af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock v.setVisibility(View.GONE); 1275af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1276af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock v.setVisibility(View.VISIBLE); 1277af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1278af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1279af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1280af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // e-call label 128159a6127551650e7307fd6e6e1b72c1c2377fac80Adrian Roos N = mEmergencyViews.size(); 1282af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (int i=0; i<N; i++) { 128359a6127551650e7307fd6e6e1b72c1c2377fac80Adrian Roos StatusBarHeaderView v = mEmergencyViews.get(i); 128459a6127551650e7307fd6e6e1b72c1c2377fac80Adrian Roos v.setShowEmergencyCallsOnly(emergencyOnly); 1285af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1286af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1287af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1288af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 1289af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println("NetworkController state:"); 1290af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(String.format(" %s network type %d (%s)", 1291af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mConnected?"CONNECTED":"DISCONNECTED", 1292af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mConnectedNetworkType, mConnectedNetworkTypeName)); 1293af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(" - telephony ------"); 1294af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" hasVoiceCallingFeature()="); 1295af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(hasVoiceCallingFeature()); 1296af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" hasService()="); 1297af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(hasService()); 1298af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mHspaDataDistinguishable="); 1299af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mHspaDataDistinguishable); 1300af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mDataConnected="); 1301af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mDataConnected); 1302af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mSimState="); 1303af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mSimState); 1304af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mPhoneState="); 1305af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mPhoneState); 1306af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mDataState="); 1307af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mDataState); 1308af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mDataActivity="); 1309af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mDataActivity); 1310af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mDataNetType="); 1311af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(mDataNetType); 1312af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1313af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(TelephonyManager.getNetworkTypeName(mDataNetType)); 1314af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mServiceState="); 1315af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mServiceState); 1316af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mSignalStrength="); 1317af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mSignalStrength); 1318af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mLastSignalLevel="); 1319af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mLastSignalLevel); 1320af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mNetworkName="); 1321af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mNetworkName); 1322af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mNetworkNameDefault="); 1323af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mNetworkNameDefault); 1324af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mNetworkNameSeparator="); 1325af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mNetworkNameSeparator.replace("\n","\\n")); 1326af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mPhoneSignalIconId=0x"); 1327af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mPhoneSignalIconId)); 1328af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1329af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mQSPhoneSignalIconId=0x"); 1330af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mQSPhoneSignalIconId)); 1331af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1332af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(getResourceName(mPhoneSignalIconId)); 1333af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mDataDirectionIconId="); 1334af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mDataDirectionIconId)); 1335af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1336af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(getResourceName(mDataDirectionIconId)); 1337af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mDataSignalIconId="); 1338af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mDataSignalIconId)); 1339af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1340af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(getResourceName(mDataSignalIconId)); 1341af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mDataTypeIconId="); 1342af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mDataTypeIconId)); 1343af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1344af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(getResourceName(mDataTypeIconId)); 1345af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mQSDataTypeIconId="); 1346af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mQSDataTypeIconId)); 1347af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1348af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(getResourceName(mQSDataTypeIconId)); 1349af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1350af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(" - wifi ------"); 1351af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mWifiEnabled="); 1352af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mWifiEnabled); 1353af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mWifiConnected="); 1354af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mWifiConnected); 1355af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mWifiRssi="); 1356af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mWifiRssi); 1357af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mWifiLevel="); 1358af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mWifiLevel); 1359af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mWifiSsid="); 1360af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mWifiSsid); 1361af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(String.format(" mWifiIconId=0x%08x/%s", 1362af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWifiIconId, getResourceName(mWifiIconId))); 1363af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(String.format(" mQSWifiIconId=0x%08x/%s", 1364af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mQSWifiIconId, getResourceName(mQSWifiIconId))); 1365af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mWifiActivity="); 1366af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mWifiActivity); 1367af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1368af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mWimaxSupported) { 1369af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(" - wimax ------"); 1370af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mIsWimaxEnabled="); pw.println(mIsWimaxEnabled); 1371af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mWimaxConnected="); pw.println(mWimaxConnected); 1372af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mWimaxIdle="); pw.println(mWimaxIdle); 1373af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(String.format(" mWimaxIconId=0x%08x/%s", 1374af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mWimaxIconId, getResourceName(mWimaxIconId))); 1375af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(String.format(" mWimaxSignal=%d", mWimaxSignal)); 1376af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(String.format(" mWimaxState=%d", mWimaxState)); 1377af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(String.format(" mWimaxExtraState=%d", mWimaxExtraState)); 1378af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1379af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1380af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(" - Bluetooth ----"); 1381af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mBtReverseTethered="); 1382af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mBluetoothTethered); 1383af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1384af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(" - connectivity ------"); 1385af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mInetCondition="); 1386af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(mInetCondition); 1387af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1388af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(" - icons ------"); 1389af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mLastPhoneSignalIconId=0x"); 1390af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mLastPhoneSignalIconId)); 1391af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1392af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(getResourceName(mLastPhoneSignalIconId)); 1393af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mLastDataDirectionIconId=0x"); 1394af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mLastDataDirectionIconId)); 1395af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1396af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(getResourceName(mLastDataDirectionIconId)); 1397af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mLastWifiIconId=0x"); 1398af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mLastWifiIconId)); 1399af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1400af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(getResourceName(mLastWifiIconId)); 1401af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mLastCombinedSignalIconId=0x"); 1402af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mLastCombinedSignalIconId)); 1403af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1404af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(getResourceName(mLastCombinedSignalIconId)); 1405af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mLastDataTypeIconId=0x"); 1406af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(Integer.toHexString(mLastDataTypeIconId)); 1407af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print("/"); 1408af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(getResourceName(mLastDataTypeIconId)); 1409af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(" mLastCombinedLabel="); 1410af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.print(mLastCombinedLabel); 1411af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock pw.println(""); 1412af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1413af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1414af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private String getResourceName(int resId) { 1415af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (resId != 0) { 1416af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final Resources res = mContext.getResources(); 1417af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock try { 1418af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return res.getResourceName(resId); 1419af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } catch (android.content.res.Resources.NotFoundException ex) { 1420af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return "(unknown)"; 1421af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1422af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 1423af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return "(null)"; 1424af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1425af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1426af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1427af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private boolean mDemoMode; 1428af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mDemoInetCondition; 1429af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mDemoWifiLevel; 1430af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mDemoDataTypeIconId; 1431af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private int mDemoMobileLevel; 1432af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 1433af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 1434af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void dispatchDemoCommand(String command, Bundle args) { 1435af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (!mDemoMode && command.equals(COMMAND_ENTER)) { 1436af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoMode = true; 1437af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoWifiLevel = mWifiLevel; 1438af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoInetCondition = mInetCondition; 1439af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoDataTypeIconId = mDataTypeIconId; 1440af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoMobileLevel = mLastSignalLevel; 1441af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (mDemoMode && command.equals(COMMAND_EXIT)) { 1442af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoMode = false; 1443af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (SignalCluster cluster : mSignalClusters) { 1444af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshSignalCluster(cluster); 1445af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1446af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (mDemoMode && command.equals(COMMAND_NETWORK)) { 1447af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String airplane = args.getString("airplane"); 1448af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (airplane != null) { 1449af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean show = airplane.equals("show"); 1450af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (SignalCluster cluster : mSignalClusters) { 1451af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cluster.setIsAirplaneMode(show, FLIGHT_MODE_ICON); 1452af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1453af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1454af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String fully = args.getString("fully"); 1455af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (fully != null) { 1456af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoInetCondition = Boolean.parseBoolean(fully) ? 1 : 0; 1457af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1458af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String wifi = args.getString("wifi"); 1459af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (wifi != null) { 1460af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean show = wifi.equals("show"); 1461af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String level = args.getString("level"); 1462af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (level != null) { 1463af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoWifiLevel = level.equals("null") ? -1 1464af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock : Math.min(Integer.parseInt(level), WifiIcons.WIFI_LEVEL_COUNT - 1); 1465af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1466af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int iconId = mDemoWifiLevel < 0 ? R.drawable.stat_sys_wifi_signal_null 1467af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock : WifiIcons.WIFI_SIGNAL_STRENGTH[mDemoInetCondition][mDemoWifiLevel]; 1468af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (SignalCluster cluster : mSignalClusters) { 1469af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cluster.setWifiIndicators( 1470af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock show, 1471af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId, 1472af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoInetCondition == 0, 1473af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock "Demo"); 1474af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1475af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1476af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mobile = args.getString("mobile"); 1477af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (mobile != null) { 1478af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean show = mobile.equals("show"); 1479af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String datatype = args.getString("datatype"); 1480af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (datatype != null) { 1481af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoDataTypeIconId = 1482af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock datatype.equals("1x") ? R.drawable.stat_sys_data_fully_connected_1x : 1483af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock datatype.equals("3g") ? R.drawable.stat_sys_data_fully_connected_3g : 1484af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock datatype.equals("4g") ? R.drawable.stat_sys_data_fully_connected_4g : 1485af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock datatype.equals("e") ? R.drawable.stat_sys_data_fully_connected_e : 1486af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock datatype.equals("g") ? R.drawable.stat_sys_data_fully_connected_g : 1487af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock datatype.equals("h") ? R.drawable.stat_sys_data_fully_connected_h : 1488af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock datatype.equals("lte") ? R.drawable.stat_sys_data_fully_connected_lte : 1489af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock datatype.equals("roam") 1490af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock ? R.drawable.stat_sys_data_fully_connected_roam : 1491af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 0; 1492af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1493af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int[][] icons = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH; 1494af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String level = args.getString("level"); 1495af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (level != null) { 1496af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoMobileLevel = level.equals("null") ? -1 1497af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock : Math.min(Integer.parseInt(level), icons[0].length - 1); 1498af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1499af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int iconId = mDemoMobileLevel < 0 ? R.drawable.stat_sys_signal_null : 1500af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock icons[mDemoInetCondition][mDemoMobileLevel]; 1501af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (SignalCluster cluster : mSignalClusters) { 1502af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock cluster.setMobileDataIndicators( 1503af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock show, 1504af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock iconId, 1505af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoInetCondition == 0, 1506af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mDemoDataTypeIconId, 1507af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock "Demo", 1508af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock "Demo"); 1509af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1510af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1511af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1512af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 1513af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock} 1514