Status.java revision deb8f08ace7e255939d793c8a5a0006d424734bc
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings.deviceinfo; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19d63c0112251ab4e4e977545368dd703d875012a4Nick Pellyimport android.bluetooth.BluetoothAdapter; 20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.BroadcastReceiver; 21b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.content.ClipboardManager; 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.IntentFilter; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.res.Resources; 267c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.munimport android.net.ConnectivityManager; 277c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.munimport android.net.NetworkInfo; 28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.wifi.WifiInfo; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.wifi.WifiManager; 30489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongkerimport android.os.Build; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Handler; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Message; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.SystemClock; 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.SystemProperties; 369627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport android.os.UserHandle; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceActivity; 397c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.munimport android.preference.PreferenceScreen; 40bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hambyimport android.telephony.CellBroadcastMessage; 41f25b3e04dbde05b025a0aaf6b1f555b8e16241b1Jeff Hamiltonimport android.telephony.PhoneNumberUtils; 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.PhoneStateListener; 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.ServiceState; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.TelephonyManager; 45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.TextUtils; 46b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.util.Log; 47b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.view.View; 48b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.widget.AdapterView; 49b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.widget.ListAdapter; 50b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.widget.ListView; 51b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.widget.Toast; 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.Phone; 545543404ae0ec9635b59d37fa01074ea598d539ebWink Savilleimport com.android.internal.telephony.PhoneConstants; 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.PhoneFactory; 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.PhoneStateIntentReceiver; 57deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colittiimport com.android.internal.util.ArrayUtils; 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.settings.R; 59ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasaniimport com.android.settings.Utils; 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.lang.ref.WeakReference; 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Display the following information 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Phone Number 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Network 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Roaming 68c38866843e966622346dc8f7b028749cac9c2198Wink Saville * # Device Id (IMEI in GSM and MEID in CDMA) 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Network type 70bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby * # Operator info (area info cell broadcast for Brazil) 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Signal Strength 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Battery Strength : TODO 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Uptime 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Awake Time 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # XMPP/buzz/tickle status : TODO 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class Status extends PreferenceActivity { 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 80c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani private static final String KEY_DATA_STATE = "data_state"; 81ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_SERVICE_STATE = "service_state"; 82ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_OPERATOR_NAME = "operator_name"; 83ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_ROAMING_STATE = "roaming_state"; 84ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_NETWORK_TYPE = "network_type"; 85bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby private static final String KEY_LATEST_AREA_INFO = "latest_area_info"; 86ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_PHONE_NUMBER = "number"; 87ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_IMEI_SV = "imei_sv"; 88ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_IMEI = "imei"; 89ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_PRL_VERSION = "prl_version"; 90ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_MIN_NUMBER = "min_number"; 91ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_MEID_NUMBER = "meid_number"; 92ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_SIGNAL_STRENGTH = "signal_strength"; 93ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_BATTERY_STATUS = "battery_status"; 94ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_BATTERY_LEVEL = "battery_level"; 956822b749bbd525abcf492e4f5a236d77a910331aAmith Yamasani private static final String KEY_IP_ADDRESS = "wifi_ip_address"; 96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_WIFI_MAC_ADDRESS = "wifi_mac_address"; 97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_BT_ADDRESS = "bt_address"; 98489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker private static final String KEY_SERIAL_NUMBER = "serial_number"; 99d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang private static final String KEY_ICC_ID = "icc_id"; 1007c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun private static final String KEY_WIMAX_MAC_ADDRESS = "wimax_mac_address"; 101c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani private static final String[] PHONE_RELATED_ENTRIES = { 102c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_DATA_STATE, 103c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_SERVICE_STATE, 104c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_OPERATOR_NAME, 105c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_ROAMING_STATE, 106c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_NETWORK_TYPE, 107bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby KEY_LATEST_AREA_INFO, 108c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_PHONE_NUMBER, 109c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_IMEI, 110c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_IMEI_SV, 111c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_PRL_VERSION, 112c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_MIN_NUMBER, 113c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_MEID_NUMBER, 114d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang KEY_SIGNAL_STRENGTH, 115d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang KEY_ICC_ID 116c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani }; 117c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 118bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby static final String CB_AREA_INFO_RECEIVED_ACTION = 119bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby "android.cellbroadcastreceiver.CB_AREA_INFO_RECEIVED"; 120bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 121bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby static final String GET_LATEST_CB_AREA_INFO_ACTION = 122bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby "android.cellbroadcastreceiver.GET_LATEST_CB_AREA_INFO"; 123bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 124bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby // Require the sender to have this permission to prevent third-party spoofing. 125bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby static final String CB_AREA_INFO_SENDER_PERMISSION = 126bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby "android.permission.RECEIVE_EMERGENCY_BROADCAST"; 127bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 128deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti // Broadcasts to listen to for connectivity changes. 129deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti private static final String[] CONNECTIVITY_INTENTS = { 130deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti BluetoothAdapter.ACTION_STATE_CHANGED, 131deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE, 132deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti WifiManager.LINK_CONFIGURATION_CHANGED_ACTION, 133deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti WifiManager.NETWORK_STATE_CHANGED_ACTION, 134deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti }; 135deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 200; 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int EVENT_SERVICE_STATE_CHANGED = 300; 138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int EVENT_UPDATE_STATS = 500; 140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 141deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti private static final int EVENT_UPDATE_CONNECTIVITY = 600; 142deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 1436eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private ConnectivityManager mCM; 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private TelephonyManager mTelephonyManager; 1456eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private WifiManager mWifiManager; 1466eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Phone mPhone = null; 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private PhoneStateIntentReceiver mPhoneStateReceiver; 149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Resources mRes; 150bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby private boolean mShowLatestAreaInfo; 151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1526eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private String mUnknown; 1536eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private String mUnavailable; 154d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 1556eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mSignalStrength; 1566eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mUptime; 157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mBatteryStatus; 158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mBatteryLevel; 1596eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mBtAddress; 1606eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mIpAddress; 1616eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mWifiMacAddress; 1626eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mWimaxMacAddress; 163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Handler mHandler; 165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static class MyHandler extends Handler { 167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private WeakReference<Status> mStatus; 168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public MyHandler(Status activity) { 170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mStatus = new WeakReference<Status>(activity); 171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void handleMessage(Message msg) { 175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Status status = mStatus.get(); 176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (status == null) { 177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return; 178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (msg.what) { 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case EVENT_SIGNAL_STRENGTH_CHANGED: 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project status.updateSignalStrength(); 183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case EVENT_SERVICE_STATE_CHANGED: 186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project ServiceState serviceState = status.mPhoneStateReceiver.getServiceState(); 187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project status.updateServiceState(serviceState); 188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case EVENT_UPDATE_STATS: 191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project status.updateTimes(); 192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000); 193afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 194deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 195deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti case EVENT_UPDATE_CONNECTIVITY: 196deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti status.updateConnectivity(); 197deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti break; 198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 200afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 201afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() { 203d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 204afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onReceive(Context context, Intent intent) { 206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String action = intent.getAction(); 207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { 208a4379d6b38e568fcb60831d6f2fa349ba20f9b82Amith Yamasani mBatteryLevel.setSummary(Utils.getBatteryPercentage(intent)); 209a4379d6b38e568fcb60831d6f2fa349ba20f9b82Amith Yamasani mBatteryStatus.setSummary(Utils.getBatteryStatus(getResources(), intent)); 210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private PhoneStateListener mPhoneStateListener = new PhoneStateListener() { 215afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onDataConnectionStateChanged(int state) { 217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project updateDataState(); 218afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project updateNetworkType(); 219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 221d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 222bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby private BroadcastReceiver mAreaInfoReceiver = new BroadcastReceiver() { 223bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby @Override 224bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby public void onReceive(Context context, Intent intent) { 225bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby String action = intent.getAction(); 226bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (CB_AREA_INFO_RECEIVED_ACTION.equals(action)) { 227bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby Bundle extras = intent.getExtras(); 228bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (extras == null) { 229bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby return; 230bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 231bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby CellBroadcastMessage cbMessage = (CellBroadcastMessage) extras.get("message"); 232bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (cbMessage != null && cbMessage.getServiceCategory() == 50) { 233bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby String latestAreaInfo = cbMessage.getMessageBody(); 234bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby updateAreaInfo(latestAreaInfo); 235bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 236bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 237bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 238bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby }; 239bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 240deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti private IntentFilter mConnectivityIntentFilter; 241deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti private final BroadcastReceiver mConnectivityReceiver = new BroadcastReceiver() { 242deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti @Override 243deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti public void onReceive(Context context, Intent intent) { 244deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti String action = intent.getAction(); 245deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti if (ArrayUtils.contains(CONNECTIVITY_INTENTS, action)) { 246deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti mHandler.sendEmptyMessage(EVENT_UPDATE_CONNECTIVITY); 247deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti } 248deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti } 249deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti }; 250deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 2516eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private boolean hasBluetooth() { 2526eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti return BluetoothAdapter.getDefaultAdapter() != null; 2536eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 2546eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 2556eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private boolean hasWimax() { 2566eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti return mCM.getNetworkInfo(ConnectivityManager.TYPE_WIMAX) != null; 2576eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 2586eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onCreate(Bundle icicle) { 261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mHandler = new MyHandler(this); 264ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani 2656eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mCM = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 2676eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.device_info_status); 270ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani mBatteryLevel = findPreference(KEY_BATTERY_LEVEL); 271ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani mBatteryStatus = findPreference(KEY_BATTERY_STATUS); 2726eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mBtAddress = findPreference(KEY_BT_ADDRESS); 2736eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWifiMacAddress = findPreference(KEY_WIFI_MAC_ADDRESS); 2746eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWimaxMacAddress = findPreference(KEY_WIMAX_MAC_ADDRESS); 2756eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mIpAddress = findPreference(KEY_IP_ADDRESS); 276ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani 277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mRes = getResources(); 2786eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mUnknown = mRes.getString(R.string.device_info_default); 2796eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mUnavailable = mRes.getString(R.string.status_unavailable); 2806eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 2819627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (UserHandle.myUserId() == UserHandle.USER_OWNER) { 2829627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mPhone = PhoneFactory.getDefaultPhone(); 2839627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 28418f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter // Note - missing in zaku build, be careful later... 285ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani mSignalStrength = findPreference(KEY_SIGNAL_STRENGTH); 286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mUptime = findPreference("up_time"); 287ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani 2889627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (mPhone == null || Utils.isWifiOnly(getApplicationContext())) { 289c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani for (String key : PHONE_RELATED_ENTRIES) { 290c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani removePreferenceFromScreen(key); 291c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 292386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } else { 293c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // NOTE "imei" is the "Device ID" since it represents 294c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // the IMEI in GSM and the MEID in CDMA 295c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani if (mPhone.getPhoneName().equals("CDMA")) { 296c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_MEID_NUMBER, mPhone.getMeid()); 297c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_MIN_NUMBER, mPhone.getCdmaMin()); 298079e30cd2a09388ba9ad2149a66de86be4f3a7acMarco Nelissen if (getResources().getBoolean(R.bool.config_msid_enable)) { 299079e30cd2a09388ba9ad2149a66de86be4f3a7acMarco Nelissen findPreference(KEY_MIN_NUMBER).setTitle(R.string.status_msid_number); 300079e30cd2a09388ba9ad2149a66de86be4f3a7acMarco Nelissen } 301c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_PRL_VERSION, mPhone.getCdmaPrlVersion()); 302c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani removePreferenceFromScreen(KEY_IMEI_SV); 303d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 3045543404ae0ec9635b59d37fa01074ea598d539ebWink Saville if (mPhone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE) { 305d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang // Show ICC ID and IMEI for LTE device 306d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang setSummaryText(KEY_ICC_ID, mPhone.getIccSerialNumber()); 307d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang setSummaryText(KEY_IMEI, mPhone.getImei()); 308d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang } else { 309d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang // device is not GSM/UMTS, do not display GSM/UMTS features 310d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang // check Null in case no specified preference in overlay xml 311d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang removePreferenceFromScreen(KEY_IMEI); 312d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang removePreferenceFromScreen(KEY_ICC_ID); 313d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang } 314c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } else { 315c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_IMEI, mPhone.getDeviceId()); 316c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 317c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_IMEI_SV, 318c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)) 319c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani .getDeviceSoftwareVersion()); 320c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 321c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // device is not CDMA, do not display CDMA features 322c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // check Null in case no specified preference in overlay xml 323c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani removePreferenceFromScreen(KEY_PRL_VERSION); 324c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani removePreferenceFromScreen(KEY_MEID_NUMBER); 325c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani removePreferenceFromScreen(KEY_MIN_NUMBER); 326d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang removePreferenceFromScreen(KEY_ICC_ID); 327bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 328bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby // only show area info when SIM country is Brazil 329bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if ("br".equals(mTelephonyManager.getSimCountryIso())) { 330bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby mShowLatestAreaInfo = true; 331bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 332c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 333386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang 334c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani String rawNumber = mPhone.getLine1Number(); // may be null or empty 335c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani String formattedNumber = null; 336c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani if (!TextUtils.isEmpty(rawNumber)) { 337c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani formattedNumber = PhoneNumberUtils.formatNumber(rawNumber); 338c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 339c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // If formattedNumber is null or empty, it'll display as "Unknown". 340c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_PHONE_NUMBER, formattedNumber); 341386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang 342c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mPhoneStateReceiver = new PhoneStateIntentReceiver(this, mHandler); 343c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED); 344c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED); 345bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 346bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (!mShowLatestAreaInfo) { 347bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby removePreferenceFromScreen(KEY_LATEST_AREA_INFO); 348bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 349f42d5e7e2ee7dde31e64270246c2e3b8d573d61bDavid Brown } 350afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3516eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti if (!hasBluetooth()) { 3526eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti getPreferenceScreen().removePreference(mBtAddress); 3536eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mBtAddress = null; 3546eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 3556eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 3566eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti if (!hasWimax()) { 3576eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti getPreferenceScreen().removePreference(mWimaxMacAddress); 3586eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWimaxMacAddress = null; 3596eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 3606eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 361deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti mConnectivityIntentFilter = new IntentFilter(); 362deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti for (String intent: CONNECTIVITY_INTENTS) { 363deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti mConnectivityIntentFilter.addAction(intent); 364deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti } 365deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 3666eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti updateConnectivity(); 367489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker 368489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker String serial = Build.SERIAL; 369489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker if (serial != null && !serial.equals("")) { 370489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker setSummaryText(KEY_SERIAL_NUMBER, serial); 371489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker } else { 372489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker removePreferenceFromScreen(KEY_SERIAL_NUMBER); 373489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker } 374b7715323308674cfd0902615124192442159449eDaniel Sandler 375b7715323308674cfd0902615124192442159449eDaniel Sandler // Make every pref on this screen copy its data to the clipboard on longpress. 376b7715323308674cfd0902615124192442159449eDaniel Sandler // Super convenient for capturing the IMEI, MAC addr, serial, etc. 377b7715323308674cfd0902615124192442159449eDaniel Sandler getListView().setOnItemLongClickListener( 378b7715323308674cfd0902615124192442159449eDaniel Sandler new AdapterView.OnItemLongClickListener() { 379b7715323308674cfd0902615124192442159449eDaniel Sandler @Override 380b7715323308674cfd0902615124192442159449eDaniel Sandler public boolean onItemLongClick(AdapterView<?> parent, View view, 381b7715323308674cfd0902615124192442159449eDaniel Sandler int position, long id) { 382b7715323308674cfd0902615124192442159449eDaniel Sandler ListAdapter listAdapter = (ListAdapter) parent.getAdapter(); 383b7715323308674cfd0902615124192442159449eDaniel Sandler Preference pref = (Preference) listAdapter.getItem(position); 384b7715323308674cfd0902615124192442159449eDaniel Sandler 385b7715323308674cfd0902615124192442159449eDaniel Sandler ClipboardManager cm = (ClipboardManager) 386b7715323308674cfd0902615124192442159449eDaniel Sandler getSystemService(Context.CLIPBOARD_SERVICE); 387b7715323308674cfd0902615124192442159449eDaniel Sandler cm.setText(pref.getSummary()); 388b7715323308674cfd0902615124192442159449eDaniel Sandler Toast.makeText( 389b7715323308674cfd0902615124192442159449eDaniel Sandler Status.this, 390b7715323308674cfd0902615124192442159449eDaniel Sandler com.android.internal.R.string.text_copied, 391b7715323308674cfd0902615124192442159449eDaniel Sandler Toast.LENGTH_SHORT).show(); 392b7715323308674cfd0902615124192442159449eDaniel Sandler return true; 393b7715323308674cfd0902615124192442159449eDaniel Sandler } 394b7715323308674cfd0902615124192442159449eDaniel Sandler }); 395afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 396ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani 397afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 398afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onResume() { 399afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 400afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4019627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (mPhone != null && !Utils.isWifiOnly(getApplicationContext())) { 402c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mPhoneStateReceiver.registerIntent(); 403c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 404c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani updateSignalStrength(); 405c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani updateServiceState(mPhone.getServiceState()); 406c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani updateDataState(); 407c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mTelephonyManager.listen(mPhoneStateListener, 408bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby PhoneStateListener.LISTEN_DATA_CONNECTION_STATE); 409bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (mShowLatestAreaInfo) { 410bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby registerReceiver(mAreaInfoReceiver, new IntentFilter(CB_AREA_INFO_RECEIVED_ACTION), 411bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby CB_AREA_INFO_SENDER_PERMISSION, null); 412bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby // Ask CellBroadcastReceiver to broadcast the latest area info received 413bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby Intent getLatestIntent = new Intent(GET_LATEST_CB_AREA_INFO_ACTION); 414bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby sendBroadcastAsUser(getLatestIntent, UserHandle.ALL, 415bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby CB_AREA_INFO_SENDER_PERMISSION); 416bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 417c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 418deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti registerReceiver(mConnectivityReceiver, mConnectivityIntentFilter, 419deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti android.Manifest.permission.CHANGE_NETWORK_STATE, null); 420c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 421afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mHandler.sendEmptyMessage(EVENT_UPDATE_STATS); 422afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 423d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 424afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 425afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onPause() { 426afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onPause(); 427afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4289627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (mPhone != null && !Utils.isWifiOnly(getApplicationContext())) { 429c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mPhoneStateReceiver.unregisterIntent(); 430c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); 431c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 432bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (mShowLatestAreaInfo) { 433bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby unregisterReceiver(mAreaInfoReceiver); 434bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 435afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project unregisterReceiver(mBatteryInfoReceiver); 436deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti unregisterReceiver(mConnectivityReceiver); 437afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mHandler.removeMessages(EVENT_UPDATE_STATS); 438afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 439afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 440afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 441ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani * Removes the specified preference, if it exists. 442ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani * @param key the key for the Preference item 443ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani */ 444ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private void removePreferenceFromScreen(String key) { 445ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani Preference pref = findPreference(key); 446ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani if (pref != null) { 447ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani getPreferenceScreen().removePreference(pref); 448ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani } 449ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani } 450ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani 451ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani /** 452afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * @param preference The key for the Preference item 453afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * @param property The system property to fetch 454afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * @param alt The default value, if the property doesn't exist 455afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 456afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void setSummary(String preference, String property, String alt) { 457afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project try { 458afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project findPreference(preference).setSummary( 459afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project SystemProperties.get(property, alt)); 460afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } catch (RuntimeException e) { 461d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 462afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 463afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 464afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 465afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void setSummaryText(String preference, String text) { 46618f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if (TextUtils.isEmpty(text)) { 4676eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti text = mUnknown; 46818f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter } 46918f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter // some preferences may be missing 47018f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if (findPreference(preference) != null) { 47118f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter findPreference(preference).setSummary(text); 47218f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter } 473afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 474d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 475afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateNetworkType() { 476afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Whether EDGE, UMTS, etc... 4771fd3544c55eb707f894888da9aaf307a867db806Akira Oshimi String networktype = null; 4781fd3544c55eb707f894888da9aaf307a867db806Akira Oshimi if (TelephonyManager.NETWORK_TYPE_UNKNOWN != mTelephonyManager.getNetworkType()) { 4791fd3544c55eb707f894888da9aaf307a867db806Akira Oshimi networktype = mTelephonyManager.getNetworkTypeName(); 4801fd3544c55eb707f894888da9aaf307a867db806Akira Oshimi } 4811fd3544c55eb707f894888da9aaf307a867db806Akira Oshimi setSummaryText(KEY_NETWORK_TYPE, networktype); 482afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 483d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 484afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateDataState() { 485afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int state = mTelephonyManager.getDataState(); 486afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String display = mRes.getString(R.string.radioInfo_unknown); 487afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 488afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (state) { 489afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case TelephonyManager.DATA_CONNECTED: 490afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_data_connected); 491afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 492afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case TelephonyManager.DATA_SUSPENDED: 493afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_data_suspended); 494afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 495afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case TelephonyManager.DATA_CONNECTING: 496afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_data_connecting); 497afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 498afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case TelephonyManager.DATA_DISCONNECTED: 499afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_data_disconnected); 500afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 501afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 502d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 503c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_DATA_STATE, display); 504afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 505afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 506afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateServiceState(ServiceState serviceState) { 507afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int state = serviceState.getState(); 508afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String display = mRes.getString(R.string.radioInfo_unknown); 509d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 510afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (state) { 511afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case ServiceState.STATE_IN_SERVICE: 512afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_service_in); 513afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 514afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case ServiceState.STATE_OUT_OF_SERVICE: 515afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case ServiceState.STATE_EMERGENCY_ONLY: 516afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_service_out); 517afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 518afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case ServiceState.STATE_POWER_OFF: 519afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_service_off); 520afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 521afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 522d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 523ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani setSummaryText(KEY_SERVICE_STATE, display); 524d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 525afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (serviceState.getRoaming()) { 526ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani setSummaryText(KEY_ROAMING_STATE, mRes.getString(R.string.radioInfo_roaming_in)); 527afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 528ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani setSummaryText(KEY_ROAMING_STATE, mRes.getString(R.string.radioInfo_roaming_not)); 529afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 530ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani setSummaryText(KEY_OPERATOR_NAME, serviceState.getOperatorAlphaLong()); 531afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 532d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 533bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby private void updateAreaInfo(String areaInfo) { 534bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (areaInfo != null) { 535bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby setSummaryText(KEY_LATEST_AREA_INFO, areaInfo); 536bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 537bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 538bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 539afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project void updateSignalStrength() { 540e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville // TODO PhoneStateIntentReceiver is deprecated and PhoneStateListener 541e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville // should probably used instead. 542ead6928894c5f63ba8751962d93987b412b4b209Wink Saville 54318f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter // not loaded in some versions of the code (e.g., zaku) 54418f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if (mSignalStrength != null) { 54518f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter int state = 54618f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter mPhoneStateReceiver.getServiceState().getState(); 54718f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter Resources r = getResources(); 54818f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter 54918f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if ((ServiceState.STATE_OUT_OF_SERVICE == state) || 55018f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter (ServiceState.STATE_POWER_OFF == state)) { 55118f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter mSignalStrength.setSummary("0"); 55218f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter } 553afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 55418f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter int signalDbm = mPhoneStateReceiver.getSignalStrengthDbm(); 555afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 55618f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if (-1 == signalDbm) signalDbm = 0; 557afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 558882c74a6799d24c766e3db81a316743bbe11e0beWink Saville int signalAsu = mPhoneStateReceiver.getSignalStrengthLevelAsu(); 559afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 56018f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if (-1 == signalAsu) signalAsu = 0; 56118f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter 56218f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter mSignalStrength.setSummary(String.valueOf(signalDbm) + " " 56318f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter + r.getString(R.string.radioInfo_display_dbm) + " " 56418f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter + String.valueOf(signalAsu) + " " 56518f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter + r.getString(R.string.radioInfo_display_asu)); 56618f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter } 567afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 568c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 5697c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun private void setWimaxStatus() { 5706eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti if (mWimaxMacAddress != null) { 5716eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti String macAddress = SystemProperties.get("net.wimax.mac.address", mUnavailable); 5726eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWimaxMacAddress.setSummary(macAddress); 5737c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun } 5747c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun } 5756822b749bbd525abcf492e4f5a236d77a910331aAmith Yamasani 5766eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private void setWifiStatus() { 5776eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); 578afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress(); 5796eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWifiMacAddress.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress : mUnavailable); 5806822b749bbd525abcf492e4f5a236d77a910331aAmith Yamasani } 581c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 5826822b749bbd525abcf492e4f5a236d77a910331aAmith Yamasani private void setIpAddressStatus() { 5836eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti String ipAddress = Utils.getDefaultIpAddresses(this.mCM); 584c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani if (ipAddress != null) { 5856eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mIpAddress.setSummary(ipAddress); 586c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } else { 5876eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mIpAddress.setSummary(mUnavailable); 588c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 589afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 590afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 591afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void setBtStatus() { 592d1a04291c537e271999c7e7c5c72f1f61632aacfNick Pelly BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); 5936eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti if (bluetooth != null && mBtAddress != null) { 594afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String address = bluetooth.isEnabled() ? bluetooth.getAddress() : null; 5956eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti if (!TextUtils.isEmpty(address)) { 5966eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti // Convert the address to lowercase for consistency with the wifi MAC address. 5976eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mBtAddress.setSummary(address.toLowerCase()); 5986eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } else { 5996eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mBtAddress.setSummary(mUnavailable); 6006eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 601afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 602afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 603afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 6046eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti void updateConnectivity() { 6056eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti setWimaxStatus(); 6066eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti setWifiStatus(); 6076eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti setBtStatus(); 6086eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti setIpAddressStatus(); 6096eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 6106eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 611afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project void updateTimes() { 612afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project long at = SystemClock.uptimeMillis() / 1000; 613afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project long ut = SystemClock.elapsedRealtime() / 1000; 614afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 615afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (ut == 0) { 616afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project ut = 1; 617afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 618afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 619afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mUptime.setSummary(convert(ut)); 620afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 621d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 622afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private String pad(int n) { 623afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (n >= 10) { 624afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return String.valueOf(n); 625afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 626afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return "0" + String.valueOf(n); 627afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 628afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 629afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 630afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private String convert(long t) { 631afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int s = (int)(t % 60); 632afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int m = (int)((t / 60) % 60); 633afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int h = (int)((t / 3600)); 634afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 635afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return h + ":" + pad(m) + ":" + pad(s); 636afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 637afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 638