19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.server.status; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.AlertDialog; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.bluetooth.BluetoothA2dp; 21bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pellyimport android.bluetooth.BluetoothAdapter; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.bluetooth.BluetoothHeadset; 233f41673265dcaaef058703311c5481e8a51fd8beJiafa Liuimport android.bluetooth.BluetoothPbap; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.BroadcastReceiver; 250e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandlerimport android.content.ContentResolver; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.DialogInterface; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.IntentFilter; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.PixelFormat; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.AudioManager; 340e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandlerimport android.media.Ringtone; 350e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandlerimport android.media.RingtoneManager; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.NetworkInfo; 370e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandlerimport android.net.Uri; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.wifi.WifiManager; 394840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackbornimport android.os.Binder; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Message; 434840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackbornimport android.os.RemoteException; 444154c07c5cabc74029a2df379075391d782a682cSan Mehatimport android.os.storage.StorageManager; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.provider.Settings; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.PhoneStateListener; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.ServiceState; 48e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.telephony.SignalStrength; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.TelephonyManager; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.format.DateFormat; 5136e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischerimport android.text.style.RelativeSizeSpan; 5236e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischerimport android.text.Spannable; 5336e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischerimport android.text.SpannableStringBuilder; 548a9b22056b13477f59df934928c00c58b5871c95Joe Onoratoimport android.util.Slog; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.WindowManager; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.WindowManagerImpl; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.ImageView; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.LinearLayout; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TextView; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.R; 6404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.app.IBatteryStats; 6504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.location.GpsLocationProvider; 6604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.IccCard; 6704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.TelephonyIntents; 68e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport com.android.internal.telephony.cdma.EriInfo; 6904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.cdma.TtyIntent; 7004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.server.am.BatteryStatsService; 7104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 7236e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischerimport java.text.SimpleDateFormat; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Calendar; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.TimeZone; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class contains all of the policy about which icons are installed in the status 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * bar at boot time. In reality, it should go into the android.policy package, but 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * putting it here is the first step from extracting it. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class StatusBarPolicy { 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "StatusBarPolicy"; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static StatusBarPolicy sInstance; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // message codes for the handler 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int EVENT_BATTERY_CLOSE = 4; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 894840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn private final Context mContext; 904840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn private final StatusBarService mService; 914840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn private final Handler mHandler = new StatusBarHandler(); 924840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn private final IBatteryStats mBatteryStats; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // clock 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Calendar mCalendar; 9663ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato private String mClockFormatString; 9763ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato private SimpleDateFormat mClockFormat; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mClockIcon; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconData mClockData; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1014154c07c5cabc74029a2df379075391d782a682cSan Mehat // storage 1024154c07c5cabc74029a2df379075391d782a682cSan Mehat private StorageManager mStorageManager; 1034154c07c5cabc74029a2df379075391d782a682cSan Mehat 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // battery 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mBatteryIcon; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconData mBatteryData; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mBatteryFirst = true; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mBatteryPlugged; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mBatteryLevel; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AlertDialog mLowBatteryDialog; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private TextView mBatteryLevelTextView; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private View mBatteryView; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mBatteryViewSequence; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mBatteryShowLowOnEndCall = false; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final boolean SHOW_LOW_BATTERY_WARNING = true; 1160e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler private static final boolean SHOW_BATTERY_WARNINGS_IN_CALL = true; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // phone 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private TelephonyManager mPhone; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mPhoneIcon; 12104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 12204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville //***** Signal strength icons 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconData mPhoneData; 12404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville //GSM/UMTS 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int[] sSignalImages = new int[] { 126e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_signal_0, 127e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_signal_1, 128e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_signal_2, 129e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_signal_3, 130e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_signal_4 131e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville }; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int[] sSignalImages_r = new int[] { 133e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_r_signal_0, 134e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_r_signal_1, 135e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_r_signal_2, 136e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_r_signal_3, 137e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_r_signal_4 138e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville }; 139e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private static final int[] sRoamingIndicatorImages_cdma = new int[] { 140e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, //Standard Roaming Indicator 141e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // 1 is Standard Roaming Indicator OFF 142e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // TODO T: image never used, remove and put 0 instead? 143e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 144e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 145e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // 2 is Standard Roaming Indicator FLASHING 146e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // TODO T: image never used, remove and put 0 instead? 147e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 148e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 149e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // 3-12 Standard ERI 150e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, //3 151e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 152e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 153e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 154e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 155e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 156e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 157e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 158e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 159e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 160e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 161e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // 13-63 Reserved for Standard ERI 162e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, //13 163e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 164e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 165e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 166e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 167e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 168e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 169e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 170e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 171e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 172e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 173e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 174e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 175e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 176e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 177e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 178e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 179e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 180e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 181e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 182e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 183e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 184e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 185e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 186e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 187e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 188e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 189e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 190e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 191e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 192e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 193e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 194e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 195e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 196e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 197e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 198e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 199e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 200e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 201e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 202e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 203e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 204e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 205e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 206e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 207e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 208e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 209e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 210e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 211e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 212e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 213e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 214e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // 64-127 Reserved for Non Standard (Operator Specific) ERI 215e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, //64 216e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 217e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 218e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 219e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 220e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 221e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 222e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 223e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 224e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 225e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 226e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 227e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 228e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 229e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 230e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 231e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 232e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 233e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 234e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_0 //83 235e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 236e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // 128-255 Reserved 23704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville }; 23804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 23904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville //***** Data connection icons 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int[] mDataIconList = sDataNetType_g; 24104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville //GSM/UMTS 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int[] sDataNetType_g = new int[] { 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_connected_g, 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_in_g, 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_out_g, 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_inandout_g, 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int[] sDataNetType_3g = new int[] { 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_connected_3g, 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_in_3g, 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_out_3g, 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_inandout_3g, 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int[] sDataNetType_e = new int[] { 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_connected_e, 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_in_e, 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_out_e, 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_data_inandout_e, 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 260ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe //3.5G 261ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe private static final int[] sDataNetType_h = new int[] { 262ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe com.android.internal.R.drawable.stat_sys_data_connected_h, 263ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe com.android.internal.R.drawable.stat_sys_data_in_h, 264ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe com.android.internal.R.drawable.stat_sys_data_out_h, 265ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe com.android.internal.R.drawable.stat_sys_data_inandout_h, 266ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe }; 267ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe 26804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville //CDMA 2699f87cb2f8d796f57054c1c0f0ce4b9bef9414642johnwang // Use 3G icons for EVDO data and 1x icons for 1XRTT data 2709f87cb2f8d796f57054c1c0f0ce4b9bef9414642johnwang private static final int[] sDataNetType_1x = new int[] { 2719f87cb2f8d796f57054c1c0f0ce4b9bef9414642johnwang com.android.internal.R.drawable.stat_sys_data_connected_1x, 2729f87cb2f8d796f57054c1c0f0ce4b9bef9414642johnwang com.android.internal.R.drawable.stat_sys_data_in_1x, 2739f87cb2f8d796f57054c1c0f0ce4b9bef9414642johnwang com.android.internal.R.drawable.stat_sys_data_out_1x, 2749f87cb2f8d796f57054c1c0f0ce4b9bef9414642johnwang com.android.internal.R.drawable.stat_sys_data_inandout_1x, 27504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville }; 27604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Assume it's all good unless we hear otherwise. We don't always seem 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // to get broadcasts that it *is* there. 27904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville IccCard.State mSimState = IccCard.State.READY; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mPhoneState = TelephonyManager.CALL_STATE_IDLE; 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mDataState = TelephonyManager.DATA_DISCONNECTED; 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mDataActivity = TelephonyManager.DATA_ACTIVITY_NONE; 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServiceState mServiceState; 284e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville SignalStrength mSignalStrength; 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // data connection 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mDataIcon; 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconData mDataData; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mDataIconVisible; 29033e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang private boolean mHspaDataDistinguishable; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ringer volume 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mVolumeIcon; 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconData mVolumeData; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mVolumeVisible; 29604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // bluetooth device status 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mBluetoothIcon; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconData mBluetoothData; 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mBluetoothHeadsetState; 301084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh private boolean mBluetoothA2dpConnected; 3023f41673265dcaaef058703311c5481e8a51fd8beJiafa Liu private int mBluetoothPbapState; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mBluetoothEnabled; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // wifi 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int[] sWifiSignalImages = new int[] { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_wifi_signal_1, 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_wifi_signal_2, 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_wifi_signal_3, 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_wifi_signal_4, 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int sWifiTemporarilyNotConnectedImage = 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.stat_sys_wifi_signal_0; 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mLastWifiSignalLevel = -1; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsWifiConnected = false; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mWifiIcon; 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconData mWifiData; 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // gps 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mGpsIcon; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconData mGpsEnabledIconData; 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconData mGpsFixIconData; 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // alarm clock 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Icon lit when clock is set 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mAlarmClockIcon; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconData mAlarmClockIconData; 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // sync state 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If sync is active the SyncActive icon is displayed. If sync is not active but 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // sync is failing the SyncFailing icon is displayed. Otherwise neither are displayed. 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mSyncActiveIcon; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mSyncFailingIcon; 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville // TTY mode 33704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville // Icon lit when TTY mode is enabled 33804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville private IBinder mTTYModeIcon; 33904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville private IconData mTTYModeEnableIconData; 34004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 341e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // Cdma Roaming Indicator, ERI 342e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private IBinder mCdmaRoamingIndicatorIcon; 343e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private IconData mCdmaRoamingIndicatorIconData; 344e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onReceive(Context context, Intent intent) { 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String action = intent.getAction(); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (action.equals(Intent.ACTION_TIME_TICK)) { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateClock(); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (action.equals(Intent.ACTION_TIME_CHANGED)) { 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateClock(); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3558ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn else if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { 3568ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn updateBattery(intent); 3578ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn } 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) { 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateClock(); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) { 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String tz = intent.getStringExtra("time-zone"); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalendar = Calendar.getInstance(TimeZone.getTimeZone(tz)); 364c4938fd6190e04a454e8a10d4cba95ab6b805e71Amith Yamasani if (mClockFormat != null) { 365c4938fd6190e04a454e8a10d4cba95ab6b805e71Amith Yamasani mClockFormat.setTimeZone(mCalendar.getTimeZone()); 366c4938fd6190e04a454e8a10d4cba95ab6b805e71Amith Yamasani } 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateClock(); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (action.equals(Intent.ACTION_ALARM_CHANGED)) { 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateAlarm(intent); 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (action.equals(Intent.ACTION_SYNC_STATE_CHANGED)) { 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateSyncState(intent); 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 375a82842f98d64897e92e1012404863f940bd03d26Mihai Preda else if (action.equals(Intent.ACTION_BATTERY_LOW)) { 376a82842f98d64897e92e1012404863f940bd03d26Mihai Preda onBatteryLow(intent); 377a82842f98d64897e92e1012404863f940bd03d26Mihai Preda } 37869eb0bfcce7ec68a9771dbcf53434dfbca183d0cMike Lockwood else if (action.equals(Intent.ACTION_BATTERY_OKAY) 37969eb0bfcce7ec68a9771dbcf53434dfbca183d0cMike Lockwood || action.equals(Intent.ACTION_POWER_CONNECTED)) { 3808ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn onBatteryOkay(intent); 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 382de893f550301a60274e87aa8168225e7a7a42184Nick Pelly else if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED) || 383005b228cdfb369d9b3b325884c0337ba5968bf8cNick Pelly action.equals(BluetoothHeadset.ACTION_STATE_CHANGED) || 384005b228cdfb369d9b3b325884c0337ba5968bf8cNick Pelly action.equals(BluetoothA2dp.ACTION_SINK_STATE_CHANGED) || 3853f41673265dcaaef058703311c5481e8a51fd8beJiafa Liu action.equals(BluetoothPbap.PBAP_STATE_CHANGED_ACTION)) { 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateBluetooth(intent); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION) || 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION) || 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project action.equals(WifiManager.RSSI_CHANGED_ACTION)) { 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateWifi(intent); 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (action.equals(GpsLocationProvider.GPS_ENABLED_CHANGE_ACTION) || 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project action.equals(GpsLocationProvider.GPS_FIX_CHANGE_ACTION)) { 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateGps(intent); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION) || 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project action.equals(AudioManager.VIBRATE_SETTING_CHANGED_ACTION)) { 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateVolume(); 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateSimState(intent); 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville else if (action.equals(TtyIntent.TTY_ENABLED_CHANGE_ACTION)) { 40504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville updateTTY(intent); 40604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville } 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private StatusBarPolicy(Context context, StatusBarService service) { 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext = context; 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = service; 413e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mSignalStrength = new SignalStrength(); 4144840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn mBatteryStats = BatteryStatsService.getService(); 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // clock 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalendar = Calendar.getInstance(TimeZone.getDefault()); 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mClockData = IconData.makeText("clock", ""); 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mClockIcon = service.addIcon(mClockData, null); 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateClock(); 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4224154c07c5cabc74029a2df379075391d782a682cSan Mehat // storage 4234154c07c5cabc74029a2df379075391d782a682cSan Mehat mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); 4244154c07c5cabc74029a2df379075391d782a682cSan Mehat mStorageManager.registerListener( 4254154c07c5cabc74029a2df379075391d782a682cSan Mehat new com.android.server.status.StorageNotification(context)); 4264154c07c5cabc74029a2df379075391d782a682cSan Mehat 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // battery 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryData = IconData.makeIcon("battery", 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, com.android.internal.R.drawable.stat_sys_battery_unknown, 0, 0); 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryIcon = service.addIcon(mBatteryData, null); 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // phone_signal 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPhone = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 434e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mPhoneData = IconData.makeIcon("phone_signal", 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, com.android.internal.R.drawable.stat_sys_signal_null, 0, 0); 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPhoneIcon = service.addIcon(mPhoneData, null); 437e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // register for phone state notifications. 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ((TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE)) 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .listen(mPhoneStateListener, 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PhoneStateListener.LISTEN_SERVICE_STATE 442e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | PhoneStateListener.LISTEN_CALL_STATE 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | PhoneStateListener.LISTEN_DATA_ACTIVITY); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // data_connection 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataData = IconData.makeIcon("data_connection", 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, com.android.internal.R.drawable.stat_sys_data_connected_g, 0, 0); 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataIcon = service.addIcon(mDataData, null); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project service.setIconVisibility(mDataIcon, false); 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // wifi 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWifiData = IconData.makeIcon("wifi", null, sWifiSignalImages[0], 0, 0); 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWifiIcon = service.addIcon(mWifiData, null); 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project service.setIconVisibility(mWifiIcon, false); 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // wifi will get updated by the sticky intents 45804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 45904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville // TTY status 46004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mTTYModeEnableIconData = IconData.makeIcon("tty", 46104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville null, com.android.internal.R.drawable.stat_sys_tty_mode, 0, 0); 46204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mTTYModeIcon = service.addIcon(mTTYModeEnableIconData, null); 46304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville service.setIconVisibility(mTTYModeIcon, false); 46404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 465e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // Cdma Roaming Indicator, ERI 466e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mCdmaRoamingIndicatorIconData = IconData.makeIcon("cdma_eri", 467e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville null, com.android.internal.R.drawable.stat_sys_roaming_cdma_0, 0, 0); 468e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mCdmaRoamingIndicatorIcon = service.addIcon(mCdmaRoamingIndicatorIconData, null); 469e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville service.setIconVisibility(mCdmaRoamingIndicatorIcon, false); 470e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // bluetooth status 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBluetoothData = IconData.makeIcon("bluetooth", 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, com.android.internal.R.drawable.stat_sys_data_bluetooth, 0, 0); 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBluetoothIcon = service.addIcon(mBluetoothData, null); 475f242b7b931898856bcbcb7ec36cacf43098ba544Nick Pelly BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); 476bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly if (adapter != null) { 477bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly mBluetoothEnabled = adapter.isEnabled(); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBluetoothEnabled = false; 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 481084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh mBluetoothA2dpConnected = false; 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBluetoothHeadsetState = BluetoothHeadset.STATE_DISCONNECTED; 4833f41673265dcaaef058703311c5481e8a51fd8beJiafa Liu mBluetoothPbapState = BluetoothPbap.STATE_DISCONNECTED; 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setIconVisibility(mBluetoothIcon, mBluetoothEnabled); 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Gps status 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mGpsEnabledIconData = IconData.makeIcon("gps", 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, com.android.internal.R.drawable.stat_sys_gps_acquiring_anim, 0, 0); 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mGpsFixIconData = IconData.makeIcon("gps", 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, com.android.internal.R.drawable.stat_sys_gps_on, 0, 0); 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mGpsIcon = service.addIcon(mGpsEnabledIconData, null); 492347c5a22a915df5aa180573573adf6b2213a35dcjohnwang service.setIconVisibility(mGpsIcon, false); 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Alarm clock 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAlarmClockIconData = IconData.makeIcon( 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "alarm_clock", 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, com.android.internal.R.drawable.stat_notify_alarm, 0, 0); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAlarmClockIcon = service.addIcon(mAlarmClockIconData, null); 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project service.setIconVisibility(mAlarmClockIcon, false); 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Sync state 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSyncActiveIcon = service.addIcon(IconData.makeIcon("sync_active", 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, R.drawable.stat_notify_sync_anim0, 0, 0), null); 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSyncFailingIcon = service.addIcon(IconData.makeIcon("sync_failing", 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, R.drawable.stat_notify_sync_error, 0, 0), null); 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project service.setIconVisibility(mSyncActiveIcon, false); 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project service.setIconVisibility(mSyncFailingIcon, false); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // volume 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVolumeData = IconData.makeIcon("volume", 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, com.android.internal.R.drawable.stat_sys_ringer_silent, 0, 0); 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVolumeIcon = service.addIcon(mVolumeData, null); 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project service.setIconVisibility(mVolumeIcon, false); 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateVolume(); 515347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IntentFilter filter = new IntentFilter(); 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Register for Intent broadcasts for... 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(Intent.ACTION_TIME_TICK); 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(Intent.ACTION_TIME_CHANGED); 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(Intent.ACTION_BATTERY_CHANGED); 523a82842f98d64897e92e1012404863f940bd03d26Mihai Preda filter.addAction(Intent.ACTION_BATTERY_LOW); 5248ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn filter.addAction(Intent.ACTION_BATTERY_OKAY); 52569eb0bfcce7ec68a9771dbcf53434dfbca183d0cMike Lockwood filter.addAction(Intent.ACTION_POWER_CONNECTED); 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(Intent.ACTION_ALARM_CHANGED); 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(Intent.ACTION_SYNC_STATE_CHANGED); 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(AudioManager.VIBRATE_SETTING_CHANGED_ACTION); 531de893f550301a60274e87aa8168225e7a7a42184Nick Pelly filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); 532005b228cdfb369d9b3b325884c0337ba5968bf8cNick Pelly filter.addAction(BluetoothHeadset.ACTION_STATE_CHANGED); 533005b228cdfb369d9b3b325884c0337ba5968bf8cNick Pelly filter.addAction(BluetoothA2dp.ACTION_SINK_STATE_CHANGED); 5343f41673265dcaaef058703311c5481e8a51fd8beJiafa Liu filter.addAction(BluetoothPbap.PBAP_STATE_CHANGED_ACTION); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(WifiManager.RSSI_CHANGED_ACTION); 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(GpsLocationProvider.GPS_ENABLED_CHANGE_ACTION); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(GpsLocationProvider.GPS_FIX_CHANGE_ACTION); 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); 54204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville filter.addAction(TtyIntent.TTY_ENABLED_CHANGE_ACTION); 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext.registerReceiver(mIntentReceiver, filter, null, mHandler); 54433e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang 54533e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang // load config to determine if to distinguish Hspa data icon 54633e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang try { 54733e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang mHspaDataDistinguishable = mContext.getResources().getBoolean( 54833e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang com.android.internal.R.bool.config_hspa_data_distinguishable); 54933e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang } catch (Exception e) { 55033e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang mHspaDataDistinguishable = false; 55133e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang } 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void installIcons(Context context, StatusBarService service) { 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sInstance = new StatusBarPolicy(context, service); 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 55836e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer private final CharSequence getSmallTime() { 55936e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer boolean b24 = DateFormat.is24HourFormat(mContext); 56036e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer int res; 56136e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 56236e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer if (b24) { 56336e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer res = R.string.twenty_four_hour_time_format; 56436e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer } else { 56536e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer res = R.string.twelve_hour_time_format; 56636e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer } 56736e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 56863ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato final char MAGIC1 = '\uEF00'; 56963ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato final char MAGIC2 = '\uEF01'; 57036e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 57163ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato SimpleDateFormat sdf; 57263ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato String format = mContext.getString(res); 57363ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato if (!format.equals(mClockFormatString)) { 57463ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato /* 57563ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato * Search for an unquoted "a" in the format string, so we can 57663ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato * add dummy characters around it to let us find it again after 57763ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato * formatting and change its size. 57863ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato */ 57963ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato int a = -1; 58063ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato boolean quoted = false; 58163ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato for (int i = 0; i < format.length(); i++) { 58263ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato char c = format.charAt(i); 58363ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato 58463ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato if (c == '\'') { 58563ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato quoted = !quoted; 58663ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato } 58763ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato 58863ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato if (!quoted && c == 'a') { 58963ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato a = i; 59063ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato break; 59163ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato } 59236e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer } 59336e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 59463ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato if (a >= 0) { 59563ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato // Move a back so any whitespace before the AM/PM is also in the alternate size. 59663ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato final int b = a; 59763ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato while (a > 0 && Character.isWhitespace(format.charAt(a-1))) { 59863ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato a--; 59963ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato } 60063ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato format = format.substring(0, a) + MAGIC1 + format.substring(a, b) 60163ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato + "a" + MAGIC2 + format.substring(b + 1); 60236e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer } 60336e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 60463ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato mClockFormat = sdf = new SimpleDateFormat(format); 60563ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato mClockFormatString = format; 60663ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato } else { 60763ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato sdf = mClockFormat; 60836e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer } 60963ce8e817c9b800b4f08b64c343e533783961b6eJoe Onorato String result = sdf.format(mCalendar.getTime()); 61036e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 61136e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer int magic1 = result.indexOf(MAGIC1); 61236e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer int magic2 = result.indexOf(MAGIC2); 61336e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 61436e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer if (magic1 >= 0 && magic2 > magic1) { 61536e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer SpannableStringBuilder formatted = new SpannableStringBuilder(result); 61636e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 61736e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer formatted.setSpan(new RelativeSizeSpan(0.7f), magic1, magic2, 61836e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer Spannable.SPAN_EXCLUSIVE_INCLUSIVE); 61936e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 62036e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer formatted.delete(magic2, magic2 + 1); 62136e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer formatted.delete(magic1, magic1 + 1); 62236e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 62336e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer return formatted; 62436e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer } else { 62536e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer return result; 62636e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer } 62736e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer } 62836e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateClock() { 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalendar.setTimeInMillis(System.currentTimeMillis()); 63136e136c2c86f39f03cdd4275f07deb30dc2c95aaEric Fischer mClockData.text = getSmallTime(); 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mClockIcon, mClockData, null); 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateAlarm(Intent intent) { 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean alarmSet = intent.getBooleanExtra("alarmSet", false); 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setIconVisibility(mAlarmClockIcon, alarmSet); 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateSyncState(Intent intent) { 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isActive = intent.getBooleanExtra("active", false); 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isFailing = intent.getBooleanExtra("failing", false); 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setIconVisibility(mSyncActiveIcon, isActive); 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Don't display sync failing icon: BUG 1297963 Set sync error timeout to "never" 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //mService.setIconVisibility(mSyncFailingIcon, isFailing && !isActive); 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateBattery(Intent intent) { 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryData.iconId = intent.getIntExtra("icon-small", 0); 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryData.iconLevel = intent.getIntExtra("level", 0); 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mBatteryIcon, mBatteryData, null); 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean plugged = intent.getIntExtra("plugged", 0) != 0; 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int level = intent.getIntExtra("level", -1); 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (false) { 6568a9b22056b13477f59df934928c00c58b5871c95Joe Onorato Slog.d(TAG, "updateBattery level=" + level 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " plugged=" + plugged 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " mBatteryPlugged=" + mBatteryPlugged 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " mBatteryLevel=" + mBatteryLevel 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " mBatteryFirst=" + mBatteryFirst); 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean oldPlugged = mBatteryPlugged; 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryPlugged = plugged; 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryLevel = level; 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mBatteryFirst) { 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryFirst = false; 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * No longer showing the battery view because it draws attention away 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from the USB storage notification. We could still show it when 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * connected to a brick, but that could lead to the user into thinking 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the device does not charge when plugged into USB (since he/she would 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not see the same battery screen on USB as he sees on brick). 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* else { 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (plugged && !oldPlugged) { 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project showBatteryView(); 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (false) { 6858a9b22056b13477f59df934928c00c58b5871c95Joe Onorato Slog.d(TAG, "plugged=" + plugged + " oldPlugged=" + oldPlugged + " level=" + level); 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 687a82842f98d64897e92e1012404863f940bd03d26Mihai Preda } 688a82842f98d64897e92e1012404863f940bd03d26Mihai Preda 689a82842f98d64897e92e1012404863f940bd03d26Mihai Preda private void onBatteryLow(Intent intent) { 690a82842f98d64897e92e1012404863f940bd03d26Mihai Preda if (SHOW_LOW_BATTERY_WARNING) { 691a82842f98d64897e92e1012404863f940bd03d26Mihai Preda if (false) { 6928a9b22056b13477f59df934928c00c58b5871c95Joe Onorato Slog.d(TAG, "mPhoneState=" + mPhoneState 693a82842f98d64897e92e1012404863f940bd03d26Mihai Preda + " mLowBatteryDialog=" + mLowBatteryDialog 694a82842f98d64897e92e1012404863f940bd03d26Mihai Preda + " mBatteryShowLowOnEndCall=" + mBatteryShowLowOnEndCall); 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 696a82842f98d64897e92e1012404863f940bd03d26Mihai Preda 6970e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler if (SHOW_BATTERY_WARNINGS_IN_CALL || mPhoneState == TelephonyManager.CALL_STATE_IDLE) { 698a82842f98d64897e92e1012404863f940bd03d26Mihai Preda showLowBatteryWarning(); 699a82842f98d64897e92e1012404863f940bd03d26Mihai Preda } else { 700a82842f98d64897e92e1012404863f940bd03d26Mihai Preda mBatteryShowLowOnEndCall = true; 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7058ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn private void onBatteryOkay(Intent intent) { 7068ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn if (mLowBatteryDialog != null 7078ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn && SHOW_LOW_BATTERY_WARNING) { 7088ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn mLowBatteryDialog.dismiss(); 7098ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn mBatteryShowLowOnEndCall = false; 7108ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn } 7118ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn } 7128ec5b83fc8f8aa68805c4d5987f8f75bb28250caDianne Hackborn 713347c5a22a915df5aa180573573adf6b2213a35dcjohnwang private void showBatteryView() { 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project closeLastBatteryView(); 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mLowBatteryDialog != null) { 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLowBatteryDialog.dismiss(); 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int level = mBatteryLevel; 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View v = View.inflate(mContext, com.android.internal.R.layout.battery_status, null); 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryView = v; 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pixelFormat = PixelFormat.TRANSLUCENT; 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Drawable bg = v.getBackground(); 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bg != null) { 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pixelFormat = bg.getOpacity(); 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729568cae571a3d74d1992176a21722e07b44e9a3c4Dianne Hackborn int flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 730568cae571a3d74d1992176a21722e07b44e9a3c4Dianne Hackborn | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE 731568cae571a3d74d1992176a21722e07b44e9a3c4Dianne Hackborn | WindowManager.LayoutParams.FLAG_DIM_BEHIND; 732084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh 733568cae571a3d74d1992176a21722e07b44e9a3c4Dianne Hackborn if (!mContext.getResources().getBoolean( 734568cae571a3d74d1992176a21722e07b44e9a3c4Dianne Hackborn com.android.internal.R.bool.config_sf_slowBlur)) { 735568cae571a3d74d1992176a21722e07b44e9a3c4Dianne Hackborn flags |= WindowManager.LayoutParams.FLAG_BLUR_BEHIND; 736568cae571a3d74d1992176a21722e07b44e9a3c4Dianne Hackborn } 737084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WindowManager.LayoutParams lp = new WindowManager.LayoutParams( 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ViewGroup.LayoutParams.WRAP_CONTENT, 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ViewGroup.LayoutParams.WRAP_CONTENT, 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WindowManager.LayoutParams.TYPE_TOAST, 742568cae571a3d74d1992176a21722e07b44e9a3c4Dianne Hackborn flags, pixelFormat); 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get the dim amount from the theme 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = mContext.obtainStyledAttributes( 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.Theme); 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lp.dimAmount = a.getFloat(android.R.styleable.Theme_backgroundDimAmount, 0.5f); 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 74904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lp.setTitle("Battery"); 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextView levelTextView = (TextView)v.findViewById(com.android.internal.R.id.level_percent); 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project levelTextView.setText(mContext.getString( 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.string.battery_status_text_percent_format, level)); 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setBatteryLevel(v, com.android.internal.R.id.spacer, 100-level, 0, 0); 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setBatteryLevel(v, com.android.internal.R.id.level, level, 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.drawable.battery_charge_fill, level); 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WindowManagerImpl.getDefault().addView(v, lp); 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project scheduleCloseBatteryView(); 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setBatteryLevel(View parent, int id, int height, int background, int level) { 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ImageView v = (ImageView)parent.findViewById(id); 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)v.getLayoutParams(); 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lp.weight = height; 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (background != 0) { 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.setBackgroundResource(background); 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Drawable bkg = v.getBackground(); 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bkg.setLevel(level); 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void showLowBatteryWarning() { 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project closeLastBatteryView(); 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779d81b1f41e5e7bf0ccd3e4c08838d65eacdc8dda0Mike Lockwood // Show exact battery level. 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence levelText = mContext.getString( 781d81b1f41e5e7bf0ccd3e4c08838d65eacdc8dda0Mike Lockwood com.android.internal.R.string.battery_low_percent_format, mBatteryLevel); 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mBatteryLevelTextView != null) { 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryLevelTextView.setText(levelText); 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View v = View.inflate(mContext, com.android.internal.R.layout.battery_low, null); 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryLevelTextView=(TextView)v.findViewById(com.android.internal.R.id.level_percent); 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryLevelTextView.setText(levelText); 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AlertDialog.Builder b = new AlertDialog.Builder(mContext); 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.setCancelable(true); 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.setTitle(com.android.internal.R.string.battery_low_title); 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.setView(v); 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.setIcon(android.R.drawable.ic_dialog_alert); 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.setPositiveButton(android.R.string.ok, null); 797347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 7983d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn final Intent intent = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY); 7993d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 8003d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn | Intent.FLAG_ACTIVITY_MULTIPLE_TASK 8013d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 8023d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn | Intent.FLAG_ACTIVITY_NO_HISTORY); 8033d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn if (intent.resolveActivity(mContext.getPackageManager()) != null) { 8043d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn b.setNegativeButton(com.android.internal.R.string.battery_low_why, 8053d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn new DialogInterface.OnClickListener() { 8063d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn public void onClick(DialogInterface dialog, int which) { 8073d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn mContext.startActivity(intent); 8083d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn if (mLowBatteryDialog != null) { 8093d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn mLowBatteryDialog.dismiss(); 8103d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn } 8113d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn } 8123d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn }); 8133d74bb4ab27ae9601f5c9c3706fad287845fb672Dianne Hackborn } 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AlertDialog d = b.create(); 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project d.setOnDismissListener(mLowBatteryListener); 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project d.show(); 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLowBatteryDialog = d; 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8210e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler 8220e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler final ContentResolver cr = mContext.getContentResolver(); 8230e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler if (Settings.System.getInt(cr, 82456c2d2ff27536a1d8edf0037cd41ff3ea3272fd9John Wang Settings.System.POWER_SOUNDS_ENABLED, 1) == 1) 8250e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler { 8260e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler final String soundPath = Settings.System.getString(cr, 8270e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler Settings.System.LOW_BATTERY_SOUND); 8280e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler if (soundPath != null) { 8290e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler final Uri soundUri = Uri.parse("file://" + soundPath); 8300e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler if (soundUri != null) { 8310e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri); 832ec2c88d835dac156be0d14bd2b73cf3825e2e164Daniel Sandler if (sfx != null) { 833ec2c88d835dac156be0d14bd2b73cf3825e2e164Daniel Sandler sfx.setStreamType(AudioManager.STREAM_SYSTEM); 834ec2c88d835dac156be0d14bd2b73cf3825e2e164Daniel Sandler sfx.play(); 835ec2c88d835dac156be0d14bd2b73cf3825e2e164Daniel Sandler } 8360e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler } 8370e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler } 8380e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler } 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateCallState(int state) { 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPhoneState = state; 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (false) { 8448a9b22056b13477f59df934928c00c58b5871c95Joe Onorato Slog.d(TAG, "mPhoneState=" + mPhoneState 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " mLowBatteryDialog=" + mLowBatteryDialog 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " mBatteryShowLowOnEndCall=" + mBatteryShowLowOnEndCall); 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPhoneState == TelephonyManager.CALL_STATE_IDLE) { 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mBatteryShowLowOnEndCall) { 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mBatteryPlugged) { 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project showLowBatteryWarning(); 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryShowLowOnEndCall = false; 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mLowBatteryDialog != null) { 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLowBatteryDialog.dismiss(); 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryShowLowOnEndCall = true; 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private DialogInterface.OnDismissListener mLowBatteryListener 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new DialogInterface.OnDismissListener() { 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onDismiss(DialogInterface dialog) { 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLowBatteryDialog = null; 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryLevelTextView = null; 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void scheduleCloseBatteryView() { 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = mHandler.obtainMessage(EVENT_BATTERY_CLOSE); 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = (++mBatteryViewSequence); 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.sendMessageDelayed(m, 3000); 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void closeLastBatteryView() { 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mBatteryView != null) { 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //mBatteryView.debug(); 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WindowManagerImpl.getDefault().removeView(mBatteryView); 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBatteryView = null; 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PhoneStateListener mPhoneStateListener = new PhoneStateListener() { 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 887e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void onSignalStrengthsChanged(SignalStrength signalStrength) { 888e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mSignalStrength = signalStrength; 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateSignalStrength(); 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onServiceStateChanged(ServiceState state) { 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mServiceState = state; 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateSignalStrength(); 89698e0b146b80670b52805b4b210ef5582dad6bb68Robert Greenwalt updateCdmaRoamingIcon(state); 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateDataIcon(); 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onCallStateChanged(int state, String incomingNumber) { 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateCallState(state); 903347c5a22a915df5aa180573573adf6b2213a35dcjohnwang // In cdma, if a voice call is made, RSSI should switch to 1x. 904347c5a22a915df5aa180573573adf6b2213a35dcjohnwang if (isCdma()) { 905347c5a22a915df5aa180573573adf6b2213a35dcjohnwang updateSignalStrength(); 906347c5a22a915df5aa180573573adf6b2213a35dcjohnwang } 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 91098e0b146b80670b52805b4b210ef5582dad6bb68Robert Greenwalt public void onDataConnectionStateChanged(int state, int networkType) { 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataState = state; 91298e0b146b80670b52805b4b210ef5582dad6bb68Robert Greenwalt updateDataNetType(networkType); 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateDataIcon(); 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onDataActivity(int direction) { 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataActivity = direction; 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateDataIcon(); 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateSimState(Intent intent) { 92404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville String stateExtra = intent.getStringExtra(IccCard.INTENT_KEY_ICC_STATE); 92504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (IccCard.INTENT_VALUE_ICC_ABSENT.equals(stateExtra)) { 92604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mSimState = IccCard.State.ABSENT; 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 92804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville else if (IccCard.INTENT_VALUE_ICC_READY.equals(stateExtra)) { 92904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mSimState = IccCard.State.READY; 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 93104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville else if (IccCard.INTENT_VALUE_ICC_LOCKED.equals(stateExtra)) { 93204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville final String lockedReason = intent.getStringExtra(IccCard.INTENT_KEY_LOCKED_REASON); 93304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (IccCard.INTENT_VALUE_LOCKED_ON_PIN.equals(lockedReason)) { 93404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mSimState = IccCard.State.PIN_REQUIRED; 935347c5a22a915df5aa180573573adf6b2213a35dcjohnwang } 93604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville else if (IccCard.INTENT_VALUE_LOCKED_ON_PUK.equals(lockedReason)) { 93704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mSimState = IccCard.State.PUK_REQUIRED; 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else { 94004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mSimState = IccCard.State.NETWORK_LOCKED; 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 94304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mSimState = IccCard.State.UNKNOWN; 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateDataIcon(); 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 948e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private boolean isCdma() { 94998e0b146b80670b52805b4b210ef5582dad6bb68Robert Greenwalt return (mSignalStrength != null) && !mSignalStrength.isGsm(); 950e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 952347c5a22a915df5aa180573573adf6b2213a35dcjohnwang private boolean isEvdo() { 953347c5a22a915df5aa180573573adf6b2213a35dcjohnwang return ( (mServiceState != null) 954347c5a22a915df5aa180573573adf6b2213a35dcjohnwang && ((mServiceState.getRadioTechnology() 955347c5a22a915df5aa180573573adf6b2213a35dcjohnwang == ServiceState.RADIO_TECHNOLOGY_EVDO_0) 956347c5a22a915df5aa180573573adf6b2213a35dcjohnwang || (mServiceState.getRadioTechnology() 957347c5a22a915df5aa180573573adf6b2213a35dcjohnwang == ServiceState.RADIO_TECHNOLOGY_EVDO_A))); 958347c5a22a915df5aa180573573adf6b2213a35dcjohnwang } 959347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 960e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private boolean hasService() { 961e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (mServiceState != null) { 962e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville switch (mServiceState.getState()) { 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ServiceState.STATE_OUT_OF_SERVICE: 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ServiceState.STATE_POWER_OFF: 965e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return false; 966e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville default: 967e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return true; 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 970e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return false; 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 972e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 974e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private final void updateSignalStrength() { 975e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int iconLevel = -1; 976e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int[] iconList; 977e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 97856c2d2ff27536a1d8edf0037cd41ff3ea3272fd9John Wang // Display signal strength while in "emergency calls only" mode 97956c2d2ff27536a1d8edf0037cd41ff3ea3272fd9John Wang if (!hasService() && !mServiceState.isEmergencyOnly()) { 9808a9b22056b13477f59df934928c00c58b5871c95Joe Onorato //Slog.d(TAG, "updateSignalStrength: no service"); 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Settings.System.getInt(mContext.getContentResolver(), 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.System.AIRPLANE_MODE_ON, 0) == 1) { 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPhoneData.iconId = com.android.internal.R.drawable.stat_sys_signal_flightmode; 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPhoneData.iconId = com.android.internal.R.drawable.stat_sys_signal_null; 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mPhoneIcon, mPhoneData, null); 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 991e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (!isCdma()) { 992e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int asu = mSignalStrength.getGsmSignalStrength(); 993e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 994e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5 995e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // asu = 0 (-113dB or less) is very weak 996e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // signal, its better to show 0 bars to the user in such cases. 997e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // asu = 99 is a special case, where the signal strength is unknown. 998ee63e47940d5a3bf6f1001153750e885ac3a7dcdjsh if (asu <= 2 || asu == 99) iconLevel = 0; 999ee63e47940d5a3bf6f1001153750e885ac3a7dcdjsh else if (asu >= 12) iconLevel = 4; 1000e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville else if (asu >= 8) iconLevel = 3; 1001ee63e47940d5a3bf6f1001153750e885ac3a7dcdjsh else if (asu >= 5) iconLevel = 2; 1002e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville else iconLevel = 1; 1003e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 100498e0b146b80670b52805b4b210ef5582dad6bb68Robert Greenwalt // Though mPhone is a Manager, this call is not an IPC 1005e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (mPhone.isNetworkRoaming()) { 1006e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville iconList = sSignalImages_r; 1007e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } else { 1008e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville iconList = sSignalImages; 100904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville } 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1011347c5a22a915df5aa180573573adf6b2213a35dcjohnwang iconList = this.sSignalImages; 1012347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 1013347c5a22a915df5aa180573573adf6b2213a35dcjohnwang // If 3G(EV) and 1x network are available than 3G should be 1014347c5a22a915df5aa180573573adf6b2213a35dcjohnwang // displayed, displayed RSSI should be from the EV side. 1015347c5a22a915df5aa180573573adf6b2213a35dcjohnwang // If a voice call is made then RSSI should switch to 1x. 1016347c5a22a915df5aa180573573adf6b2213a35dcjohnwang if ((mPhoneState == TelephonyManager.CALL_STATE_IDLE) && isEvdo()){ 1017347c5a22a915df5aa180573573adf6b2213a35dcjohnwang iconLevel = getEvdoLevel(); 1018347c5a22a915df5aa180573573adf6b2213a35dcjohnwang if (false) { 10198a9b22056b13477f59df934928c00c58b5871c95Joe Onorato Slog.d(TAG, "use Evdo level=" + iconLevel + " to replace Cdma Level=" + getCdmaLevel()); 1020347c5a22a915df5aa180573573adf6b2213a35dcjohnwang } 1021347c5a22a915df5aa180573573adf6b2213a35dcjohnwang } else { 1022347c5a22a915df5aa180573573adf6b2213a35dcjohnwang iconLevel = getCdmaLevel(); 1023347c5a22a915df5aa180573573adf6b2213a35dcjohnwang } 1024e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1025e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mPhoneData.iconId = iconList[iconLevel]; 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mPhoneIcon, mPhoneData, null); 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029347c5a22a915df5aa180573573adf6b2213a35dcjohnwang private int getCdmaLevel() { 1030347c5a22a915df5aa180573573adf6b2213a35dcjohnwang final int cdmaDbm = mSignalStrength.getCdmaDbm(); 1031347c5a22a915df5aa180573573adf6b2213a35dcjohnwang final int cdmaEcio = mSignalStrength.getCdmaEcio(); 1032347c5a22a915df5aa180573573adf6b2213a35dcjohnwang int levelDbm = 0; 1033347c5a22a915df5aa180573573adf6b2213a35dcjohnwang int levelEcio = 0; 1034347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 1035347c5a22a915df5aa180573573adf6b2213a35dcjohnwang if (cdmaDbm >= -75) levelDbm = 4; 1036347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else if (cdmaDbm >= -85) levelDbm = 3; 1037347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else if (cdmaDbm >= -95) levelDbm = 2; 1038347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else if (cdmaDbm >= -100) levelDbm = 1; 1039347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else levelDbm = 0; 1040347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 1041347c5a22a915df5aa180573573adf6b2213a35dcjohnwang // Ec/Io are in dB*10 1042347c5a22a915df5aa180573573adf6b2213a35dcjohnwang if (cdmaEcio >= -90) levelEcio = 4; 1043347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else if (cdmaEcio >= -110) levelEcio = 3; 1044347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else if (cdmaEcio >= -130) levelEcio = 2; 1045347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else if (cdmaEcio >= -150) levelEcio = 1; 1046347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else levelEcio = 0; 1047347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 1048347c5a22a915df5aa180573573adf6b2213a35dcjohnwang return (levelDbm < levelEcio) ? levelDbm : levelEcio; 1049347c5a22a915df5aa180573573adf6b2213a35dcjohnwang } 1050347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 1051347c5a22a915df5aa180573573adf6b2213a35dcjohnwang private int getEvdoLevel() { 1052347c5a22a915df5aa180573573adf6b2213a35dcjohnwang int evdoDbm = mSignalStrength.getEvdoDbm(); 1053347c5a22a915df5aa180573573adf6b2213a35dcjohnwang int evdoSnr = mSignalStrength.getEvdoSnr(); 1054347c5a22a915df5aa180573573adf6b2213a35dcjohnwang int levelEvdoDbm = 0; 1055347c5a22a915df5aa180573573adf6b2213a35dcjohnwang int levelEvdoSnr = 0; 1056347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 1057347c5a22a915df5aa180573573adf6b2213a35dcjohnwang if (evdoDbm >= -65) levelEvdoDbm = 4; 1058347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else if (evdoDbm >= -75) levelEvdoDbm = 3; 1059347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else if (evdoDbm >= -90) levelEvdoDbm = 2; 1060347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else if (evdoDbm >= -105) levelEvdoDbm = 1; 1061347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else levelEvdoDbm = 0; 1062347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 10631336a563684ff2226d4daf340ab5ef299e19870bJohn Michelau if (evdoSnr >= 7) levelEvdoSnr = 4; 10641336a563684ff2226d4daf340ab5ef299e19870bJohn Michelau else if (evdoSnr >= 5) levelEvdoSnr = 3; 10651336a563684ff2226d4daf340ab5ef299e19870bJohn Michelau else if (evdoSnr >= 3) levelEvdoSnr = 2; 10661336a563684ff2226d4daf340ab5ef299e19870bJohn Michelau else if (evdoSnr >= 1) levelEvdoSnr = 1; 1067347c5a22a915df5aa180573573adf6b2213a35dcjohnwang else levelEvdoSnr = 0; 1068347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 1069347c5a22a915df5aa180573573adf6b2213a35dcjohnwang return (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr; 1070347c5a22a915df5aa180573573adf6b2213a35dcjohnwang } 1071347c5a22a915df5aa180573573adf6b2213a35dcjohnwang 107298e0b146b80670b52805b4b210ef5582dad6bb68Robert Greenwalt private final void updateDataNetType(int net) { 107304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 107404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville switch (net) { 107504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville case TelephonyManager.NETWORK_TYPE_EDGE: 107604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mDataIconList = sDataNetType_e; 107704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville break; 107804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville case TelephonyManager.NETWORK_TYPE_UMTS: 107904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mDataIconList = sDataNetType_3g; 108004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville break; 1081ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe case TelephonyManager.NETWORK_TYPE_HSDPA: 1082ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe case TelephonyManager.NETWORK_TYPE_HSUPA: 1083ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe case TelephonyManager.NETWORK_TYPE_HSPA: 108433e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang if (mHspaDataDistinguishable) { 108533e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang mDataIconList = sDataNetType_h; 108633e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang } else { 108733e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang mDataIconList = sDataNetType_3g; 108833e21fcc99dd91061ea245984c4e9a1544cb943fJohn Wang } 1089ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224Li Zhe break; 109004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville case TelephonyManager.NETWORK_TYPE_CDMA: 109104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville // display 1xRTT for IS95A/B 10929f87cb2f8d796f57054c1c0f0ce4b9bef9414642johnwang mDataIconList = this.sDataNetType_1x; 109304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville break; 109404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville case TelephonyManager.NETWORK_TYPE_1xRTT: 10959f87cb2f8d796f57054c1c0f0ce4b9bef9414642johnwang mDataIconList = this.sDataNetType_1x; 109604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville break; 109704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through 109804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville case TelephonyManager.NETWORK_TYPE_EVDO_A: 10999f87cb2f8d796f57054c1c0f0ce4b9bef9414642johnwang mDataIconList = sDataNetType_3g; 110004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville break; 110104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville default: 110204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mDataIconList = sDataNetType_g; 110304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville break; 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateDataIcon() { 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int iconId; 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean visible = true; 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1111e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (!isCdma()) { 1112e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // GSM case, we have to check also the sim state 1113e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (mSimState == IccCard.State.READY || mSimState == IccCard.State.UNKNOWN) { 1114e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (hasService() && mDataState == TelephonyManager.DATA_CONNECTED) { 1115e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville switch (mDataActivity) { 1116e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville case TelephonyManager.DATA_ACTIVITY_IN: 1117e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville iconId = mDataIconList[1]; 1118e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 1119e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville case TelephonyManager.DATA_ACTIVITY_OUT: 1120e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville iconId = mDataIconList[2]; 1121e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 1122e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville case TelephonyManager.DATA_ACTIVITY_INOUT: 1123e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville iconId = mDataIconList[3]; 1124e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 1125e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville default: 1126e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville iconId = mDataIconList[0]; 1127e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 1128e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1129e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mDataData.iconId = iconId; 1130e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.updateIcon(mDataIcon, mDataData, null); 1131e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } else { 1132e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville visible = false; 1133e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1134e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } else { 1135e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mDataData.iconId = com.android.internal.R.drawable.stat_sys_no_sim; 1136e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.updateIcon(mDataIcon, mDataData, null); 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1138e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } else { 1139e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // CDMA case, mDataActivity can be also DATA_ACTIVITY_DORMANT 1140e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (hasService() && mDataState == TelephonyManager.DATA_CONNECTED) { 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mDataActivity) { 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TelephonyManager.DATA_ACTIVITY_IN: 1143e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville iconId = mDataIconList[1]; 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TelephonyManager.DATA_ACTIVITY_OUT: 1146e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville iconId = mDataIconList[2]; 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case TelephonyManager.DATA_ACTIVITY_INOUT: 1149e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville iconId = mDataIconList[3]; 1150e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 1151e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville case TelephonyManager.DATA_ACTIVITY_DORMANT: 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 1153e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville iconId = mDataIconList[0]; 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataData.iconId = iconId; 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mDataIcon, mDataData, null); 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project visible = false; 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1162e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 11634840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn long ident = Binder.clearCallingIdentity(); 11644840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn try { 116504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mBatteryStats.notePhoneDataConnectionState(mPhone.getNetworkType(), visible); 11664840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn } catch (RemoteException e) { 11674840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn } finally { 11684840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn Binder.restoreCallingIdentity(ident); 11694840e143df9804e3399a4e0341c0601f80d65d6eDianne Hackborn } 1170e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDataIconVisible != visible) { 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setIconVisibility(mDataIcon, visible); 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataIconVisible = visible; 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateVolume() { 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int ringerMode = audioManager.getRingerMode(); 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final boolean visible = ringerMode == AudioManager.RINGER_MODE_SILENT || 1181e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville ringerMode == AudioManager.RINGER_MODE_VIBRATE; 1182c210b65cd2619ef462bd860c7197ddcb1c39c75cDaniel Sandler final int iconId = (ringerMode == AudioManager.RINGER_MODE_VIBRATE) 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ? com.android.internal.R.drawable.stat_sys_ringer_vibrate 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : com.android.internal.R.drawable.stat_sys_ringer_silent; 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (visible) { 11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVolumeData.iconId = iconId; 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mVolumeIcon, mVolumeData, null); 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (visible != mVolumeVisible) { 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setIconVisibility(mVolumeIcon, visible); 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVolumeVisible = visible; 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateBluetooth(Intent intent) { 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int iconId = com.android.internal.R.drawable.stat_sys_data_bluetooth; 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String action = intent.getAction(); 1199de893f550301a60274e87aa8168225e7a7a42184Nick Pelly if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { 1200b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); 1201de893f550301a60274e87aa8168225e7a7a42184Nick Pelly mBluetoothEnabled = state == BluetoothAdapter.STATE_ON; 1202005b228cdfb369d9b3b325884c0337ba5968bf8cNick Pelly } else if (action.equals(BluetoothHeadset.ACTION_STATE_CHANGED)) { 1203005b228cdfb369d9b3b325884c0337ba5968bf8cNick Pelly mBluetoothHeadsetState = intent.getIntExtra(BluetoothHeadset.EXTRA_STATE, 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BluetoothHeadset.STATE_ERROR); 1205005b228cdfb369d9b3b325884c0337ba5968bf8cNick Pelly } else if (action.equals(BluetoothA2dp.ACTION_SINK_STATE_CHANGED)) { 1206084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh BluetoothA2dp a2dp = new BluetoothA2dp(mContext); 1207084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh if (a2dp.getConnectedSinks().size() != 0) { 1208084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh mBluetoothA2dpConnected = true; 1209084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh } else { 1210084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh mBluetoothA2dpConnected = false; 1211084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh } 12123f41673265dcaaef058703311c5481e8a51fd8beJiafa Liu } else if (action.equals(BluetoothPbap.PBAP_STATE_CHANGED_ACTION)) { 12133f41673265dcaaef058703311c5481e8a51fd8beJiafa Liu mBluetoothPbapState = intent.getIntExtra(BluetoothPbap.PBAP_STATE, 12143f41673265dcaaef058703311c5481e8a51fd8beJiafa Liu BluetoothPbap.STATE_DISCONNECTED); 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1218e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1219084c665421502b13271e94bd0a342b0ddbbaa7caJaikumar Ganesh if (mBluetoothHeadsetState == BluetoothHeadset.STATE_CONNECTED || mBluetoothA2dpConnected || 12203f41673265dcaaef058703311c5481e8a51fd8beJiafa Liu mBluetoothPbapState == BluetoothPbap.STATE_CONNECTED) { 12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = com.android.internal.R.drawable.stat_sys_data_bluetooth_connected; 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBluetoothData.iconId = iconId; 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mBluetoothIcon, mBluetoothData, null); 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setIconVisibility(mBluetoothIcon, mBluetoothEnabled); 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateWifi(Intent intent) { 12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String action = intent.getAction(); 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { 1232e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final boolean enabled = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WifiManager.WIFI_STATE_UNKNOWN) == WifiManager.WIFI_STATE_ENABLED; 1235e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!enabled) { 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If disabled, hide the icon. (We show icon when connected.) 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setIconVisibility(mWifiIcon, false); 12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1240e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) { 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final boolean enabled = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project false); 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!enabled) { 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setIconVisibility(mWifiIcon, false); 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville final NetworkInfo networkInfo = (NetworkInfo) 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 1251e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int iconId; 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (networkInfo != null && networkInfo.isConnected()) { 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsWifiConnected = true; 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mLastWifiSignalLevel == -1) { 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = sWifiSignalImages[0]; 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = sWifiSignalImages[mLastWifiSignalLevel]; 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 126004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Show the icon since wi-fi is connected 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setIconVisibility(mWifiIcon, true); 126304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastWifiSignalLevel = -1; 12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsWifiConnected = false; 12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = sWifiSignalImages[0]; 12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Hide the icon since we're not connected 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.setIconVisibility(mWifiIcon, false); 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWifiData.iconId = iconId; 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mWifiIcon, mWifiData, null); 12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) { 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int newRssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200); 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int newSignalLevel = WifiManager.calculateSignalLevel(newRssi, 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sWifiSignalImages.length); 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (newSignalLevel != mLastWifiSignalLevel) { 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastWifiSignalLevel = newSignalLevel; 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mIsWifiConnected) { 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWifiData.iconId = sWifiSignalImages[newSignalLevel]; 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWifiData.iconId = sWifiTemporarilyNotConnectedImage; 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mWifiIcon, mWifiData, null); 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void updateGps(Intent intent) { 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String action = intent.getAction(); 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final boolean enabled = intent.getBooleanExtra(GpsLocationProvider.EXTRA_ENABLED, false); 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (action.equals(GpsLocationProvider.GPS_FIX_CHANGE_ACTION) && enabled) { 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // GPS is getting fixes 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mGpsIcon, mGpsFixIconData, null); 1298e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.setIconVisibility(mGpsIcon, true); 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (action.equals(GpsLocationProvider.GPS_ENABLED_CHANGE_ACTION) && !enabled) { 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // GPS is off 1301e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.setIconVisibility(mGpsIcon, false); 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // GPS is on, but not receiving fixes 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.updateIcon(mGpsIcon, mGpsEnabledIconData, null); 1305e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.setIconVisibility(mGpsIcon, true); 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private final void updateTTY(Intent intent) { 131004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville final String action = intent.getAction(); 131104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville final boolean enabled = intent.getBooleanExtra(TtyIntent.TTY_ENABLED, false); 131204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 13138a9b22056b13477f59df934928c00c58b5871c95Joe Onorato if (false) Slog.v(TAG, "updateTTY: enabled: " + enabled); 131404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 131504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville if (enabled) { 131604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville // TTY is on 13178a9b22056b13477f59df934928c00c58b5871c95Joe Onorato if (false) Slog.v(TAG, "updateTTY: set TTY on"); 131804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville mService.updateIcon(mTTYModeIcon, mTTYModeEnableIconData, null); 1319e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.setIconVisibility(mTTYModeIcon, true); 132004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville } else { 132104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville // TTY is off 13228a9b22056b13477f59df934928c00c58b5871c95Joe Onorato if (false) Slog.v(TAG, "updateTTY: set TTY off"); 1323e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.setIconVisibility(mTTYModeIcon, false); 1324e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1325e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1326e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 132798e0b146b80670b52805b4b210ef5582dad6bb68Robert Greenwalt private final void updateCdmaRoamingIcon(ServiceState state) { 1328e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (!hasService()) { 1329e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.setIconVisibility(mCdmaRoamingIndicatorIcon, false); 1330f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return; 1331e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1332e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1333e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (!isCdma()) { 1334e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.setIconVisibility(mCdmaRoamingIndicatorIcon, false); 1335f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return; 1336e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1337e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1338e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int[] iconList = sRoamingIndicatorImages_cdma; 133998e0b146b80670b52805b4b210ef5582dad6bb68Robert Greenwalt int iconIndex = state.getCdmaEriIconIndex(); 134098e0b146b80670b52805b4b210ef5582dad6bb68Robert Greenwalt int iconMode = state.getCdmaEriIconMode(); 1341e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1342e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (iconIndex == -1) { 13438a9b22056b13477f59df934928c00c58b5871c95Joe Onorato Slog.e(TAG, "getCdmaEriIconIndex returned null, skipping ERI icon update"); 1344e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return; 1345e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1346e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1347e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (iconMode == -1) { 13488a9b22056b13477f59df934928c00c58b5871c95Joe Onorato Slog.e(TAG, "getCdmeEriIconMode returned null, skipping ERI icon update"); 1349e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return; 1350e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1351e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1352e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (iconIndex == EriInfo.ROAMING_INDICATOR_OFF) { 13538a9b22056b13477f59df934928c00c58b5871c95Joe Onorato if (false) Slog.v(TAG, "Cdma ROAMING_INDICATOR_OFF, removing ERI icon"); 1354e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.setIconVisibility(mCdmaRoamingIndicatorIcon, false); 1355e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return; 1356e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1357e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1358e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville switch (iconMode) { 1359e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville case EriInfo.ROAMING_ICON_MODE_NORMAL: 1360e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mCdmaRoamingIndicatorIconData.iconId = iconList[iconIndex]; 1361e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.updateIcon(mCdmaRoamingIndicatorIcon, mCdmaRoamingIndicatorIconData, null); 1362e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.setIconVisibility(mCdmaRoamingIndicatorIcon, true); 1363e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 1364e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville case EriInfo.ROAMING_ICON_MODE_FLASH: 1365f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville mCdmaRoamingIndicatorIconData.iconId = 1366f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville com.android.internal.R.drawable.stat_sys_roaming_cdma_flash; 1367e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.updateIcon(mCdmaRoamingIndicatorIcon, mCdmaRoamingIndicatorIconData, null); 1368f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville mService.setIconVisibility(mCdmaRoamingIndicatorIcon, true); 1369e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 1370e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 137104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville } 1372e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mService.updateIcon(mPhoneIcon, mPhoneData, null); 137304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville } 137404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 1375e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private class StatusBarHandler extends Handler { 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void handleMessage(Message msg) { 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (msg.what) { 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_BATTERY_CLOSE: 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (msg.arg1 == mBatteryViewSequence) { 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project closeLastBatteryView(); 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1389