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; 273065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglioimport 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; 383065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglioimport android.preference.PreferenceActivity; 39bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hambyimport android.telephony.CellBroadcastMessage; 40f25b3e04dbde05b025a0aaf6b1f555b8e16241b1Jeff Hamiltonimport android.telephony.PhoneNumberUtils; 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.PhoneStateListener; 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.ServiceState; 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.TelephonyManager; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.TextUtils; 45b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.view.View; 46b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.widget.AdapterView; 47b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.widget.ListAdapter; 48b7715323308674cfd0902615124192442159449eDaniel Sandlerimport android.widget.Toast; 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.Phone; 515543404ae0ec9635b59d37fa01074ea598d539ebWink Savilleimport com.android.internal.telephony.PhoneConstants; 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.PhoneFactory; 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.PhoneStateIntentReceiver; 54deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colittiimport com.android.internal.util.ArrayUtils; 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.settings.R; 56ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasaniimport com.android.settings.Utils; 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.lang.ref.WeakReference; 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Display the following information 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Phone Number 63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Network 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Roaming 65c38866843e966622346dc8f7b028749cac9c2198Wink Saville * # Device Id (IMEI in GSM and MEID in CDMA) 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Network type 67bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby * # Operator info (area info cell broadcast for Brazil) 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Signal Strength 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Battery Strength : TODO 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Uptime 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # Awake Time 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * # XMPP/buzz/tickle status : TODO 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 753065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Megliopublic class Status extends PreferenceActivity { 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 77c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani private static final String KEY_DATA_STATE = "data_state"; 78ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_SERVICE_STATE = "service_state"; 79ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_OPERATOR_NAME = "operator_name"; 80ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_ROAMING_STATE = "roaming_state"; 81ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_NETWORK_TYPE = "network_type"; 82bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby private static final String KEY_LATEST_AREA_INFO = "latest_area_info"; 83ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_PHONE_NUMBER = "number"; 84ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_IMEI_SV = "imei_sv"; 85ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_IMEI = "imei"; 86ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_PRL_VERSION = "prl_version"; 87ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_MIN_NUMBER = "min_number"; 88ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_MEID_NUMBER = "meid_number"; 89ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_SIGNAL_STRENGTH = "signal_strength"; 90ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_BATTERY_STATUS = "battery_status"; 91ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private static final String KEY_BATTERY_LEVEL = "battery_level"; 926822b749bbd525abcf492e4f5a236d77a910331aAmith Yamasani private static final String KEY_IP_ADDRESS = "wifi_ip_address"; 93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_WIFI_MAC_ADDRESS = "wifi_mac_address"; 94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_BT_ADDRESS = "bt_address"; 95489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker private static final String KEY_SERIAL_NUMBER = "serial_number"; 96d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang private static final String KEY_ICC_ID = "icc_id"; 977c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun private static final String KEY_WIMAX_MAC_ADDRESS = "wimax_mac_address"; 98c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani private static final String[] PHONE_RELATED_ENTRIES = { 99c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_DATA_STATE, 100c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_SERVICE_STATE, 101c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_OPERATOR_NAME, 102c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_ROAMING_STATE, 103c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_NETWORK_TYPE, 104bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby KEY_LATEST_AREA_INFO, 105c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_PHONE_NUMBER, 106c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_IMEI, 107c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_IMEI_SV, 108c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_PRL_VERSION, 109c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_MIN_NUMBER, 110c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani KEY_MEID_NUMBER, 111d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang KEY_SIGNAL_STRENGTH, 112d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang KEY_ICC_ID 113c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani }; 114c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 115bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby static final String CB_AREA_INFO_RECEIVED_ACTION = 116bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby "android.cellbroadcastreceiver.CB_AREA_INFO_RECEIVED"; 117bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 118bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby static final String GET_LATEST_CB_AREA_INFO_ACTION = 119bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby "android.cellbroadcastreceiver.GET_LATEST_CB_AREA_INFO"; 120bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 121bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby // Require the sender to have this permission to prevent third-party spoofing. 122bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby static final String CB_AREA_INFO_SENDER_PERMISSION = 123bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby "android.permission.RECEIVE_EMERGENCY_BROADCAST"; 124bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 125deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti // Broadcasts to listen to for connectivity changes. 126deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti private static final String[] CONNECTIVITY_INTENTS = { 127deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti BluetoothAdapter.ACTION_STATE_CHANGED, 128deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE, 129deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti WifiManager.LINK_CONFIGURATION_CHANGED_ACTION, 130deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti WifiManager.NETWORK_STATE_CHANGED_ACTION, 131deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti }; 132deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 200; 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int EVENT_SERVICE_STATE_CHANGED = 300; 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int EVENT_UPDATE_STATS = 500; 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 138deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti private static final int EVENT_UPDATE_CONNECTIVITY = 600; 139deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 1406eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private ConnectivityManager mCM; 141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private TelephonyManager mTelephonyManager; 1426eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private WifiManager mWifiManager; 1436eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Phone mPhone = null; 145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private PhoneStateIntentReceiver mPhoneStateReceiver; 146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Resources mRes; 147bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby private boolean mShowLatestAreaInfo; 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1496eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private String mUnknown; 1506eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private String mUnavailable; 151d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 1526eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mSignalStrength; 1536eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mUptime; 154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mBatteryStatus; 155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mBatteryLevel; 1566eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mBtAddress; 1576eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mIpAddress; 1586eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mWifiMacAddress; 1596eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private Preference mWimaxMacAddress; 160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Handler mHandler; 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static class MyHandler extends Handler { 164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private WeakReference<Status> mStatus; 165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1663065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio public MyHandler(Status activity) { 1673065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio mStatus = new WeakReference<Status>(activity); 168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void handleMessage(Message msg) { 172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Status status = mStatus.get(); 173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (status == null) { 174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return; 175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (msg.what) { 178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case EVENT_SIGNAL_STRENGTH_CHANGED: 179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project status.updateSignalStrength(); 180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case EVENT_SERVICE_STATE_CHANGED: 183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project ServiceState serviceState = status.mPhoneStateReceiver.getServiceState(); 184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project status.updateServiceState(serviceState); 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case EVENT_UPDATE_STATS: 188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project status.updateTimes(); 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000); 190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 191deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 192deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti case EVENT_UPDATE_CONNECTIVITY: 193deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti status.updateConnectivity(); 194deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti break; 195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() { 200d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 201afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onReceive(Context context, Intent intent) { 203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String action = intent.getAction(); 204afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { 205a4379d6b38e568fcb60831d6f2fa349ba20f9b82Amith Yamasani mBatteryLevel.setSummary(Utils.getBatteryPercentage(intent)); 206a4379d6b38e568fcb60831d6f2fa349ba20f9b82Amith Yamasani mBatteryStatus.setSummary(Utils.getBatteryStatus(getResources(), intent)); 207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 208afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private PhoneStateListener mPhoneStateListener = new PhoneStateListener() { 212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onDataConnectionStateChanged(int state) { 214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project updateDataState(); 215afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project updateNetworkType(); 216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 218d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 219bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby private BroadcastReceiver mAreaInfoReceiver = new BroadcastReceiver() { 220bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby @Override 221bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby public void onReceive(Context context, Intent intent) { 222bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby String action = intent.getAction(); 223bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (CB_AREA_INFO_RECEIVED_ACTION.equals(action)) { 224bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby Bundle extras = intent.getExtras(); 225bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (extras == null) { 226bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby return; 227bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 228bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby CellBroadcastMessage cbMessage = (CellBroadcastMessage) extras.get("message"); 229bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (cbMessage != null && cbMessage.getServiceCategory() == 50) { 230bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby String latestAreaInfo = cbMessage.getMessageBody(); 231bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby updateAreaInfo(latestAreaInfo); 232bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 233bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 234bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 235bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby }; 236bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 237deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti private IntentFilter mConnectivityIntentFilter; 238deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti private final BroadcastReceiver mConnectivityReceiver = new BroadcastReceiver() { 239deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti @Override 240deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti public void onReceive(Context context, Intent intent) { 241deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti String action = intent.getAction(); 242deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti if (ArrayUtils.contains(CONNECTIVITY_INTENTS, action)) { 243deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti mHandler.sendEmptyMessage(EVENT_UPDATE_CONNECTIVITY); 244deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti } 245deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti } 246deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti }; 247deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 2486eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private boolean hasBluetooth() { 2496eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti return BluetoothAdapter.getDefaultAdapter() != null; 2506eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 2516eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 2526eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private boolean hasWimax() { 2536eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti return mCM.getNetworkInfo(ConnectivityManager.TYPE_WIMAX) != null; 2546eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 2556eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 2573065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio protected void onCreate(Bundle icicle) { 258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mHandler = new MyHandler(this); 261ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani 2623065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio mCM = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 2633065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 2643065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.device_info_status); 267ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani mBatteryLevel = findPreference(KEY_BATTERY_LEVEL); 268ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani mBatteryStatus = findPreference(KEY_BATTERY_STATUS); 2696eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mBtAddress = findPreference(KEY_BT_ADDRESS); 2706eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWifiMacAddress = findPreference(KEY_WIFI_MAC_ADDRESS); 2716eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWimaxMacAddress = findPreference(KEY_WIMAX_MAC_ADDRESS); 2726eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mIpAddress = findPreference(KEY_IP_ADDRESS); 273ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani 274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mRes = getResources(); 2756eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mUnknown = mRes.getString(R.string.device_info_default); 2766eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mUnavailable = mRes.getString(R.string.status_unavailable); 2776eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 2789627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (UserHandle.myUserId() == UserHandle.USER_OWNER) { 2799627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mPhone = PhoneFactory.getDefaultPhone(); 2809627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 28118f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter // Note - missing in zaku build, be careful later... 282ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani mSignalStrength = findPreference(KEY_SIGNAL_STRENGTH); 283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mUptime = findPreference("up_time"); 284ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani 2853065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio if (mPhone == null || Utils.isWifiOnly(getApplicationContext())) { 286c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani for (String key : PHONE_RELATED_ENTRIES) { 287c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani removePreferenceFromScreen(key); 288c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 289386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } else { 290c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // NOTE "imei" is the "Device ID" since it represents 291c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // the IMEI in GSM and the MEID in CDMA 292c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani if (mPhone.getPhoneName().equals("CDMA")) { 293c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_MEID_NUMBER, mPhone.getMeid()); 294c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_MIN_NUMBER, mPhone.getCdmaMin()); 295079e30cd2a09388ba9ad2149a66de86be4f3a7acMarco Nelissen if (getResources().getBoolean(R.bool.config_msid_enable)) { 296079e30cd2a09388ba9ad2149a66de86be4f3a7acMarco Nelissen findPreference(KEY_MIN_NUMBER).setTitle(R.string.status_msid_number); 297079e30cd2a09388ba9ad2149a66de86be4f3a7acMarco Nelissen } 298c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_PRL_VERSION, mPhone.getCdmaPrlVersion()); 299c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani removePreferenceFromScreen(KEY_IMEI_SV); 300d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 3015543404ae0ec9635b59d37fa01074ea598d539ebWink Saville if (mPhone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE) { 302d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang // Show ICC ID and IMEI for LTE device 303d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang setSummaryText(KEY_ICC_ID, mPhone.getIccSerialNumber()); 304d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang setSummaryText(KEY_IMEI, mPhone.getImei()); 305d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang } else { 306d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang // device is not GSM/UMTS, do not display GSM/UMTS features 307d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang // check Null in case no specified preference in overlay xml 308d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang removePreferenceFromScreen(KEY_IMEI); 309d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang removePreferenceFromScreen(KEY_ICC_ID); 310d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang } 311c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } else { 312c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_IMEI, mPhone.getDeviceId()); 313c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 314c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_IMEI_SV, 3153065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)) 316c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani .getDeviceSoftwareVersion()); 317c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 318c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // device is not CDMA, do not display CDMA features 319c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // check Null in case no specified preference in overlay xml 320c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani removePreferenceFromScreen(KEY_PRL_VERSION); 321c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani removePreferenceFromScreen(KEY_MEID_NUMBER); 322c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani removePreferenceFromScreen(KEY_MIN_NUMBER); 323d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang removePreferenceFromScreen(KEY_ICC_ID); 324bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 325bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby // only show area info when SIM country is Brazil 326bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if ("br".equals(mTelephonyManager.getSimCountryIso())) { 327bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby mShowLatestAreaInfo = true; 328bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 329c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 330386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang 33148383e1604cc52559aafc7341faa962b3accce8eDerek Tan String rawNumber = mTelephonyManager.getLine1Number(); // may be null or empty 332c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani String formattedNumber = null; 333c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani if (!TextUtils.isEmpty(rawNumber)) { 334c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani formattedNumber = PhoneNumberUtils.formatNumber(rawNumber); 335c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 336c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // If formattedNumber is null or empty, it'll display as "Unknown". 337c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_PHONE_NUMBER, formattedNumber); 338386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang 3393065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio mPhoneStateReceiver = new PhoneStateIntentReceiver(this, mHandler); 340c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED); 341c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED); 342bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 343bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (!mShowLatestAreaInfo) { 344bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby removePreferenceFromScreen(KEY_LATEST_AREA_INFO); 345bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 346f42d5e7e2ee7dde31e64270246c2e3b8d573d61bDavid Brown } 347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3486eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti if (!hasBluetooth()) { 3496eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti getPreferenceScreen().removePreference(mBtAddress); 3506eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mBtAddress = null; 3516eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 3526eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 3536eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti if (!hasWimax()) { 3546eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti getPreferenceScreen().removePreference(mWimaxMacAddress); 3556eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWimaxMacAddress = null; 3566eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 3576eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 358deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti mConnectivityIntentFilter = new IntentFilter(); 359deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti for (String intent: CONNECTIVITY_INTENTS) { 360deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti mConnectivityIntentFilter.addAction(intent); 361deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti } 362deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 3636eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti updateConnectivity(); 364489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker 365489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker String serial = Build.SERIAL; 366489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker if (serial != null && !serial.equals("")) { 367489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker setSummaryText(KEY_SERIAL_NUMBER, serial); 368489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker } else { 369489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker removePreferenceFromScreen(KEY_SERIAL_NUMBER); 370489c7bff5c54c35e7156a99337d538e08f3aab7fDoug Zongker } 371b7715323308674cfd0902615124192442159449eDaniel Sandler 372b7715323308674cfd0902615124192442159449eDaniel Sandler // Make every pref on this screen copy its data to the clipboard on longpress. 373b7715323308674cfd0902615124192442159449eDaniel Sandler // Super convenient for capturing the IMEI, MAC addr, serial, etc. 374b7715323308674cfd0902615124192442159449eDaniel Sandler getListView().setOnItemLongClickListener( 3753065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio new AdapterView.OnItemLongClickListener() { 3763065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio @Override 3773065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio public boolean onItemLongClick(AdapterView<?> parent, View view, 3783065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio int position, long id) { 3793065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio ListAdapter listAdapter = (ListAdapter) parent.getAdapter(); 3803065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio Preference pref = (Preference) listAdapter.getItem(position); 3813065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio 3823065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio ClipboardManager cm = (ClipboardManager) 3833065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio getSystemService(Context.CLIPBOARD_SERVICE); 3843065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio cm.setText(pref.getSummary()); 3853065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio Toast.makeText( 3863065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio Status.this, 3873065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio com.android.internal.R.string.text_copied, 3883065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio Toast.LENGTH_SHORT).show(); 3893065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio return true; 3903065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio } 3913065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio }); 392afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 393ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani 394afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 3953065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio protected void onResume() { 396afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 397afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3983065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio if (mPhone != null && !Utils.isWifiOnly(getApplicationContext())) { 399c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mPhoneStateReceiver.registerIntent(); 400c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 401c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani updateSignalStrength(); 402c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani updateServiceState(mPhone.getServiceState()); 403c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani updateDataState(); 404c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mTelephonyManager.listen(mPhoneStateListener, 405bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby PhoneStateListener.LISTEN_DATA_CONNECTION_STATE); 406bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (mShowLatestAreaInfo) { 4073065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio registerReceiver(mAreaInfoReceiver, new IntentFilter(CB_AREA_INFO_RECEIVED_ACTION), 408bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby CB_AREA_INFO_SENDER_PERMISSION, null); 409bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby // Ask CellBroadcastReceiver to broadcast the latest area info received 410bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby Intent getLatestIntent = new Intent(GET_LATEST_CB_AREA_INFO_ACTION); 4113065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio sendBroadcastAsUser(getLatestIntent, UserHandle.ALL, 412bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby CB_AREA_INFO_SENDER_PERMISSION); 413bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 414c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 4153065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio registerReceiver(mConnectivityReceiver, mConnectivityIntentFilter, 4163065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio android.Manifest.permission.CHANGE_NETWORK_STATE, null); 4173065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 418afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mHandler.sendEmptyMessage(EVENT_UPDATE_STATS); 419afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 420d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 421afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 422afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onPause() { 423afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onPause(); 424afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4253065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio if (mPhone != null && !Utils.isWifiOnly(getApplicationContext())) { 426c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mPhoneStateReceiver.unregisterIntent(); 427c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); 428c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 429bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (mShowLatestAreaInfo) { 4303065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio unregisterReceiver(mAreaInfoReceiver); 431bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 4323065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio unregisterReceiver(mBatteryInfoReceiver); 4333065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio unregisterReceiver(mConnectivityReceiver); 434afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mHandler.removeMessages(EVENT_UPDATE_STATS); 435afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 436afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 437afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 438ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani * Removes the specified preference, if it exists. 439ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani * @param key the key for the Preference item 440ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani */ 441ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani private void removePreferenceFromScreen(String key) { 442ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani Preference pref = findPreference(key); 443ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani if (pref != null) { 444ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani getPreferenceScreen().removePreference(pref); 445ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani } 446ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani } 447ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani 448ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani /** 449afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * @param preference The key for the Preference item 450afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * @param property The system property to fetch 451afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * @param alt The default value, if the property doesn't exist 452afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 453afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void setSummary(String preference, String property, String alt) { 454afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project try { 455afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project findPreference(preference).setSummary( 456afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project SystemProperties.get(property, alt)); 457afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } catch (RuntimeException e) { 458d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 459afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 460afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 461afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 462afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void setSummaryText(String preference, String text) { 46318f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if (TextUtils.isEmpty(text)) { 4646eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti text = mUnknown; 46518f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter } 46618f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter // some preferences may be missing 46718f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if (findPreference(preference) != null) { 46818f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter findPreference(preference).setSummary(text); 46918f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter } 470afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 471d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 472afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateNetworkType() { 473afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Whether EDGE, UMTS, etc... 4741fd3544c55eb707f894888da9aaf307a867db806Akira Oshimi String networktype = null; 4751fd3544c55eb707f894888da9aaf307a867db806Akira Oshimi if (TelephonyManager.NETWORK_TYPE_UNKNOWN != mTelephonyManager.getNetworkType()) { 4761fd3544c55eb707f894888da9aaf307a867db806Akira Oshimi networktype = mTelephonyManager.getNetworkTypeName(); 4771fd3544c55eb707f894888da9aaf307a867db806Akira Oshimi } 4781fd3544c55eb707f894888da9aaf307a867db806Akira Oshimi setSummaryText(KEY_NETWORK_TYPE, networktype); 479afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 480d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 481afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateDataState() { 482afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int state = mTelephonyManager.getDataState(); 483afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String display = mRes.getString(R.string.radioInfo_unknown); 484afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 485afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (state) { 486afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case TelephonyManager.DATA_CONNECTED: 487afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_data_connected); 488afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 489afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case TelephonyManager.DATA_SUSPENDED: 490afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_data_suspended); 491afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 492afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case TelephonyManager.DATA_CONNECTING: 493afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_data_connecting); 494afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 495afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case TelephonyManager.DATA_DISCONNECTED: 496afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_data_disconnected); 497afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 498afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 499d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 500c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setSummaryText(KEY_DATA_STATE, display); 501afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 502afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 503afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateServiceState(ServiceState serviceState) { 504afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int state = serviceState.getState(); 505afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String display = mRes.getString(R.string.radioInfo_unknown); 506d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 507afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (state) { 508afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case ServiceState.STATE_IN_SERVICE: 509afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_service_in); 510afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 511afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case ServiceState.STATE_OUT_OF_SERVICE: 512afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case ServiceState.STATE_EMERGENCY_ONLY: 513afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_service_out); 514afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 515afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case ServiceState.STATE_POWER_OFF: 516afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project display = mRes.getString(R.string.radioInfo_service_off); 517afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 518afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 519d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 520ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani setSummaryText(KEY_SERVICE_STATE, display); 521d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 522afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (serviceState.getRoaming()) { 523ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani setSummaryText(KEY_ROAMING_STATE, mRes.getString(R.string.radioInfo_roaming_in)); 524afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 525ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani setSummaryText(KEY_ROAMING_STATE, mRes.getString(R.string.radioInfo_roaming_not)); 526afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 527ffe813c380d7609fb94c65337b0964952f19c130Amith Yamasani setSummaryText(KEY_OPERATOR_NAME, serviceState.getOperatorAlphaLong()); 528afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 529d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 530bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby private void updateAreaInfo(String areaInfo) { 531bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby if (areaInfo != null) { 532bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby setSummaryText(KEY_LATEST_AREA_INFO, areaInfo); 533bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 534bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby } 535bc5d9271a9d36ecf07ac35e1635f36679074de6fJake Hamby 536afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project void updateSignalStrength() { 537e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville // TODO PhoneStateIntentReceiver is deprecated and PhoneStateListener 538e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville // should probably used instead. 539ead6928894c5f63ba8751962d93987b412b4b209Wink Saville 54018f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter // not loaded in some versions of the code (e.g., zaku) 54118f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if (mSignalStrength != null) { 54218f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter int state = 54318f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter mPhoneStateReceiver.getServiceState().getState(); 54418f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter Resources r = getResources(); 54518f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter 54618f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if ((ServiceState.STATE_OUT_OF_SERVICE == state) || 54718f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter (ServiceState.STATE_POWER_OFF == state)) { 54818f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter mSignalStrength.setSummary("0"); 5494d49e3f5b1736e2bdef1445c6c57809435ce8e80Amit Mahajan return; 55018f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter } 551afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 55218f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter int signalDbm = mPhoneStateReceiver.getSignalStrengthDbm(); 553afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 55418f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if (-1 == signalDbm) signalDbm = 0; 555afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 556882c74a6799d24c766e3db81a316743bbe11e0beWink Saville int signalAsu = mPhoneStateReceiver.getSignalStrengthLevelAsu(); 557afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 55818f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter if (-1 == signalAsu) signalAsu = 0; 55918f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter 56018f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter mSignalStrength.setSummary(String.valueOf(signalDbm) + " " 56118f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter + r.getString(R.string.radioInfo_display_dbm) + " " 56218f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter + String.valueOf(signalAsu) + " " 56318f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter + r.getString(R.string.radioInfo_display_asu)); 56418f3afb9cdfc617e778e2807ee58da50f251790eMike Ritter } 565afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 566c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 5677c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun private void setWimaxStatus() { 5686eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti if (mWimaxMacAddress != null) { 5696eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti String macAddress = SystemProperties.get("net.wimax.mac.address", mUnavailable); 5706eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWimaxMacAddress.setSummary(macAddress); 5717c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun } 5727c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun } 5736822b749bbd525abcf492e4f5a236d77a910331aAmith Yamasani 5746eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti private void setWifiStatus() { 5756eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); 576afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress(); 5776eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mWifiMacAddress.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress : mUnavailable); 5786822b749bbd525abcf492e4f5a236d77a910331aAmith Yamasani } 579c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 5806822b749bbd525abcf492e4f5a236d77a910331aAmith Yamasani private void setIpAddressStatus() { 5816eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti String ipAddress = Utils.getDefaultIpAddresses(this.mCM); 582c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani if (ipAddress != null) { 5836eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mIpAddress.setSummary(ipAddress); 584c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } else { 5856eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mIpAddress.setSummary(mUnavailable); 586c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 587afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 588afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 589afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void setBtStatus() { 590d1a04291c537e271999c7e7c5c72f1f61632aacfNick Pelly BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); 5916eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti if (bluetooth != null && mBtAddress != null) { 592afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String address = bluetooth.isEnabled() ? bluetooth.getAddress() : null; 5936eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti if (!TextUtils.isEmpty(address)) { 5946eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti // Convert the address to lowercase for consistency with the wifi MAC address. 5956eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mBtAddress.setSummary(address.toLowerCase()); 5966eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } else { 5976eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti mBtAddress.setSummary(mUnavailable); 5986eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 599afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 600afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 601afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 6026eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti void updateConnectivity() { 6036eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti setWimaxStatus(); 6046eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti setWifiStatus(); 6056eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti setBtStatus(); 6066eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti setIpAddressStatus(); 6076eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti } 6086eb6a908217e080aea43406028be491d269bdbb0Lorenzo Colitti 609afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project void updateTimes() { 610afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project long at = SystemClock.uptimeMillis() / 1000; 611afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project long ut = SystemClock.elapsedRealtime() / 1000; 612afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 613afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (ut == 0) { 614afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project ut = 1; 615afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 616afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 617afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mUptime.setSummary(convert(ut)); 618afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 619d7b2dccbe60a02965186d28f0b671ef1c419a2a8John Wang 620afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private String pad(int n) { 621afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (n >= 10) { 622afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return String.valueOf(n); 623afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 624afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return "0" + String.valueOf(n); 625afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 626afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 627afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 628afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private String convert(long t) { 629afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int s = (int)(t % 60); 630afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int m = (int)((t / 60) % 60); 631afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int h = (int)((t / 3600)); 632afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 633afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return h + ":" + pad(m) + ":" + pad(s); 634afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 635afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 636