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