1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2006 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;
18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
19afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.Activity;
20e272c2078ba1626e1f14c57257d9516bd107aceaNathan Haroldimport android.app.AlertDialog;
21e272c2078ba1626e1f14c57257d9516bd107aceaNathan Haroldimport android.app.Dialog;
22cb267a6f8caf42a7e2adf000262ae327ce4d5f32Pavel Zhamaitsiakimport android.app.QueuedWork;
23fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wangimport android.content.ComponentName;
24586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wangimport android.content.Context;
25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent;
26a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalinkimport android.content.pm.PackageManager;
27a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalinkimport android.content.pm.ResolveInfo;
28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.res.Resources;
29cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.graphics.Typeface;
309302986035f46d2868c23db6349fd04b543eb676Jeff Sharkeyimport android.net.TrafficStats;
31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.Uri;
32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.AsyncResult;
33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Handler;
35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Message;
36586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wangimport android.telephony.CarrierConfigManager;
3779bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Savilleimport android.telephony.CellInfo;
38cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellInfoCdma;
39cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellInfoGsm;
40cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellInfoLte;
41cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellInfoWcdma;
42cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellIdentityCdma;
43cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellIdentityGsm;
44cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellIdentityLte;
45cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellIdentityWcdma;
46afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.CellLocation;
47cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellSignalStrengthCdma;
48cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellSignalStrengthGsm;
49cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellSignalStrengthLte;
50cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.CellSignalStrengthWcdma;
514f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Savilleimport android.telephony.DataConnectionRealTimeInfo;
5239b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.telephony.NeighboringCellInfo;
532b77d7460ccebd97826529f186596df14050f0aeNathan Haroldimport android.telephony.PreciseCallState;
54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.PhoneStateListener;
55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.ServiceState;
562b77d7460ccebd97826529f186596df14050f0aeNathan Haroldimport android.telephony.SignalStrength;
57cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport android.telephony.SubscriptionManager;
58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.TelephonyManager;
59534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jshimport android.telephony.cdma.CdmaCellLocation;
60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.gsm.GsmCellLocation;
61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log;
62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.Menu;
63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.MenuItem;
64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.View;
65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.View.OnClickListener;
66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.AdapterView;
67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.ArrayAdapter;
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.Button;
692b77d7460ccebd97826529f186596df14050f0aeNathan Haroldimport android.widget.CompoundButton;
702b77d7460ccebd97826529f186596df14050f0aeNathan Haroldimport android.widget.CompoundButton.OnCheckedChangeListener;
7139b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.widget.EditText;
72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.Spinner;
732b77d7460ccebd97826529f186596df14050f0aeNathan Haroldimport android.widget.Switch;
74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.TextView;
75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
7639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport com.android.ims.ImsConfig;
7739b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport com.android.ims.ImsException;
7839b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport com.android.ims.ImsManager;
79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.Phone;
805543404ae0ec9635b59d37fa01074ea598d539ebWink Savilleimport com.android.internal.telephony.PhoneConstants;
81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.PhoneFactory;
82cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Haroldimport com.android.internal.telephony.RILConstants;
83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.TelephonyProperties;
84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.io.IOException;
8639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport java.net.HttpURLConnection;
8739b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport java.net.URL;
88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.net.UnknownHostException;
89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.ArrayList;
90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.List;
91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class RadioInfo extends Activity {
932b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private static final String TAG = "RadioInfo";
942b77d7460ccebd97826529f186596df14050f0aeNathan Harold
952b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private static final String[] mPreferredNetworkLabels = {
962b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "WCDMA preferred",
972b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "GSM only",
982b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "WCDMA only",
992b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "GSM auto (PRL)",
1002b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "CDMA auto (PRL)",
1012b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "CDMA only",
1022b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "EvDo only",
1032b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "Global auto (PRL)",
1042b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "LTE/CDMA auto (PRL)",
1052b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "LTE/UMTS auto (PRL)",
1062b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "LTE/CDMA/UMTS auto (PRL)",
1072b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "LTE only",
1082b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "LTE/WCDMA",
1092b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "TD-SCDMA only",
1102b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "TD-SCDMA/WCDMA",
1112b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "LTE/TD-SCDMA",
1122b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "TD-SCDMA/GSM",
1132b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "TD-SCDMA/UMTS",
1142b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "LTE/TD-SCDMA/WCDMA",
1152b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "LTE/TD-SCDMA/UMTS",
1162b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "TD-SCDMA/CDMA/UMTS",
1172b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "Global/TD-SCDMA",
1182b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "Unknown"
1192b77d7460ccebd97826529f186596df14050f0aeNathan Harold    };
1202b77d7460ccebd97826529f186596df14050f0aeNathan Harold
1212b77d7460ccebd97826529f186596df14050f0aeNathan Harold
1222b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private static final int CELL_INFO_LIST_RATE_DISABLED = Integer.MAX_VALUE;
1232b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private static final int CELL_INFO_LIST_RATE_MAX = 0;
1242b77d7460ccebd97826529f186596df14050f0aeNathan Harold
12512e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
12612e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    private static final int IMS_VOLTE_PROVISIONED_CONFIG_ID =
12712e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        ImsConfig.ConfigConstants.VLT_SETTING_ENABLED;
12812e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
12912e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    private static final int IMS_VT_PROVISIONED_CONFIG_ID =
13012e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        ImsConfig.ConfigConstants.LVC_SETTING_ENABLED;
13112e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
13212e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    private static final int IMS_WFC_PROVISIONED_CONFIG_ID =
13312e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED;
13412e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
135586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    private static final int EAB_PROVISIONED_CONFIG_ID =
136586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        ImsConfig.ConfigConstants.EAB_SETTING_ENABLED;
137586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang
1382b77d7460ccebd97826529f186596df14050f0aeNathan Harold    //Values in must match mCellInfoRefreshRates
1392b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private static final String[] mCellInfoRefreshRateLabels = {
1402b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "Disabled",
1412b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "Immediate",
1422b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "Min 5s",
1432b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "Min 10s",
1442b77d7460ccebd97826529f186596df14050f0aeNathan Harold            "Min 60s"
1452b77d7460ccebd97826529f186596df14050f0aeNathan Harold    };
1462b77d7460ccebd97826529f186596df14050f0aeNathan Harold
1472b77d7460ccebd97826529f186596df14050f0aeNathan Harold    //Values in seconds, must match mCellInfoRefreshRateLabels
1482b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private static final int mCellInfoRefreshRates[] = {
1492b77d7460ccebd97826529f186596df14050f0aeNathan Harold        CELL_INFO_LIST_RATE_DISABLED,
1502b77d7460ccebd97826529f186596df14050f0aeNathan Harold        CELL_INFO_LIST_RATE_MAX,
1512b77d7460ccebd97826529f186596df14050f0aeNathan Harold        5000,
1522b77d7460ccebd97826529f186596df14050f0aeNathan Harold        10000,
1532b77d7460ccebd97826529f186596df14050f0aeNathan Harold        60000
1542b77d7460ccebd97826529f186596df14050f0aeNathan Harold    };
1552b77d7460ccebd97826529f186596df14050f0aeNathan Harold
1562b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private void log(String s) {
1572b77d7460ccebd97826529f186596df14050f0aeNathan Harold        Log.d(TAG, s);
1582b77d7460ccebd97826529f186596df14050f0aeNathan Harold    }
159342101a0729a30587dc4fa79b5f017634bd985c0johnwang
160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_CFI_CHANGED = 302;
161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_QUERY_PREFERRED_TYPE_DONE = 1000;
163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_SET_PREFERRED_TYPE_DONE = 1001;
164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_QUERY_SMSC_DONE = 1005;
165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_UPDATE_SMSC_DONE = 1006;
166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_SELECT_BAND  = 0;
168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_VIEW_ADN     = 1;
169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_VIEW_FDN     = 2;
170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_VIEW_SDN     = 3;
171e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold    private static final int MENU_ITEM_GET_IMS_STATUS = 4;
172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_TOGGLE_DATA  = 5;
173a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink
174c38866843e966622346dc8f7b028749cac9c2198Wink Saville    private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView number;
1769053f17b81f7a2486d8a441cd0a06b43fbbbf20fMeng Wang    private TextView mSubscriberId;
177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView callState;
178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView operatorName;
179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView roamingState;
180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView gsmState;
181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView gprsState;
1822b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private TextView voiceNetwork;
1832b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private TextView dataNetwork;
184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView dBm;
185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mMwi;
186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mCfi;
187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mLocation;
188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mNeighboringCids;
18979bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville    private TextView mCellInfo;
1904f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville    private TextView mDcRtInfoTv;
191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView sent;
192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView received;
193cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private TextView mPingHostnameV4;
194cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private TextView mPingHostnameV6;
195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mHttpClientTest;
196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView dnsCheckState;
197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditText smsc;
1982b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private Switch radioPowerOnSwitch;
1992b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private Button cellInfoRefreshRateButton;
200afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button dnsCheckToggleButton;
201afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button pingTestButton;
202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button updateSmscButton;
203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button refreshSmscButton;
204a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    private Button oemInfoButton;
205fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang    private Button carrierProvisioningButton;
206fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang    private Button triggercarrierProvisioningButton;
20712e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    private Switch imsVolteProvisionedSwitch;
20812e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    private Switch imsVtProvisionedSwitch;
20912e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    private Switch imsWfcProvisionedSwitch;
210586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    private Switch eabProvisionedSwitch;
211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Spinner preferredNetworkType;
2122b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private Spinner cellInfoRefreshRateSpinner;
213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TelephonyManager mTelephonyManager;
215cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private ImsManager mImsManager = null;
216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Phone phone = null;
217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
218cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private String mPingHostnameResultV4;
219cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private String mPingHostnameResultV6;
220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mHttpClientTestResult;
221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean mMwiValue = false;
222afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean mCfiValue = false;
223cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
224cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private List<CellInfo> mCellInfoResult = null;
225cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private CellLocation mCellLocationResult = null;
226cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private List<NeighboringCellInfo> mNeighboringCellResult = null;
227cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
228cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private int mPreferredNetworkTypeResult;
2292b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private int mCellInfoRefreshRateIndex;
230afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
2312b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
232afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onDataConnectionStateChanged(int state) {
234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateDataState();
235afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateNetworkType();
236afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
237afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
238afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
239afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onDataActivity(int direction) {
240afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateDataStats2();
241afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
242afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
243afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
2442b77d7460ccebd97826529f186596df14050f0aeNathan Harold        public void onCallStateChanged(int state, String incomingNumber) {
2452b77d7460ccebd97826529f186596df14050f0aeNathan Harold            updateNetworkType();
2462b77d7460ccebd97826529f186596df14050f0aeNathan Harold            updatePhoneState(state);
2472b77d7460ccebd97826529f186596df14050f0aeNathan Harold        }
2482b77d7460ccebd97826529f186596df14050f0aeNathan Harold
2492b77d7460ccebd97826529f186596df14050f0aeNathan Harold        @Override
2502b77d7460ccebd97826529f186596df14050f0aeNathan Harold        public void onPreciseCallStateChanged(PreciseCallState preciseState) {
2512b77d7460ccebd97826529f186596df14050f0aeNathan Harold            updateNetworkType();
2522b77d7460ccebd97826529f186596df14050f0aeNathan Harold        }
2532b77d7460ccebd97826529f186596df14050f0aeNathan Harold
2542b77d7460ccebd97826529f186596df14050f0aeNathan Harold        @Override
255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onCellLocationChanged(CellLocation location) {
256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateLocation(location);
257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onMessageWaitingIndicatorChanged(boolean mwi) {
261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMwiValue = mwi;
262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateMessageWaiting();
263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
264afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onCallForwardingIndicatorChanged(boolean cfi) {
267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mCfiValue = cfi;
268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateCallRedirect();
269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
27079bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville
27179bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        @Override
27279bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        public void onCellInfoChanged(List<CellInfo> arrayCi) {
273bf4712895a570ce360db57f775b47c858f1d71b2Wink Saville            log("onCellInfoChanged: arrayCi=" + arrayCi);
274cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            mCellInfoResult = arrayCi;
275cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            updateCellInfo(mCellInfoResult);
27679bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        }
2774f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville
2784f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville        @Override
2794f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville        public void onDataConnectionRealTimeInfoChanged(DataConnectionRealTimeInfo dcRtInfo) {
2804f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville            log("onDataConnectionRealTimeInfoChanged: dcRtInfo=" + dcRtInfo);
2814f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville            updateDcRtInfoTv(dcRtInfo);
2824f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville        }
2832b77d7460ccebd97826529f186596df14050f0aeNathan Harold
2842b77d7460ccebd97826529f186596df14050f0aeNathan Harold        @Override
2852b77d7460ccebd97826529f186596df14050f0aeNathan Harold        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
2862b77d7460ccebd97826529f186596df14050f0aeNathan Harold            log("onSignalStrengthChanged: SignalStrength=" +signalStrength);
2872b77d7460ccebd97826529f186596df14050f0aeNathan Harold            updateSignalStrength(signalStrength);
2882b77d7460ccebd97826529f186596df14050f0aeNathan Harold        }
2892b77d7460ccebd97826529f186596df14050f0aeNathan Harold
2902b77d7460ccebd97826529f186596df14050f0aeNathan Harold        @Override
2912b77d7460ccebd97826529f186596df14050f0aeNathan Harold        public void onServiceStateChanged(ServiceState serviceState) {
2922b77d7460ccebd97826529f186596df14050f0aeNathan Harold            log("onServiceStateChanged: ServiceState=" + serviceState);
2932b77d7460ccebd97826529f186596df14050f0aeNathan Harold            updateServiceState(serviceState);
2942b77d7460ccebd97826529f186596df14050f0aeNathan Harold            updateRadioPowerState();
2952b77d7460ccebd97826529f186596df14050f0aeNathan Harold            updateNetworkType();
29612e1f55e926dd376ae17e48c1929524216222dbdNathan Harold            updateImsProvisionedState();
2972b77d7460ccebd97826529f186596df14050f0aeNathan Harold        }
298afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
299afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
300cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private void updatePreferredNetworkType(int type) {
301cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        if (type >= mPreferredNetworkLabels.length || type < 0) {
302cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            log("EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
303cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    "type=" + type);
304cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            type = mPreferredNetworkLabels.length - 1; //set to Unknown
305cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        }
306cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPreferredNetworkTypeResult = type;
307cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
308cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
309cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
310cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
311afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Handler mHandler = new Handler() {
312cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        @Override
313afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void handleMessage(Message msg) {
314afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            AsyncResult ar;
315afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            switch (msg.what) {
316afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_QUERY_PREFERRED_TYPE_DONE:
317afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
318cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    if (ar.exception == null && ar.result != null) {
319cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                        updatePreferredNetworkType(((int[])ar.result)[0]);
320afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    } else {
321cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                        //In case of an exception, we will set this to unknown
322cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                        updatePreferredNetworkType(mPreferredNetworkLabels.length-1);
323afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
324afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
325afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_SET_PREFERRED_TYPE_DONE:
326afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
327afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception != null) {
328ed38afafd874f922b6eadbb8535197ae1c6e0e8cNathan Harold                        log("Set preferred network type failed.");
329afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
330afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
331afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_QUERY_SMSC_DONE:
332afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
333afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception != null) {
334afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        smsc.setText("refresh error");
335afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    } else {
33621dd407c10bb1bade10233e8468ea6729bcf71efjsh                        smsc.setText((String)ar.result);
337afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
338afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
339afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_UPDATE_SMSC_DONE:
340afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updateSmscButton.setEnabled(true);
341afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
342afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception != null) {
343afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        smsc.setText("update error");
344afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
345afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
346afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                default:
347cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    super.handleMessage(msg);
348afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
350afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
352afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
353afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
354afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
355afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onCreate(Bundle icicle) {
356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
357b54cb2d18cf2e8d5dd45781079f0b4ad27649b25fionaxu        if (!android.os.Process.myUserHandle().isSystem()) {
358b54cb2d18cf2e8d5dd45781079f0b4ad27649b25fionaxu            Log.e(TAG, "Not run from system user, don't do anything.");
359b54cb2d18cf2e8d5dd45781079f0b4ad27649b25fionaxu            finish();
360b54cb2d18cf2e8d5dd45781079f0b4ad27649b25fionaxu            return;
361b54cb2d18cf2e8d5dd45781079f0b4ad27649b25fionaxu        }
362afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
363afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        setContentView(R.layout.radio_info);
364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
365cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        log("Started onCreate");
366cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
367afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
368afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        phone = PhoneFactory.getDefaultPhone();
369afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
370cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        //TODO: Need to update this if the default phoneId changes?
371cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        //      Better to have an instance per phone?
372cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mImsManager = ImsManager.getInstance(getApplicationContext(),
373cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                SubscriptionManager.getDefaultVoicePhoneId());
374cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
3759053f17b81f7a2486d8a441cd0a06b43fbbbf20fMeng Wang        mDeviceId = (TextView) findViewById(R.id.imei);
376afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        number = (TextView) findViewById(R.id.number);
3779053f17b81f7a2486d8a441cd0a06b43fbbbf20fMeng Wang        mSubscriberId = (TextView) findViewById(R.id.imsi);
378afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        callState = (TextView) findViewById(R.id.call);
379afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        operatorName = (TextView) findViewById(R.id.operator);
380afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        roamingState = (TextView) findViewById(R.id.roaming);
381afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gsmState = (TextView) findViewById(R.id.gsm);
382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gprsState = (TextView) findViewById(R.id.gprs);
3832b77d7460ccebd97826529f186596df14050f0aeNathan Harold        voiceNetwork = (TextView) findViewById(R.id.voice_network);
3842b77d7460ccebd97826529f186596df14050f0aeNathan Harold        dataNetwork = (TextView) findViewById(R.id.data_network);
385afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dBm = (TextView) findViewById(R.id.dbm);
386afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMwi = (TextView) findViewById(R.id.mwi);
387afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mCfi = (TextView) findViewById(R.id.cfi);
388afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mLocation = (TextView) findViewById(R.id.location);
389afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mNeighboringCids = (TextView) findViewById(R.id.neighboring);
39079bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        mCellInfo = (TextView) findViewById(R.id.cellinfo);
391cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mCellInfo.setTypeface(Typeface.MONOSPACE);
3924f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville        mDcRtInfoTv = (TextView) findViewById(R.id.dcrtinfo);
393afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
394afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        sent = (TextView) findViewById(R.id.sent);
395afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        received = (TextView) findViewById(R.id.received);
396afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        smsc = (EditText) findViewById(R.id.smsc);
397afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
398cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameV4 = (TextView) findViewById(R.id.pingHostnameV4);
399cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameV6 = (TextView) findViewById(R.id.pingHostnameV6);
400afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
401afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
402afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
403afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
404afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
405342101a0729a30587dc4fa79b5f017634bd985c0johnwang        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
406afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        preferredNetworkType.setAdapter(adapter);
407afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
4082b77d7460ccebd97826529f186596df14050f0aeNathan Harold        cellInfoRefreshRateSpinner = (Spinner) findViewById(R.id.cell_info_rate_select);
4092b77d7460ccebd97826529f186596df14050f0aeNathan Harold        ArrayAdapter<String> cellInfoAdapter = new ArrayAdapter<String>(this,
4102b77d7460ccebd97826529f186596df14050f0aeNathan Harold                android.R.layout.simple_spinner_item, mCellInfoRefreshRateLabels);
4112b77d7460ccebd97826529f186596df14050f0aeNathan Harold        cellInfoAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
4122b77d7460ccebd97826529f186596df14050f0aeNathan Harold        cellInfoRefreshRateSpinner.setAdapter(cellInfoAdapter);
413afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
41412e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsVolteProvisionedSwitch = (Switch) findViewById(R.id.volte_provisioned_switch);
41512e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsVtProvisionedSwitch = (Switch) findViewById(R.id.vt_provisioned_switch);
41612e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsWfcProvisionedSwitch = (Switch) findViewById(R.id.wfc_provisioned_switch);
41769439b5e47d10dc2f1efa5289b0e23dfed5c6579Meng Wang        eabProvisionedSwitch = (Switch) findViewById(R.id.eab_provisioned_switch);
418bf4712895a570ce360db57f775b47c858f1d71b2Wink Saville
4192b77d7460ccebd97826529f186596df14050f0aeNathan Harold        radioPowerOnSwitch = (Switch) findViewById(R.id.radio_power);
420426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
421afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        pingTestButton = (Button) findViewById(R.id.ping_test);
422afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        pingTestButton.setOnClickListener(mPingButtonHandler);
423afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateSmscButton = (Button) findViewById(R.id.update_smsc);
424afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
425afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
426afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
427afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
428afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
429fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang        carrierProvisioningButton = (Button) findViewById(R.id.carrier_provisioning);
430fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang        carrierProvisioningButton.setOnClickListener(mCarrierProvisioningButtonHandler);
431fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang        triggercarrierProvisioningButton = (Button) findViewById(R.id.trigger_carrier_provisioning);
432fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang        triggercarrierProvisioningButton.setOnClickListener(
433fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang                mTriggerCarrierProvisioningButtonHandler);
434342101a0729a30587dc4fa79b5f017634bd985c0johnwang
435a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        oemInfoButton = (Button) findViewById(R.id.oem_info);
436a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
437a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        PackageManager pm = getPackageManager();
438a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
439a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
440a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        if (oemInfoIntentList.size() == 0) {
441a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            oemInfoButton.setEnabled(false);
442a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        }
443a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink
444ed38afafd874f922b6eadbb8535197ae1c6e0e8cNathan Harold        mCellInfoRefreshRateIndex = 0; //disabled
445cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPreferredNetworkTypeResult = mPreferredNetworkLabels.length - 1; //Unknown
446cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
447cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        //FIXME: Replace with TelephonyManager call
448afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        phone.getPreferredNetworkType(
449afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
45079bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville
451cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        restoreFromBundle(icicle);
452afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
453afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
454afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
455afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onResume() {
456afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
457afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
458cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        log("Started onResume");
459cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
460afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateMessageWaiting();
461afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateCallRedirect();
462afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDataState();
463afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDataStats2();
4642b77d7460ccebd97826529f186596df14050f0aeNathan Harold        updateRadioPowerState();
46512e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        updateImsProvisionedState();
466afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateProperties();
467afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDnsCheckState();
4682b77d7460ccebd97826529f186596df14050f0aeNathan Harold        updateNetworkType();
469afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
470cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        updateNeighboringCids(mNeighboringCellResult);
471cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        updateLocation(mCellLocationResult);
472cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        updateCellInfo(mCellInfoResult);
473cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
474cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameV4.setText(mPingHostnameResultV4);
475cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameV6.setText(mPingHostnameResultV6);
476cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mHttpClientTest.setText(mHttpClientTestResult);
477afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
4782b77d7460ccebd97826529f186596df14050f0aeNathan Harold        cellInfoRefreshRateSpinner.setOnItemSelectedListener(mCellInfoRefreshRateHandler);
479ed38afafd874f922b6eadbb8535197ae1c6e0e8cNathan Harold        //set selection after registering listener to force update
480ed38afafd874f922b6eadbb8535197ae1c6e0e8cNathan Harold        cellInfoRefreshRateSpinner.setSelection(mCellInfoRefreshRateIndex);
481ed38afafd874f922b6eadbb8535197ae1c6e0e8cNathan Harold
482ed38afafd874f922b6eadbb8535197ae1c6e0e8cNathan Harold        //set selection before registering to prevent update
483ed38afafd874f922b6eadbb8535197ae1c6e0e8cNathan Harold        preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
4842b77d7460ccebd97826529f186596df14050f0aeNathan Harold        preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
485ed38afafd874f922b6eadbb8535197ae1c6e0e8cNathan Harold
4862b77d7460ccebd97826529f186596df14050f0aeNathan Harold        radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
48712e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
48812e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
48912e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
490586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        eabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
4912b77d7460ccebd97826529f186596df14050f0aeNathan Harold
492afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTelephonyManager.listen(mPhoneStateListener,
4932b77d7460ccebd97826529f186596df14050f0aeNathan Harold                  PhoneStateListener.LISTEN_CALL_STATE
4942b77d7460ccebd97826529f186596df14050f0aeNathan Harold        //b/27803938 - RadioInfo currently cannot read PRECISE_CALL_STATE
4952b77d7460ccebd97826529f186596df14050f0aeNathan Harold        //      | PhoneStateListener.LISTEN_PRECISE_CALL_STATE
4962b77d7460ccebd97826529f186596df14050f0aeNathan Harold                | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
497afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                | PhoneStateListener.LISTEN_DATA_ACTIVITY
498afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                | PhoneStateListener.LISTEN_CELL_LOCATION
499afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
50079bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
5014f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville                | PhoneStateListener.LISTEN_CELL_INFO
5022b77d7460ccebd97826529f186596df14050f0aeNathan Harold                | PhoneStateListener.LISTEN_SERVICE_STATE
5032b77d7460ccebd97826529f186596df14050f0aeNathan Harold                | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
5044f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville                | PhoneStateListener.LISTEN_DATA_CONNECTION_REAL_TIME_INFO);
505ed38afafd874f922b6eadbb8535197ae1c6e0e8cNathan Harold
506ed38afafd874f922b6eadbb8535197ae1c6e0e8cNathan Harold        smsc.clearFocus();
507afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
508afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
509afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
510cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    protected void onPause() {
511afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onPause();
512afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
513bf4712895a570ce360db57f775b47c858f1d71b2Wink Saville        log("onPause: unregister phone & data intents");
514afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
515afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
5165cce06b2e88aa0f20741ebe7f880580dad65307aSooraj Sasindran        mTelephonyManager.setCellInfoListRate(CELL_INFO_LIST_RATE_DISABLED);
517afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
518afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
519cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private void restoreFromBundle(Bundle b) {
520e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold        if(b == null) {
521cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            return;
522cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        }
523cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
524cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameResultV4 = b.getString("mPingHostnameResultV4","");
525cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameResultV6 = b.getString("mPingHostnameResultV6","");
526cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mHttpClientTestResult = b.getString("mHttpClientTestResult","");
527cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
528cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameV4.setText(mPingHostnameResultV4);
529cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameV6.setText(mPingHostnameResultV6);
530cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mHttpClientTest.setText(mHttpClientTestResult);
531cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
5322b77d7460ccebd97826529f186596df14050f0aeNathan Harold        mPreferredNetworkTypeResult = b.getInt("mPreferredNetworkTypeResult",
5332b77d7460ccebd97826529f186596df14050f0aeNathan Harold                                               mPreferredNetworkLabels.length - 1);
5342b77d7460ccebd97826529f186596df14050f0aeNathan Harold
5352b77d7460ccebd97826529f186596df14050f0aeNathan Harold        mCellInfoRefreshRateIndex = b.getInt("mCellInfoRefreshRateIndex", 0);
536cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
537cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
538cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    @Override
539cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    protected void onSaveInstanceState(Bundle outState) {
540cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        outState.putString("mPingHostnameResultV4", mPingHostnameResultV4);
541cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        outState.putString("mPingHostnameResultV6", mPingHostnameResultV6);
542cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        outState.putString("mHttpClientTestResult", mHttpClientTestResult);
5432b77d7460ccebd97826529f186596df14050f0aeNathan Harold
544cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        outState.putInt("mPreferredNetworkTypeResult", mPreferredNetworkTypeResult);
5452b77d7460ccebd97826529f186596df14050f0aeNathan Harold        outState.putInt("mCellInfoRefreshRateIndex", mCellInfoRefreshRateIndex);
5462b77d7460ccebd97826529f186596df14050f0aeNathan Harold
547cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
548cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
549afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
550afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onCreateOptionsMenu(Menu menu) {
551c38866843e966622346dc8f7b028749cac9c2198Wink Saville        menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label)
552c38866843e966622346dc8f7b028749cac9c2198Wink Saville                .setOnMenuItemClickListener(mSelectBandCallback)
553afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                .setAlphabeticShortcut('b');
554afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_VIEW_ADN, 0,
555afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
556afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_VIEW_FDN, 0,
557afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
558afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_VIEW_SDN, 0,
559afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
560e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold        menu.add(1, MENU_ITEM_GET_IMS_STATUS,
561e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                0, R.string.radioInfo_menu_getIMS).setOnMenuItemClickListener(mGetImsStatus);
562afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_TOGGLE_DATA,
5632b77d7460ccebd97826529f186596df14050f0aeNathan Harold                0, R.string.radio_info_data_connection_disable).setOnMenuItemClickListener(mToggleData);
564afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return true;
565afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
566afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
567afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
568c38866843e966622346dc8f7b028749cac9c2198Wink Saville    public boolean onPrepareOptionsMenu(Menu menu) {
569afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Get the TOGGLE DATA menu item in the right state.
570afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
571afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int state = mTelephonyManager.getDataState();
572afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        boolean visible = true;
573afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
574afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
575afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_CONNECTED:
576afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_SUSPENDED:
5772b77d7460ccebd97826529f186596df14050f0aeNathan Harold                item.setTitle(R.string.radio_info_data_connection_disable);
578afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
579afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_DISCONNECTED:
5802b77d7460ccebd97826529f186596df14050f0aeNathan Harold                item.setTitle(R.string.radio_info_data_connection_enable);
581afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
582afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            default:
583afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                visible = false;
584afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
585afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
586afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        item.setVisible(visible);
587afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return true;
588afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
589afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
590afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void updateDnsCheckState() {
591cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        //FIXME: Replace with a TelephonyManager call
5925304c7e38f89f7616bd4c834a14b4d764356d19bMike Lockwood        dnsCheckState.setText(phone.isDnsCheckDisabled() ?
593afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                "0.0.0.0 allowed" :"0.0.0.0 not allowed");
594afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
595e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville
596afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
5972b77d7460ccebd97826529f186596df14050f0aeNathan Harold    updateSignalStrength(SignalStrength signalStrength) {
598afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
599afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
6002b77d7460ccebd97826529f186596df14050f0aeNathan Harold        int signalDbm = signalStrength.getDbm();
601afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
6022b77d7460ccebd97826529f186596df14050f0aeNathan Harold        int signalAsu = signalStrength.getAsuLevel();
603afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
604afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (-1 == signalAsu) signalAsu = 0;
605afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
606afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dBm.setText(String.valueOf(signalDbm) + " "
607afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            + r.getString(R.string.radioInfo_display_dbm) + "   "
608afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            + String.valueOf(signalAsu) + " "
609afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            + r.getString(R.string.radioInfo_display_asu));
610afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
611afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
612afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateLocation(CellLocation location) {
613534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh        Resources r = getResources();
614c38866843e966622346dc8f7b028749cac9c2198Wink Saville        if (location instanceof GsmCellLocation) {
615c38866843e966622346dc8f7b028749cac9c2198Wink Saville            GsmCellLocation loc = (GsmCellLocation)location;
616534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int lac = loc.getLac();
617534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int cid = loc.getCid();
618534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
619534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
620534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
621534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + r.getString(R.string.radioInfo_cid) + " = "
622534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
623534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh        } else if (location instanceof CdmaCellLocation) {
624534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            CdmaCellLocation loc = (CdmaCellLocation)location;
625534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int bid = loc.getBaseStationId();
626534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int sid = loc.getSystemId();
627534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int nid = loc.getNetworkId();
628534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int lat = loc.getBaseStationLatitude();
629534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int lon = loc.getBaseStationLongitude();
630534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            mLocation.setText("BID = "
631534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((bid == -1) ? "unknown" : Integer.toHexString(bid))
632534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
633534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "SID = "
634534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((sid == -1) ? "unknown" : Integer.toHexString(sid))
635534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
636534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "NID = "
637534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((nid == -1) ? "unknown" : Integer.toHexString(nid))
638534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "\n"
639534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "LAT = "
640534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((lat == -1) ? "unknown" : Integer.toHexString(lat))
641534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
642534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "LONG = "
643534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((lon == -1) ? "unknown" : Integer.toHexString(lon)));
644534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh        } else {
645534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            mLocation.setText("unknown");
646c38866843e966622346dc8f7b028749cac9c2198Wink Saville        }
647afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
648afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
649afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
650afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
651cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private final void updateNeighboringCids(List<NeighboringCellInfo> cids) {
652f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang        StringBuilder sb = new StringBuilder();
653f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang
654afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (cids != null) {
655e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            if (cids.isEmpty()) {
656f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang                sb.append("no neighboring cells");
657afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
658afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                for (NeighboringCellInfo cell : cids) {
659f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang                    sb.append(cell.toString()).append(" ");
660afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                }
661afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
662afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
663f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang            sb.append("unknown");
664afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
665f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang        mNeighboringCids.setText(sb.toString());
666afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
667afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
668cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private final String getCellInfoDisplayString(int i) {
669cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        return (i != Integer.MAX_VALUE) ? Integer.toString(i) : "";
670cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
671cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
672cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private final String getCellInfoDisplayString(long i) {
673cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        return (i != Long.MAX_VALUE) ? Long.toString(i) : "";
674cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
675cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
676cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private final String buildCdmaInfoString(CellInfoCdma ci) {
677cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        CellIdentityCdma cidCdma = ci.getCellIdentity();
678cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        CellSignalStrengthCdma ssCdma = ci.getCellSignalStrength();
679cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
680cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        return String.format("%-3.3s %-5.5s %-5.5s %-5.5s %-6.6s %-6.6s %-6.6s %-6.6s %-5.5s",
681cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                ci.isRegistered() ? "S  " : "   ",
682cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidCdma.getSystemId()),
683cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidCdma.getNetworkId()),
684cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidCdma.getBasestationId()),
685cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(ssCdma.getCdmaDbm()),
686cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(ssCdma.getCdmaEcio()),
687cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(ssCdma.getEvdoDbm()),
688cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(ssCdma.getEvdoEcio()),
689cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(ssCdma.getEvdoSnr()));
690cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
691cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
692cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private final String buildGsmInfoString(CellInfoGsm ci) {
693cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        CellIdentityGsm cidGsm = ci.getCellIdentity();
694cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        CellSignalStrengthGsm ssGsm = ci.getCellSignalStrength();
695cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
6962b77d7460ccebd97826529f186596df14050f0aeNathan Harold        return String.format("%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-4.4s %-4.4s\n",
697cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                ci.isRegistered() ? "S  " : "   ",
698cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidGsm.getMcc()),
699cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidGsm.getMnc()),
700cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidGsm.getLac()),
701cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidGsm.getCid()),
7022b77d7460ccebd97826529f186596df14050f0aeNathan Harold                getCellInfoDisplayString(cidGsm.getArfcn()),
7032b77d7460ccebd97826529f186596df14050f0aeNathan Harold                getCellInfoDisplayString(cidGsm.getBsic()),
704cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(ssGsm.getDbm()));
705cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
706cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
707cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private final String buildLteInfoString(CellInfoLte ci) {
708cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        CellIdentityLte cidLte = ci.getCellIdentity();
709cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        CellSignalStrengthLte ssLte = ci.getCellSignalStrength();
710cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
711cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        return String.format(
7122b77d7460ccebd97826529f186596df14050f0aeNathan Harold                "%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-3.3s %-6.6s %-4.4s %-4.4s %-2.2s\n",
713cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                ci.isRegistered() ? "S  " : "   ",
714cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidLte.getMcc()),
715cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidLte.getMnc()),
716cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidLte.getTac()),
717cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidLte.getCi()),
718cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidLte.getPci()),
7192b77d7460ccebd97826529f186596df14050f0aeNathan Harold                getCellInfoDisplayString(cidLte.getEarfcn()),
720cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(ssLte.getDbm()),
721cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(ssLte.getRsrq()),
722cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(ssLte.getTimingAdvance()));
723cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
724cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
725cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private final String buildWcdmaInfoString(CellInfoWcdma ci) {
726cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        CellIdentityWcdma cidWcdma = ci.getCellIdentity();
727cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        CellSignalStrengthWcdma ssWcdma = ci.getCellSignalStrength();
728cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
7292b77d7460ccebd97826529f186596df14050f0aeNathan Harold        return String.format("%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-3.3s %-4.4s\n",
730cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                ci.isRegistered() ? "S  " : "   ",
731cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidWcdma.getMcc()),
732cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidWcdma.getMnc()),
733cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidWcdma.getLac()),
734cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidWcdma.getCid()),
7352b77d7460ccebd97826529f186596df14050f0aeNathan Harold                getCellInfoDisplayString(cidWcdma.getUarfcn()),
736cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(cidWcdma.getPsc()),
737cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                getCellInfoDisplayString(ssWcdma.getDbm()));
738cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
739cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
740cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private final String buildCellInfoString(List<CellInfo> arrayCi) {
741cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        String value = new String();
742cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        StringBuilder cdmaCells = new StringBuilder(),
743cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                gsmCells = new StringBuilder(),
744cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                lteCells = new StringBuilder(),
745cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                wcdmaCells = new StringBuilder();
746cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
747cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        if (arrayCi != null) {
748cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            for (CellInfo ci : arrayCi) {
749cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
750cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                if (ci instanceof CellInfoLte) {
751cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    lteCells.append(buildLteInfoString((CellInfoLte) ci));
752cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                } else if (ci instanceof CellInfoWcdma) {
753cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    wcdmaCells.append(buildWcdmaInfoString((CellInfoWcdma) ci));
754cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                } else if (ci instanceof CellInfoGsm) {
755cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    gsmCells.append(buildGsmInfoString((CellInfoGsm) ci));
756cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                } else if (ci instanceof CellInfoCdma) {
757cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    cdmaCells.append(buildCdmaInfoString((CellInfoCdma) ci));
75879bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                }
75979bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville            }
760cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            if (lteCells.length() != 0) {
761cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                value += String.format(
7622b77d7460ccebd97826529f186596df14050f0aeNathan Harold                        "LTE\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-3.3s %-6.6s %-4.4s %-4.4s %-2.2s\n",
7632b77d7460ccebd97826529f186596df14050f0aeNathan Harold                        "SRV", "MCC", "MNC", "TAC", "CID", "PCI", "EARFCN", "RSRP", "RSRQ", "TA");
764cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                value += lteCells.toString();
765cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            }
766cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            if (wcdmaCells.length() != 0) {
7672b77d7460ccebd97826529f186596df14050f0aeNathan Harold                value += String.format("WCDMA\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-3.3s %-4.4s\n",
7682b77d7460ccebd97826529f186596df14050f0aeNathan Harold                        "SRV", "MCC", "MNC", "LAC", "CID", "UARFCN", "PSC", "RSCP");
769cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                value += wcdmaCells.toString();
770cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            }
771cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            if (gsmCells.length() != 0) {
7722b77d7460ccebd97826529f186596df14050f0aeNathan Harold                value += String.format("GSM\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-4.4s %-4.4s\n",
7732b77d7460ccebd97826529f186596df14050f0aeNathan Harold                        "SRV", "MCC", "MNC", "LAC", "CID", "ARFCN", "BSIC", "RSSI");
774cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                value += gsmCells.toString();
775cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            }
776cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            if (cdmaCells.length() != 0) {
777cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                value += String.format(
778cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                        "CDMA/EVDO\n%-3.3s %-5.5s %-5.5s %-5.5s %-6.6s %-6.6s %-6.6s %-6.6s %-5.5s\n",
779cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                        "SRV", "SID", "NID", "BSID", "C-RSSI", "C-ECIO", "E-RSSI", "E-ECIO", "E-SNR");
780cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                value += cdmaCells.toString();
781cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            }
782cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        } else {
783cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            value ="unknown";
78479bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        }
785cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
786cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        return value.toString();
787cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
788cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
789cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private final void updateCellInfo(List<CellInfo> arrayCi) {
790cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mCellInfo.setText(buildCellInfoString(arrayCi));
79179bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville    }
79279bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville
7934f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville    private final void updateDcRtInfoTv(DataConnectionRealTimeInfo dcRtInfo) {
7944f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville        mDcRtInfoTv.setText(dcRtInfo.toString());
7954f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville    }
7964f0d881871edde6430e9dad045c8a9bdf1f7f904Wink Saville
797afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
798afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateMessageWaiting() {
799afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMwi.setText(String.valueOf(mMwiValue));
800afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
801afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
802afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
803afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateCallRedirect() {
804afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mCfi.setText(String.valueOf(mCfiValue));
805afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
806afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
807afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
808afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
8092b77d7460ccebd97826529f186596df14050f0aeNathan Harold    updateServiceState(ServiceState serviceState) {
810afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int state = serviceState.getState();
811afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
812afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = r.getString(R.string.radioInfo_unknown);
813342101a0729a30587dc4fa79b5f017634bd985c0johnwang
814afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
815afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_IN_SERVICE:
816afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_service_in);
817afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
818afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_OUT_OF_SERVICE:
819afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_EMERGENCY_ONLY:
820afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_service_emergency);
821afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
822afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_POWER_OFF:
823afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_service_off);
824afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
825afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
826342101a0729a30587dc4fa79b5f017634bd985c0johnwang
827afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gsmState.setText(display);
828342101a0729a30587dc4fa79b5f017634bd985c0johnwang
829afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (serviceState.getRoaming()) {
830afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            roamingState.setText(R.string.radioInfo_roaming_in);
831afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
832afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            roamingState.setText(R.string.radioInfo_roaming_not);
833afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
834afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
835afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        operatorName.setText(serviceState.getOperatorAlphaLong());
836afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
837afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
838afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
8392b77d7460ccebd97826529f186596df14050f0aeNathan Harold    updatePhoneState(int state) {
840afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
841afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = r.getString(R.string.radioInfo_unknown);
842afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
843afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
8442b77d7460ccebd97826529f186596df14050f0aeNathan Harold            case TelephonyManager.CALL_STATE_IDLE:
845afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_phone_idle);
846afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
8472b77d7460ccebd97826529f186596df14050f0aeNathan Harold            case TelephonyManager.CALL_STATE_RINGING:
848afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_phone_ringing);
849afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
8502b77d7460ccebd97826529f186596df14050f0aeNathan Harold            case TelephonyManager.CALL_STATE_OFFHOOK:
851afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_phone_offhook);
852afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
853afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
854afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
855afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        callState.setText(display);
856afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
857afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
858afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
859afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateDataState() {
860afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int state = mTelephonyManager.getDataState();
861afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
862afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = r.getString(R.string.radioInfo_unknown);
863afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
864afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
865afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_CONNECTED:
866afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_connected);
867afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
868afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_CONNECTING:
869afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_connecting);
870afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
871afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_DISCONNECTED:
872afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_disconnected);
873afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
874afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_SUSPENDED:
875afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_suspended);
876afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
877afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
878342101a0729a30587dc4fa79b5f017634bd985c0johnwang
879afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gprsState.setText(display);
880afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
881afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
882afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateNetworkType() {
883e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold        if(phone != null) {
8842b77d7460ccebd97826529f186596df14050f0aeNathan Harold            ServiceState ss = phone.getServiceState();
8852b77d7460ccebd97826529f186596df14050f0aeNathan Harold            dataNetwork.setText(ServiceState.rilRadioTechnologyToString(
8862b77d7460ccebd97826529f186596df14050f0aeNathan Harold                    phone.getServiceState().getRilDataRadioTechnology()));
8872b77d7460ccebd97826529f186596df14050f0aeNathan Harold            voiceNetwork.setText(ServiceState.rilRadioTechnologyToString(
8882b77d7460ccebd97826529f186596df14050f0aeNathan Harold                    phone.getServiceState().getRilVoiceRadioTechnology()));
8892b77d7460ccebd97826529f186596df14050f0aeNathan Harold        }
890afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
891afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
892afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
893afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateProperties() {
894afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String s;
895afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
896afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
897afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = phone.getDeviceId();
898342101a0729a30587dc4fa79b5f017634bd985c0johnwang        if (s == null) s = r.getString(R.string.radioInfo_unknown);
899c38866843e966622346dc8f7b028749cac9c2198Wink Saville        mDeviceId.setText(s);
900342101a0729a30587dc4fa79b5f017634bd985c0johnwang
9019053f17b81f7a2486d8a441cd0a06b43fbbbf20fMeng Wang        s = phone.getSubscriberId();
9029053f17b81f7a2486d8a441cd0a06b43fbbbf20fMeng Wang        if (s == null) s = r.getString(R.string.radioInfo_unknown);
9039053f17b81f7a2486d8a441cd0a06b43fbbbf20fMeng Wang        mSubscriberId.setText(s);
9049053f17b81f7a2486d8a441cd0a06b43fbbbf20fMeng Wang
905cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        //FIXME: Replace with a TelephonyManager call
906afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = phone.getLine1Number();
907342101a0729a30587dc4fa79b5f017634bd985c0johnwang        if (s == null) s = r.getString(R.string.radioInfo_unknown);
908afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        number.setText(s);
909afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
910afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
911afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateDataStats2() {
912afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
913afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
9149302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        long txPackets = TrafficStats.getMobileTxPackets();
9159302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        long rxPackets = TrafficStats.getMobileRxPackets();
9169302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        long txBytes   = TrafficStats.getMobileTxBytes();
9179302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        long rxBytes   = TrafficStats.getMobileRxBytes();
918342101a0729a30587dc4fa79b5f017634bd985c0johnwang
9199302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        String packets = r.getString(R.string.radioInfo_display_packets);
9209302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        String bytes   = r.getString(R.string.radioInfo_display_bytes);
921342101a0729a30587dc4fa79b5f017634bd985c0johnwang
9229302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
9239302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
924afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
925afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
926afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
927afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     *  Ping a host name
928afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
929afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void pingHostname() {
930afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        try {
931cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            try {
932cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                Process p4 = Runtime.getRuntime().exec("ping -c 1 www.google.com");
933cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                int status4 = p4.waitFor();
934cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                if (status4 == 0) {
935cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    mPingHostnameResultV4 = "Pass";
936cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                } else {
937cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    mPingHostnameResultV4 = String.format("Fail(%d)", status4);
938cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                }
939cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            } catch (IOException e) {
940cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mPingHostnameResultV4 = "Fail: IOException";
941cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            }
942cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            try {
943cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                Process p6 = Runtime.getRuntime().exec("ping6 -c 1 www.google.com");
944cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                int status6 = p6.waitFor();
945cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                if (status6 == 0) {
946cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    mPingHostnameResultV6 = "Pass";
947cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                } else {
948cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    mPingHostnameResultV6 = String.format("Fail(%d)", status6);
949cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                }
950cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            } catch (IOException e) {
951cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mPingHostnameResultV6 = "Fail: IOException";
952afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
953afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (InterruptedException e) {
954cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            mPingHostnameResultV4 = mPingHostnameResultV6 = "Fail: InterruptedException";
955afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
956afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
957afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
958afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
959afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * This function checks for basic functionality of HTTP Client.
960afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
961afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void httpClientTest() {
962f25627c0c960cd31e069a0aed62798dd3a6416aaNarayan Kamath        HttpURLConnection urlConnection = null;
963afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        try {
964f25627c0c960cd31e069a0aed62798dd3a6416aaNarayan Kamath            // TODO: Hardcoded for now, make it UI configurable
965b009023c76227b6c984652683be7d054033eb935Alex Klyubin            URL url = new URL("https://www.google.com");
966f25627c0c960cd31e069a0aed62798dd3a6416aaNarayan Kamath            urlConnection = (HttpURLConnection) url.openConnection();
967f25627c0c960cd31e069a0aed62798dd3a6416aaNarayan Kamath            if (urlConnection.getResponseCode() == 200) {
968afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHttpClientTestResult = "Pass";
969afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
970f25627c0c960cd31e069a0aed62798dd3a6416aaNarayan Kamath                mHttpClientTestResult = "Fail: Code: " + urlConnection.getResponseMessage();
971afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
972afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (IOException e) {
973afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mHttpClientTestResult = "Fail: IOException";
974f25627c0c960cd31e069a0aed62798dd3a6416aaNarayan Kamath        } finally {
975f25627c0c960cd31e069a0aed62798dd3a6416aaNarayan Kamath            if (urlConnection != null) {
976f25627c0c960cd31e069a0aed62798dd3a6416aaNarayan Kamath                urlConnection.disconnect();
977f25627c0c960cd31e069a0aed62798dd3a6416aaNarayan Kamath            }
978afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
979afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
980afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
981afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void refreshSmsc() {
982cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        //FIXME: Replace with a TelephonyManager call
98321dd407c10bb1bade10233e8468ea6729bcf71efjsh        phone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
984afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
985afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
986cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    private final void updateAllCellInfo() {
987cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
988cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mCellInfo.setText("");
989cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mNeighboringCids.setText("");
990cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mLocation.setText("");
991cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
992cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        final Runnable updateAllCellInfoResults = new Runnable() {
993cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            public void run() {
994cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                updateNeighboringCids(mNeighboringCellResult);
995cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                updateLocation(mCellLocationResult);
996cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                updateCellInfo(mCellInfoResult);
997cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            }
998cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        };
999cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
1000cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        Thread locThread = new Thread() {
1001cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            @Override
1002cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            public void run() {
1003cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mCellInfoResult = mTelephonyManager.getAllCellInfo();
1004cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mCellLocationResult = mTelephonyManager.getCellLocation();
1005cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mNeighboringCellResult = mTelephonyManager.getNeighboringCellInfo();
1006cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
1007cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mHandler.post(updateAllCellInfoResults);
1008cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            }
1009cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        };
1010cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        locThread.start();
1011cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    }
1012cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
1013afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updatePingState() {
1014afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Set all to unknown since the threads will take a few secs to update.
1015cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameResultV4 = getResources().getString(R.string.radioInfo_unknown);
1016cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameResultV6 = getResources().getString(R.string.radioInfo_unknown);
1017afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
1018afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1019cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameV4.setText(mPingHostnameResultV4);
1020cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold        mPingHostnameV6.setText(mPingHostnameResultV6);
1021afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mHttpClientTest.setText(mHttpClientTestResult);
1022afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1023afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        final Runnable updatePingResults = new Runnable() {
1024afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
1025cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mPingHostnameV4.setText(mPingHostnameResultV4);
1026cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mPingHostnameV6.setText(mPingHostnameResultV6);
1027afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHttpClientTest.setText(mHttpClientTestResult);
1028afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
1029afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
1030afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1031afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Thread hostname = new Thread() {
1032afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            @Override
1033afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
1034afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                pingHostname();
1035cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mHandler.post(updatePingResults);
1036afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
1037afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
1038afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        hostname.start();
1039afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1040afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Thread httpClient = new Thread() {
1041afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            @Override
1042afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
1043afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                httpClientTest();
1044cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mHandler.post(updatePingResults);
1045afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
1046afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
1047afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        httpClient.start();
1048afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
1049afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1050afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
1051afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
1052afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Intent intent = new Intent(Intent.ACTION_VIEW);
1053afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // XXX We need to specify the component here because if we don't
1054afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the activity manager will try to resolve the type by calling
1055afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the content provider, which causes it to be loaded in a process
1056afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // other than the Dialer process, which causes a lot of stuff to
1057afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // break.
1058afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            intent.setClassName("com.android.phone",
1059afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    "com.android.phone.SimContacts");
1060afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            startActivity(intent);
1061afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
1062afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1063afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1064afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1065afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
1066afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
1067afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Intent intent = new Intent(Intent.ACTION_VIEW);
1068afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // XXX We need to specify the component here because if we don't
1069afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the activity manager will try to resolve the type by calling
1070afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the content provider, which causes it to be loaded in a process
1071afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // other than the Dialer process, which causes a lot of stuff to
1072afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // break.
1073afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            intent.setClassName("com.android.phone",
1074da90d68b58091a284e1a9edeb5260ff8c51a25d1Andrew Lee                    "com.android.phone.settings.fdn.FdnList");
1075afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            startActivity(intent);
1076afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
1077afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1078afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1079afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1080afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
1081afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
1082afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Intent intent = new Intent(
1083c38866843e966622346dc8f7b028749cac9c2198Wink Saville                    Intent.ACTION_VIEW, Uri.parse("content://icc/sdn"));
1084afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // XXX We need to specify the component here because if we don't
1085afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the activity manager will try to resolve the type by calling
1086afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the content provider, which causes it to be loaded in a process
1087afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // other than the Dialer process, which causes a lot of stuff to
1088afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // break.
1089afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            intent.setClassName("com.android.phone",
1090afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    "com.android.phone.ADNList");
1091afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            startActivity(intent);
1092afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
1093afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1094afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1095afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1096e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold    private MenuItem.OnMenuItemClickListener mGetImsStatus = new MenuItem.OnMenuItemClickListener() {
1097a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        public boolean onMenuItemClick(MenuItem item) {
1098e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            boolean isImsRegistered = phone.isImsRegistered();
1099e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            boolean availableVolte = phone.isVolteEnabled();
1100e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            boolean availableWfc = phone.isWifiCallingEnabled();
1101e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            boolean availableVt = phone.isVideoEnabled();
1102e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            boolean availableUt = phone.isUtEnabled();
1103e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold
1104e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            final String imsRegString = isImsRegistered ?
1105e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                getString(R.string.radio_info_ims_reg_status_registered) :
1106e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                getString(R.string.radio_info_ims_reg_status_not_registered);
1107e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold
1108e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            final String available = getString(R.string.radio_info_ims_feature_status_available);
1109e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            final String unavailable = getString(
1110e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                    R.string.radio_info_ims_feature_status_unavailable);
1111e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold
1112e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            String imsStatus = getString(R.string.radio_info_ims_reg_status,
1113e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                    imsRegString,
1114e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                    availableVolte ? available : unavailable,
1115e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                    availableWfc ? available : unavailable,
1116e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                    availableVt ? available : unavailable,
1117e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                    availableUt ? available : unavailable);
1118e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold
1119e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            AlertDialog imsDialog = new AlertDialog.Builder(RadioInfo.this)
1120e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                .setMessage(imsStatus)
1121e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                .setTitle(getString(R.string.radio_info_ims_reg_status_title))
1122e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold                .create();
1123e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold
1124e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold            imsDialog.show();
1125e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold
1126a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            return true;
1127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1128a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    };
1129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1130a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
1131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
1132a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            Intent intent = new Intent();
1133a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            intent.setClass(RadioInfo.this, BandMode.class);
1134a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            startActivity(intent);
1135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
1136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1138342101a0729a30587dc4fa79b5f017634bd985c0johnwang
1139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
1140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
1141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            int state = mTelephonyManager.getDataState();
1142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            switch (state) {
1143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case TelephonyManager.DATA_CONNECTED:
1144cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    //FIXME: Replace with a TelephonyManager call
11450d4c500e98f7499db524c8073e2c8e9dfaa1febbRobert Greenwalt                    phone.setDataEnabled(false);
1146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
1147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case TelephonyManager.DATA_DISCONNECTED:
1148cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    //FIXME: Replace with a TelephonyManager call
11490d4c500e98f7499db524c8073e2c8e9dfaa1febbRobert Greenwalt                    phone.setDataEnabled(true);
1150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
1151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                default:
1152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    // do nothing
1153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
1154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
1155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
1156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
11592b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private boolean isRadioOn() {
11602b77d7460ccebd97826529f186596df14050f0aeNathan Harold        //FIXME: Replace with a TelephonyManager call
11612b77d7460ccebd97826529f186596df14050f0aeNathan Harold        return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
1162426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    }
1163426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
11642b77d7460ccebd97826529f186596df14050f0aeNathan Harold    private void updateRadioPowerState() {
11652b77d7460ccebd97826529f186596df14050f0aeNathan Harold        //delightful hack to prevent on-checked-changed calls from
11662b77d7460ccebd97826529f186596df14050f0aeNathan Harold        //actually forcing the radio preference to its transient/current value.
11672b77d7460ccebd97826529f186596df14050f0aeNathan Harold        radioPowerOnSwitch.setOnCheckedChangeListener(null);
11682b77d7460ccebd97826529f186596df14050f0aeNathan Harold        radioPowerOnSwitch.setChecked(isRadioOn());
11692b77d7460ccebd97826529f186596df14050f0aeNathan Harold        radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
1170426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    }
1171426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
1172e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold    void setImsVolteProvisionedState(boolean state) {
117312e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        Log.d(TAG, "setImsVolteProvisioned state: " + ((state)? "on":"off"));
1174e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold        setImsConfigProvisionedState(IMS_VOLTE_PROVISIONED_CONFIG_ID, state);
117512e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    }
1176382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville
1177e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold    void setImsVtProvisionedState(boolean state) {
117812e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        Log.d(TAG, "setImsVtProvisioned() state: " + ((state)? "on":"off"));
1179e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold        setImsConfigProvisionedState(IMS_VT_PROVISIONED_CONFIG_ID, state);
118012e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    }
118112e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
1182e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold    void setImsWfcProvisionedState(boolean state) {
118312e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        Log.d(TAG, "setImsWfcProvisioned() state: " + ((state)? "on":"off"));
1184e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold        setImsConfigProvisionedState(IMS_WFC_PROVISIONED_CONFIG_ID, state);
118512e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    }
11862b77d7460ccebd97826529f186596df14050f0aeNathan Harold
1187586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    void setEabProvisionedState(boolean state) {
1188586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        Log.d(TAG, "setEabProvisioned() state: " + ((state)? "on":"off"));
1189586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        setImsConfigProvisionedState(EAB_PROVISIONED_CONFIG_ID, state);
1190586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    }
1191586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang
1192e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold    void setImsConfigProvisionedState(int configItem, boolean state) {
11932b77d7460ccebd97826529f186596df14050f0aeNathan Harold        if (phone != null && mImsManager != null) {
11945c449ae5ce48aa579605ae61cdbb6a2a1a961e05Philip P. Moltmann            QueuedWork.queue(new Runnable() {
11952b77d7460ccebd97826529f186596df14050f0aeNathan Harold                public void run() {
11962b77d7460ccebd97826529f186596df14050f0aeNathan Harold                    try {
11972b77d7460ccebd97826529f186596df14050f0aeNathan Harold                        mImsManager.getConfigInterface().setProvisionedValue(
119812e1f55e926dd376ae17e48c1929524216222dbdNathan Harold                                configItem,
11992b77d7460ccebd97826529f186596df14050f0aeNathan Harold                                state? 1 : 0);
12002b77d7460ccebd97826529f186596df14050f0aeNathan Harold                    } catch (ImsException e) {
120112e1f55e926dd376ae17e48c1929524216222dbdNathan Harold                        Log.e(TAG, "setImsConfigProvisioned() exception:", e);
12022b77d7460ccebd97826529f186596df14050f0aeNathan Harold                    }
1203cb267a6f8caf42a7e2adf000262ae327ce4d5f32Pavel Zhamaitsiak                }
12045c449ae5ce48aa579605ae61cdbb6a2a1a961e05Philip P. Moltmann            }, false);
1205cb267a6f8caf42a7e2adf000262ae327ce4d5f32Pavel Zhamaitsiak        }
12062b77d7460ccebd97826529f186596df14050f0aeNathan Harold    }
1207cb267a6f8caf42a7e2adf000262ae327ce4d5f32Pavel Zhamaitsiak
120812e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    OnCheckedChangeListener mRadioPowerOnChangeListener = new OnCheckedChangeListener() {
120912e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        @Override
121012e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
121112e1f55e926dd376ae17e48c1929524216222dbdNathan Harold            log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
121212e1f55e926dd376ae17e48c1929524216222dbdNathan Harold            phone.setRadioPower(isChecked);
121312e1f55e926dd376ae17e48c1929524216222dbdNathan Harold       }
121412e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    };
121512e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
121612e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    private boolean isImsVolteProvisioned() {
12172b77d7460ccebd97826529f186596df14050f0aeNathan Harold        if (phone != null && mImsManager != null) {
12182b77d7460ccebd97826529f186596df14050f0aeNathan Harold            return mImsManager.isVolteEnabledByPlatform(phone.getContext())
12192b77d7460ccebd97826529f186596df14050f0aeNathan Harold                && mImsManager.isVolteProvisionedOnDevice(phone.getContext());
1220cb267a6f8caf42a7e2adf000262ae327ce4d5f32Pavel Zhamaitsiak        }
1221cb267a6f8caf42a7e2adf000262ae327ce4d5f32Pavel Zhamaitsiak        return false;
1222cb267a6f8caf42a7e2adf000262ae327ce4d5f32Pavel Zhamaitsiak    }
1223cb267a6f8caf42a7e2adf000262ae327ce4d5f32Pavel Zhamaitsiak
122412e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    OnCheckedChangeListener mImsVolteCheckedChangeListener = new OnCheckedChangeListener() {
1225426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        @Override
12262b77d7460ccebd97826529f186596df14050f0aeNathan Harold        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
122712e1f55e926dd376ae17e48c1929524216222dbdNathan Harold            setImsVolteProvisionedState(isChecked);
1228e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold        }
1229426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    };
1230426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
123112e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    private boolean isImsVtProvisioned() {
123212e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        if (phone != null && mImsManager != null) {
123312e1f55e926dd376ae17e48c1929524216222dbdNathan Harold            return mImsManager.isVtEnabledByPlatform(phone.getContext())
123412e1f55e926dd376ae17e48c1929524216222dbdNathan Harold                && mImsManager.isVtProvisionedOnDevice(phone.getContext());
123512e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        }
123612e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        return false;
123712e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    }
123812e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
123912e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    OnCheckedChangeListener mImsVtCheckedChangeListener = new OnCheckedChangeListener() {
124012e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        @Override
124112e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
124212e1f55e926dd376ae17e48c1929524216222dbdNathan Harold            setImsVtProvisionedState(isChecked);
1243e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold        }
124412e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    };
124512e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
124612e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    private boolean isImsWfcProvisioned() {
124712e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        if (phone != null && mImsManager != null) {
124812e1f55e926dd376ae17e48c1929524216222dbdNathan Harold            return mImsManager.isWfcEnabledByPlatform(phone.getContext())
124912e1f55e926dd376ae17e48c1929524216222dbdNathan Harold                && mImsManager.isWfcProvisionedOnDevice(phone.getContext());
125012e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        }
125112e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        return false;
125212e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    }
125312e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
125412e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    OnCheckedChangeListener mImsWfcCheckedChangeListener = new OnCheckedChangeListener() {
125512e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        @Override
125612e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
125712e1f55e926dd376ae17e48c1929524216222dbdNathan Harold            setImsWfcProvisionedState(isChecked);
1258e272c2078ba1626e1f14c57257d9516bd107aceaNathan Harold        }
125912e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    };
126012e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
1261586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    private boolean isEabProvisioned() {
1262586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        return isFeatureProvisioned(EAB_PROVISIONED_CONFIG_ID, false);
1263586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    }
1264586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang
1265586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    OnCheckedChangeListener mEabCheckedChangeListener = new OnCheckedChangeListener() {
1266586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        @Override
1267586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1268586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang            setEabProvisionedState(isChecked);
1269586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        }
1270586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    };
1271586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang
1272586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    private boolean isFeatureProvisioned(int featureId, boolean defaultValue) {
1273586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        boolean provisioned = defaultValue;
1274586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        if (mImsManager != null) {
1275586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang            try {
1276586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang                ImsConfig imsConfig = mImsManager.getConfigInterface();
1277586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang                if (imsConfig != null) {
1278586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang                    provisioned =
1279586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang                            (imsConfig.getProvisionedValue(featureId)
1280586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang                                    == ImsConfig.FeatureValueConstants.ON);
1281586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang                }
1282586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang            } catch (ImsException ex) {
1283586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang                Log.e(TAG, "isFeatureProvisioned() exception:", ex);
1284586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang            }
1285586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        }
1286586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang
1287586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        log("isFeatureProvisioned() featureId=" + featureId + " provisioned=" + provisioned);
1288586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        return provisioned;
1289586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    }
1290586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang
1291586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    private static boolean isEabEnabledByPlatform(Context context) {
1292586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        if (context != null) {
1293586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang            CarrierConfigManager configManager = (CarrierConfigManager)
1294586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang                    context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
1295586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang            if (configManager != null && configManager.getConfig().getBoolean(
1296586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang                        CarrierConfigManager.KEY_USE_RCS_PRESENCE_BOOL)) {
1297586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang                return true;
1298586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang            }
1299586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        }
1300586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        return false;
1301586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang    }
1302586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang
130312e1f55e926dd376ae17e48c1929524216222dbdNathan Harold    private void updateImsProvisionedState() {
130412e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        log("updateImsProvisionedState isImsVolteProvisioned()=" + isImsVolteProvisioned());
13052b77d7460ccebd97826529f186596df14050f0aeNathan Harold        //delightful hack to prevent on-checked-changed calls from
13062b77d7460ccebd97826529f186596df14050f0aeNathan Harold        //actually forcing the ims provisioning to its transient/current value.
130712e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsVolteProvisionedSwitch.setOnCheckedChangeListener(null);
130812e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsVolteProvisionedSwitch.setChecked(isImsVolteProvisioned());
130912e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
13106dc15e93a36ab4cf5c42391fe53f5466b6105179Nathan Harold        imsVolteProvisionedSwitch.setEnabled(
13116dc15e93a36ab4cf5c42391fe53f5466b6105179Nathan Harold                mImsManager.isVolteEnabledByPlatform(phone.getContext()));
131212e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
131312e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsVtProvisionedSwitch.setOnCheckedChangeListener(null);
131412e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsVtProvisionedSwitch.setChecked(isImsVtProvisioned());
131512e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
13166dc15e93a36ab4cf5c42391fe53f5466b6105179Nathan Harold        imsVtProvisionedSwitch.setEnabled(
13176dc15e93a36ab4cf5c42391fe53f5466b6105179Nathan Harold            mImsManager.isVtEnabledByPlatform(phone.getContext()));
131812e1f55e926dd376ae17e48c1929524216222dbdNathan Harold
131912e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsWfcProvisionedSwitch.setOnCheckedChangeListener(null);
132012e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsWfcProvisionedSwitch.setChecked(isImsWfcProvisioned());
132112e1f55e926dd376ae17e48c1929524216222dbdNathan Harold        imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
13226dc15e93a36ab4cf5c42391fe53f5466b6105179Nathan Harold        imsWfcProvisionedSwitch.setEnabled(
13236dc15e93a36ab4cf5c42391fe53f5466b6105179Nathan Harold            mImsManager.isWfcEnabledByPlatform(phone.getContext()));
1324586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang
1325586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        eabProvisionedSwitch.setOnCheckedChangeListener(null);
1326586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        eabProvisionedSwitch.setChecked(isEabProvisioned());
1327586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        eabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
1328586741cc15ba71055174ec2c9590e106f7b5d82bMeng Wang        eabProvisionedSwitch.setEnabled(isEabEnabledByPlatform(phone.getContext()));
1329426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    }
1330426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
1331a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
1332afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
1333cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            //FIXME: Replace with a TelephonyManager call
1334a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            phone.disableDnsCheck(!phone.isDnsCheckDisabled());
1335a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            updateDnsCheckState();
1336afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1337afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1338342101a0729a30587dc4fa79b5f017634bd985c0johnwang
1339a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    OnClickListener mOemInfoButtonHandler = new OnClickListener() {
1340afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
1341a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
1342a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            try {
1343a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                startActivity(intent);
1344a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            } catch (android.content.ActivityNotFoundException ex) {
1345bf4712895a570ce360db57f775b47c858f1d71b2Wink Saville                log("OEM-specific Info/Settings Activity Not Found : " + ex);
1346a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                // If the activity does not exist, there are no OEM
1347a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                // settings, and so we can just do nothing...
1348a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            }
1349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1350afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1351342101a0729a30587dc4fa79b5f017634bd985c0johnwang
1352afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mPingButtonHandler = new OnClickListener() {
1353afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
1354afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updatePingState();
1355afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1357afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1358afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
1359afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
1360afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateSmscButton.setEnabled(false);
136121dd407c10bb1bade10233e8468ea6729bcf71efjsh            phone.setSmscAddress(smsc.getText().toString(),
1362afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
1363afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1365afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1366afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
1367afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
1368afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            refreshSmsc();
1369afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1370afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1371afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1372fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang    OnClickListener mCarrierProvisioningButtonHandler = new OnClickListener() {
1373fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang        public void onClick(View v) {
1374a04449b88a0b0d19783a92c40b1510c017f7fae1Meng Wang            final Intent intent = new Intent("com.android.settings.CARRIER_PROVISIONING");
1375a04449b88a0b0d19783a92c40b1510c017f7fae1Meng Wang            final ComponentName serviceComponent = ComponentName.unflattenFromString(
1376a04449b88a0b0d19783a92c40b1510c017f7fae1Meng Wang                    "com.android.omadm.service/.DMIntentReceiver");
1377fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang            intent.setComponent(serviceComponent);
1378a04449b88a0b0d19783a92c40b1510c017f7fae1Meng Wang            sendBroadcast(intent);
1379fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang        }
1380fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang    };
1381fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang
1382fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang    OnClickListener mTriggerCarrierProvisioningButtonHandler = new OnClickListener() {
1383fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang        public void onClick(View v) {
1384a04449b88a0b0d19783a92c40b1510c017f7fae1Meng Wang            final Intent intent = new Intent("com.android.settings.TRIGGER_CARRIER_PROVISIONING");
1385a04449b88a0b0d19783a92c40b1510c017f7fae1Meng Wang            final ComponentName serviceComponent = ComponentName.unflattenFromString(
1386a04449b88a0b0d19783a92c40b1510c017f7fae1Meng Wang                    "com.android.omadm.service/.DMIntentReceiver");
1387fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang            intent.setComponent(serviceComponent);
1388a04449b88a0b0d19783a92c40b1510c017f7fae1Meng Wang            sendBroadcast(intent);
1389fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang        }
1390fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang    };
1391fd781e91d4d0e716bd75e4f31c913311feba2dc3Youhan Wang
1392cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold    AdapterView.OnItemSelectedListener mPreferredNetworkHandler =
1393cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            new AdapterView.OnItemSelectedListener() {
1394cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold
1395afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1396cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold            if (mPreferredNetworkTypeResult != pos && pos >= 0
1397cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                    && pos <= mPreferredNetworkLabels.length - 2) {
1398cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                mPreferredNetworkTypeResult = pos;
1399cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
1400cea413a9bb9ada05855a3d5c301dc459e6736da3Nathan Harold                phone.setPreferredNetworkType(mPreferredNetworkTypeResult, msg);
1401afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
1402afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1403afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1404afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onNothingSelected(AdapterView parent) {
1405afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1406afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1407afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
14082b77d7460ccebd97826529f186596df14050f0aeNathan Harold    AdapterView.OnItemSelectedListener mCellInfoRefreshRateHandler  =
14092b77d7460ccebd97826529f186596df14050f0aeNathan Harold            new AdapterView.OnItemSelectedListener() {
14102b77d7460ccebd97826529f186596df14050f0aeNathan Harold
14112b77d7460ccebd97826529f186596df14050f0aeNathan Harold        public void onItemSelected(AdapterView parent, View v, int pos, long id) {
14122b77d7460ccebd97826529f186596df14050f0aeNathan Harold            mCellInfoRefreshRateIndex = pos;
14135cce06b2e88aa0f20741ebe7f880580dad65307aSooraj Sasindran            mTelephonyManager.setCellInfoListRate(mCellInfoRefreshRates[pos]);
14142b77d7460ccebd97826529f186596df14050f0aeNathan Harold            updateAllCellInfo();
14152b77d7460ccebd97826529f186596df14050f0aeNathan Harold        }
14162b77d7460ccebd97826529f186596df14050f0aeNathan Harold
14172b77d7460ccebd97826529f186596df14050f0aeNathan Harold        public void onNothingSelected(AdapterView parent) {
14182b77d7460ccebd97826529f186596df14050f0aeNathan Harold        }
14192b77d7460ccebd97826529f186596df14050f0aeNathan Harold    };
1420bf4712895a570ce360db57f775b47c858f1d71b2Wink Saville
1421afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
1422