blob: b071cc30a724173e3c5578813723e2e4a1ddf2fe [file] [log] [blame]
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.settings;
18
19import android.app.Activity;
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -080020import android.app.QueuedWork;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080021import android.content.Intent;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +080022import android.content.pm.PackageManager;
23import android.content.pm.ResolveInfo;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080024import android.content.res.Resources;
Nathan Haroldcea413a2015-11-23 15:48:10 -080025import android.graphics.Typeface;
Jeff Sharkey93029862011-05-27 18:26:15 -070026import android.net.TrafficStats;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080027import android.net.Uri;
28import android.os.AsyncResult;
29import android.os.Bundle;
30import android.os.Handler;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080031import android.os.Message;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080032import android.os.SystemProperties;
Wink Saville79bff2a2012-06-01 14:37:21 -070033import android.telephony.CellInfo;
Nathan Haroldcea413a2015-11-23 15:48:10 -080034import android.telephony.CellInfoCdma;
35import android.telephony.CellInfoGsm;
36import android.telephony.CellInfoLte;
37import android.telephony.CellInfoWcdma;
38import android.telephony.CellIdentityCdma;
39import android.telephony.CellIdentityGsm;
40import android.telephony.CellIdentityLte;
41import android.telephony.CellIdentityWcdma;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080042import android.telephony.CellLocation;
Nathan Haroldcea413a2015-11-23 15:48:10 -080043import android.telephony.CellSignalStrengthCdma;
44import android.telephony.CellSignalStrengthGsm;
45import android.telephony.CellSignalStrengthLte;
46import android.telephony.CellSignalStrengthWcdma;
Wink Saville4f0d8812014-04-15 22:05:24 -070047import android.telephony.DataConnectionRealTimeInfo;
Jason Monk39b46742015-09-10 15:52:51 -040048import android.telephony.NeighboringCellInfo;
Nathan Harold2b77d742016-03-19 13:22:10 -070049import android.telephony.PreciseCallState;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080050import android.telephony.PhoneStateListener;
51import android.telephony.ServiceState;
Nathan Harold2b77d742016-03-19 13:22:10 -070052import android.telephony.SignalStrength;
Nathan Haroldcea413a2015-11-23 15:48:10 -080053import android.telephony.SubscriptionManager;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080054import android.telephony.TelephonyManager;
jsh534f5ae2009-09-24 09:19:22 -070055import android.telephony.cdma.CdmaCellLocation;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080056import android.telephony.gsm.GsmCellLocation;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080057import android.util.Log;
58import android.view.Menu;
59import android.view.MenuItem;
60import android.view.View;
61import android.view.View.OnClickListener;
62import android.widget.AdapterView;
63import android.widget.ArrayAdapter;
64import android.widget.Button;
Nathan Harold2b77d742016-03-19 13:22:10 -070065import android.widget.CompoundButton;
66import android.widget.CompoundButton.OnCheckedChangeListener;
Jason Monk39b46742015-09-10 15:52:51 -040067import android.widget.EditText;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080068import android.widget.Spinner;
Nathan Harold2b77d742016-03-19 13:22:10 -070069import android.widget.Switch;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080070import android.widget.TextView;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080071
Jason Monk39b46742015-09-10 15:52:51 -040072import com.android.ims.ImsConfig;
73import com.android.ims.ImsException;
74import com.android.ims.ImsManager;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080075import com.android.internal.telephony.Phone;
Wink Saville55434042012-06-14 12:33:43 -070076import com.android.internal.telephony.PhoneConstants;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080077import com.android.internal.telephony.PhoneFactory;
Nathan Haroldcea413a2015-11-23 15:48:10 -080078import com.android.internal.telephony.RILConstants;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080079import com.android.internal.telephony.TelephonyProperties;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080080
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080081import java.io.IOException;
Jason Monk39b46742015-09-10 15:52:51 -040082import java.net.HttpURLConnection;
83import java.net.URL;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080084import java.net.UnknownHostException;
85import java.util.ArrayList;
86import java.util.List;
87
88public class RadioInfo extends Activity {
Nathan Harold2b77d742016-03-19 13:22:10 -070089 private static final String TAG = "RadioInfo";
johnwang342101a2009-09-23 16:22:34 -070090
Nathan Harold2b77d742016-03-19 13:22:10 -070091 private static final String[] mPreferredNetworkLabels = {
92 "WCDMA preferred",
93 "GSM only",
94 "WCDMA only",
95 "GSM auto (PRL)",
96 "CDMA auto (PRL)",
97 "CDMA only",
98 "EvDo only",
99 "Global auto (PRL)",
100 "LTE/CDMA auto (PRL)",
101 "LTE/UMTS auto (PRL)",
102 "LTE/CDMA/UMTS auto (PRL)",
103 "LTE only",
104 "LTE/WCDMA",
105 "TD-SCDMA only",
106 "TD-SCDMA/WCDMA",
107 "LTE/TD-SCDMA",
108 "TD-SCDMA/GSM",
109 "TD-SCDMA/UMTS",
110 "LTE/TD-SCDMA/WCDMA",
111 "LTE/TD-SCDMA/UMTS",
112 "TD-SCDMA/CDMA/UMTS",
113 "Global/TD-SCDMA",
114 "Unknown"
115 };
116
117
118 private static final int CELL_INFO_LIST_RATE_DISABLED = Integer.MAX_VALUE;
119 private static final int CELL_INFO_LIST_RATE_MAX = 0;
120
Nathan Harold12e1f552016-06-17 13:55:38 -0700121
122 private static final int IMS_VOLTE_PROVISIONED_CONFIG_ID =
123 ImsConfig.ConfigConstants.VLT_SETTING_ENABLED;
124
125 private static final int IMS_VT_PROVISIONED_CONFIG_ID =
126 ImsConfig.ConfigConstants.LVC_SETTING_ENABLED;
127
128 private static final int IMS_WFC_PROVISIONED_CONFIG_ID =
129 ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED;
130
Nathan Harold2b77d742016-03-19 13:22:10 -0700131 //Values in must match mCellInfoRefreshRates
132 private static final String[] mCellInfoRefreshRateLabels = {
133 "Disabled",
134 "Immediate",
135 "Min 5s",
136 "Min 10s",
137 "Min 60s"
138 };
139
140 //Values in seconds, must match mCellInfoRefreshRateLabels
141 private static final int mCellInfoRefreshRates[] = {
142 CELL_INFO_LIST_RATE_DISABLED,
143 CELL_INFO_LIST_RATE_MAX,
144 5000,
145 10000,
146 60000
147 };
148
149 private void log(String s) {
150 Log.d(TAG, s);
151 }
152
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800153 private static final int EVENT_CFI_CHANGED = 302;
154
155 private static final int EVENT_QUERY_PREFERRED_TYPE_DONE = 1000;
156 private static final int EVENT_SET_PREFERRED_TYPE_DONE = 1001;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800157 private static final int EVENT_QUERY_SMSC_DONE = 1005;
158 private static final int EVENT_UPDATE_SMSC_DONE = 1006;
159
160 private static final int MENU_ITEM_SELECT_BAND = 0;
161 private static final int MENU_ITEM_VIEW_ADN = 1;
162 private static final int MENU_ITEM_VIEW_FDN = 2;
163 private static final int MENU_ITEM_VIEW_SDN = 3;
164 private static final int MENU_ITEM_GET_PDP_LIST = 4;
165 private static final int MENU_ITEM_TOGGLE_DATA = 5;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800166
Wink Savillec3886682009-04-02 11:00:56 -0700167 private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800168 private TextView number;
169 private TextView callState;
170 private TextView operatorName;
171 private TextView roamingState;
172 private TextView gsmState;
173 private TextView gprsState;
Nathan Harold2b77d742016-03-19 13:22:10 -0700174 private TextView voiceNetwork;
175 private TextView dataNetwork;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800176 private TextView dBm;
177 private TextView mMwi;
178 private TextView mCfi;
179 private TextView mLocation;
180 private TextView mNeighboringCids;
Wink Saville79bff2a2012-06-01 14:37:21 -0700181 private TextView mCellInfo;
Wink Saville4f0d8812014-04-15 22:05:24 -0700182 private TextView mDcRtInfoTv;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800183 private TextView sent;
184 private TextView received;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800185 private TextView mPingHostnameV4;
186 private TextView mPingHostnameV6;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800187 private TextView mHttpClientTest;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800188 private TextView dnsCheckState;
189 private EditText smsc;
Nathan Harold2b77d742016-03-19 13:22:10 -0700190 private Switch radioPowerOnSwitch;
191 private Button cellInfoRefreshRateButton;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800192 private Button dnsCheckToggleButton;
193 private Button pingTestButton;
194 private Button updateSmscButton;
195 private Button refreshSmscButton;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800196 private Button oemInfoButton;
Nathan Harold12e1f552016-06-17 13:55:38 -0700197 private Switch imsVolteProvisionedSwitch;
198 private Switch imsVtProvisionedSwitch;
199 private Switch imsWfcProvisionedSwitch;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800200 private Spinner preferredNetworkType;
Nathan Harold2b77d742016-03-19 13:22:10 -0700201 private Spinner cellInfoRefreshRateSpinner;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800202
203 private TelephonyManager mTelephonyManager;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800204 private ImsManager mImsManager = null;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800205 private Phone phone = null;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800206
Nathan Haroldcea413a2015-11-23 15:48:10 -0800207 private String mPingHostnameResultV4;
208 private String mPingHostnameResultV6;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800209 private String mHttpClientTestResult;
210 private boolean mMwiValue = false;
211 private boolean mCfiValue = false;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800212
213 private List<CellInfo> mCellInfoResult = null;
214 private CellLocation mCellLocationResult = null;
215 private List<NeighboringCellInfo> mNeighboringCellResult = null;
216
217 private int mPreferredNetworkTypeResult;
Nathan Harold2b77d742016-03-19 13:22:10 -0700218 private int mCellInfoRefreshRateIndex;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800219
Nathan Harold2b77d742016-03-19 13:22:10 -0700220 private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800221 @Override
222 public void onDataConnectionStateChanged(int state) {
223 updateDataState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800224 updateNetworkType();
225 }
226
227 @Override
228 public void onDataActivity(int direction) {
229 updateDataStats2();
230 }
231
232 @Override
Nathan Harold2b77d742016-03-19 13:22:10 -0700233 public void onCallStateChanged(int state, String incomingNumber) {
234 updateNetworkType();
235 updatePhoneState(state);
236 }
237
238 @Override
239 public void onPreciseCallStateChanged(PreciseCallState preciseState) {
240 updateNetworkType();
241 }
242
243 @Override
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800244 public void onCellLocationChanged(CellLocation location) {
245 updateLocation(location);
246 }
247
248 @Override
249 public void onMessageWaitingIndicatorChanged(boolean mwi) {
250 mMwiValue = mwi;
251 updateMessageWaiting();
252 }
253
254 @Override
255 public void onCallForwardingIndicatorChanged(boolean cfi) {
256 mCfiValue = cfi;
257 updateCallRedirect();
258 }
Wink Saville79bff2a2012-06-01 14:37:21 -0700259
260 @Override
261 public void onCellInfoChanged(List<CellInfo> arrayCi) {
Wink Savillebf471282013-04-05 15:04:05 -0700262 log("onCellInfoChanged: arrayCi=" + arrayCi);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800263 mCellInfoResult = arrayCi;
264 updateCellInfo(mCellInfoResult);
Wink Saville79bff2a2012-06-01 14:37:21 -0700265 }
Wink Saville4f0d8812014-04-15 22:05:24 -0700266
267 @Override
268 public void onDataConnectionRealTimeInfoChanged(DataConnectionRealTimeInfo dcRtInfo) {
269 log("onDataConnectionRealTimeInfoChanged: dcRtInfo=" + dcRtInfo);
270 updateDcRtInfoTv(dcRtInfo);
271 }
Nathan Harold2b77d742016-03-19 13:22:10 -0700272
273 @Override
274 public void onSignalStrengthsChanged(SignalStrength signalStrength) {
275 log("onSignalStrengthChanged: SignalStrength=" +signalStrength);
276 updateSignalStrength(signalStrength);
277 }
278
279 @Override
280 public void onServiceStateChanged(ServiceState serviceState) {
281 log("onServiceStateChanged: ServiceState=" + serviceState);
282 updateServiceState(serviceState);
283 updateRadioPowerState();
284 updateNetworkType();
Nathan Harold12e1f552016-06-17 13:55:38 -0700285 updateImsProvisionedState();
Nathan Harold2b77d742016-03-19 13:22:10 -0700286 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800287 };
288
Nathan Haroldcea413a2015-11-23 15:48:10 -0800289 private void updatePreferredNetworkType(int type) {
290 if (type >= mPreferredNetworkLabels.length || type < 0) {
291 log("EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
292 "type=" + type);
293 type = mPreferredNetworkLabels.length - 1; //set to Unknown
294 }
295 mPreferredNetworkTypeResult = type;
296
297 preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
298 }
299
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800300 private Handler mHandler = new Handler() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800301 @Override
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800302 public void handleMessage(Message msg) {
303 AsyncResult ar;
304 switch (msg.what) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800305 case EVENT_QUERY_PREFERRED_TYPE_DONE:
306 ar= (AsyncResult) msg.obj;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800307 if (ar.exception == null && ar.result != null) {
308 updatePreferredNetworkType(((int[])ar.result)[0]);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800309 } else {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800310 //In case of an exception, we will set this to unknown
311 updatePreferredNetworkType(mPreferredNetworkLabels.length-1);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800312 }
313 break;
314 case EVENT_SET_PREFERRED_TYPE_DONE:
315 ar= (AsyncResult) msg.obj;
316 if (ar.exception != null) {
Nathan Harolded38afa2016-04-13 00:29:30 -0700317 log("Set preferred network type failed.");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800318 }
319 break;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800320 case EVENT_QUERY_SMSC_DONE:
321 ar= (AsyncResult) msg.obj;
322 if (ar.exception != null) {
323 smsc.setText("refresh error");
324 } else {
jsh21dd4072009-05-12 11:26:55 -0700325 smsc.setText((String)ar.result);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800326 }
327 break;
328 case EVENT_UPDATE_SMSC_DONE:
329 updateSmscButton.setEnabled(true);
330 ar= (AsyncResult) msg.obj;
331 if (ar.exception != null) {
332 smsc.setText("update error");
333 }
334 break;
335 default:
Nathan Haroldcea413a2015-11-23 15:48:10 -0800336 super.handleMessage(msg);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800337 break;
338
339 }
340 }
341 };
342
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800343 @Override
344 public void onCreate(Bundle icicle) {
345 super.onCreate(icicle);
346
347 setContentView(R.layout.radio_info);
348
Nathan Haroldcea413a2015-11-23 15:48:10 -0800349 log("Started onCreate");
350
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800351 mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
352 phone = PhoneFactory.getDefaultPhone();
353
Nathan Haroldcea413a2015-11-23 15:48:10 -0800354 //TODO: Need to update this if the default phoneId changes?
355 // Better to have an instance per phone?
356 mImsManager = ImsManager.getInstance(getApplicationContext(),
357 SubscriptionManager.getDefaultVoicePhoneId());
358
Wink Savillec3886682009-04-02 11:00:56 -0700359 mDeviceId= (TextView) findViewById(R.id.imei);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800360 number = (TextView) findViewById(R.id.number);
361 callState = (TextView) findViewById(R.id.call);
362 operatorName = (TextView) findViewById(R.id.operator);
363 roamingState = (TextView) findViewById(R.id.roaming);
364 gsmState = (TextView) findViewById(R.id.gsm);
365 gprsState = (TextView) findViewById(R.id.gprs);
Nathan Harold2b77d742016-03-19 13:22:10 -0700366 voiceNetwork = (TextView) findViewById(R.id.voice_network);
367 dataNetwork = (TextView) findViewById(R.id.data_network);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800368 dBm = (TextView) findViewById(R.id.dbm);
369 mMwi = (TextView) findViewById(R.id.mwi);
370 mCfi = (TextView) findViewById(R.id.cfi);
371 mLocation = (TextView) findViewById(R.id.location);
372 mNeighboringCids = (TextView) findViewById(R.id.neighboring);
Wink Saville79bff2a2012-06-01 14:37:21 -0700373 mCellInfo = (TextView) findViewById(R.id.cellinfo);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800374 mCellInfo.setTypeface(Typeface.MONOSPACE);
Wink Saville4f0d8812014-04-15 22:05:24 -0700375 mDcRtInfoTv = (TextView) findViewById(R.id.dcrtinfo);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800376
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800377 sent = (TextView) findViewById(R.id.sent);
378 received = (TextView) findViewById(R.id.received);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800379 smsc = (EditText) findViewById(R.id.smsc);
380 dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800381 mPingHostnameV4 = (TextView) findViewById(R.id.pingHostnameV4);
382 mPingHostnameV6 = (TextView) findViewById(R.id.pingHostnameV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800383 mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
384
385 preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
386 ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
387 android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
johnwang342101a2009-09-23 16:22:34 -0700388 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800389 preferredNetworkType.setAdapter(adapter);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800390
Nathan Harold2b77d742016-03-19 13:22:10 -0700391 cellInfoRefreshRateSpinner = (Spinner) findViewById(R.id.cell_info_rate_select);
392 ArrayAdapter<String> cellInfoAdapter = new ArrayAdapter<String>(this,
393 android.R.layout.simple_spinner_item, mCellInfoRefreshRateLabels);
394 cellInfoAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
395 cellInfoRefreshRateSpinner.setAdapter(cellInfoAdapter);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800396
Nathan Harold12e1f552016-06-17 13:55:38 -0700397 imsVolteProvisionedSwitch = (Switch) findViewById(R.id.volte_provisioned_switch);
398 imsVtProvisionedSwitch = (Switch) findViewById(R.id.vt_provisioned_switch);
399 imsWfcProvisionedSwitch = (Switch) findViewById(R.id.wfc_provisioned_switch);
Wink Savillebf471282013-04-05 15:04:05 -0700400
Nathan Harold2b77d742016-03-19 13:22:10 -0700401 radioPowerOnSwitch = (Switch) findViewById(R.id.radio_power);
Wink Saville426fc662011-09-25 14:39:02 -0700402
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800403 pingTestButton = (Button) findViewById(R.id.ping_test);
404 pingTestButton.setOnClickListener(mPingButtonHandler);
405 updateSmscButton = (Button) findViewById(R.id.update_smsc);
406 updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
407 refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
408 refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
409 dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
410 dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
johnwang342101a2009-09-23 16:22:34 -0700411
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800412 oemInfoButton = (Button) findViewById(R.id.oem_info);
413 oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
414 PackageManager pm = getPackageManager();
415 Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
416 List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
417 if (oemInfoIntentList.size() == 0) {
418 oemInfoButton.setEnabled(false);
419 }
420
Nathan Harolded38afa2016-04-13 00:29:30 -0700421 mCellInfoRefreshRateIndex = 0; //disabled
Nathan Haroldcea413a2015-11-23 15:48:10 -0800422 mPreferredNetworkTypeResult = mPreferredNetworkLabels.length - 1; //Unknown
423
424 //FIXME: Replace with TelephonyManager call
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800425 phone.getPreferredNetworkType(
426 mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800427
Nathan Haroldcea413a2015-11-23 15:48:10 -0800428 restoreFromBundle(icicle);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800429 }
430
431 @Override
432 protected void onResume() {
433 super.onResume();
434
Nathan Haroldcea413a2015-11-23 15:48:10 -0800435 log("Started onResume");
436
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800437 updateMessageWaiting();
438 updateCallRedirect();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800439 updateDataState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800440 updateDataStats2();
Nathan Harold2b77d742016-03-19 13:22:10 -0700441 updateRadioPowerState();
Nathan Harold12e1f552016-06-17 13:55:38 -0700442 updateImsProvisionedState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800443 updateProperties();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800444 updateDnsCheckState();
Nathan Harold2b77d742016-03-19 13:22:10 -0700445 updateNetworkType();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800446
Nathan Haroldcea413a2015-11-23 15:48:10 -0800447 updateNeighboringCids(mNeighboringCellResult);
448 updateLocation(mCellLocationResult);
449 updateCellInfo(mCellInfoResult);
450
451 mPingHostnameV4.setText(mPingHostnameResultV4);
452 mPingHostnameV6.setText(mPingHostnameResultV6);
453 mHttpClientTest.setText(mHttpClientTestResult);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800454
Nathan Harold2b77d742016-03-19 13:22:10 -0700455 cellInfoRefreshRateSpinner.setOnItemSelectedListener(mCellInfoRefreshRateHandler);
Nathan Harolded38afa2016-04-13 00:29:30 -0700456 //set selection after registering listener to force update
457 cellInfoRefreshRateSpinner.setSelection(mCellInfoRefreshRateIndex);
458
459 //set selection before registering to prevent update
460 preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
Nathan Harold2b77d742016-03-19 13:22:10 -0700461 preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
Nathan Harolded38afa2016-04-13 00:29:30 -0700462
Nathan Harold2b77d742016-03-19 13:22:10 -0700463 radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
Nathan Harold12e1f552016-06-17 13:55:38 -0700464 imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
465 imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
466 imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
Nathan Harold2b77d742016-03-19 13:22:10 -0700467
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800468 mTelephonyManager.listen(mPhoneStateListener,
Nathan Harold2b77d742016-03-19 13:22:10 -0700469 PhoneStateListener.LISTEN_CALL_STATE
470 //b/27803938 - RadioInfo currently cannot read PRECISE_CALL_STATE
471 // | PhoneStateListener.LISTEN_PRECISE_CALL_STATE
472 | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800473 | PhoneStateListener.LISTEN_DATA_ACTIVITY
474 | PhoneStateListener.LISTEN_CELL_LOCATION
475 | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
Wink Saville79bff2a2012-06-01 14:37:21 -0700476 | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
Wink Saville4f0d8812014-04-15 22:05:24 -0700477 | PhoneStateListener.LISTEN_CELL_INFO
Nathan Harold2b77d742016-03-19 13:22:10 -0700478 | PhoneStateListener.LISTEN_SERVICE_STATE
479 | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
Wink Saville4f0d8812014-04-15 22:05:24 -0700480 | PhoneStateListener.LISTEN_DATA_CONNECTION_REAL_TIME_INFO);
Nathan Harolded38afa2016-04-13 00:29:30 -0700481
482 smsc.clearFocus();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800483 }
484
485 @Override
Nathan Haroldcea413a2015-11-23 15:48:10 -0800486 protected void onPause() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800487 super.onPause();
488
Wink Savillebf471282013-04-05 15:04:05 -0700489 log("onPause: unregister phone & data intents");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800490
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800491 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
Nathan Harolded38afa2016-04-13 00:29:30 -0700492 phone.setCellInfoListRate(CELL_INFO_LIST_RATE_DISABLED);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800493 }
494
Nathan Haroldcea413a2015-11-23 15:48:10 -0800495 private void restoreFromBundle(Bundle b) {
496 if( b == null) {
497 return;
498 }
499
500 mPingHostnameResultV4 = b.getString("mPingHostnameResultV4","");
501 mPingHostnameResultV6 = b.getString("mPingHostnameResultV6","");
502 mHttpClientTestResult = b.getString("mHttpClientTestResult","");
503
504 mPingHostnameV4.setText(mPingHostnameResultV4);
505 mPingHostnameV6.setText(mPingHostnameResultV6);
506 mHttpClientTest.setText(mHttpClientTestResult);
507
Nathan Harold2b77d742016-03-19 13:22:10 -0700508 mPreferredNetworkTypeResult = b.getInt("mPreferredNetworkTypeResult",
509 mPreferredNetworkLabels.length - 1);
510
511 mCellInfoRefreshRateIndex = b.getInt("mCellInfoRefreshRateIndex", 0);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800512 }
513
514 @Override
515 protected void onSaveInstanceState(Bundle outState) {
516 outState.putString("mPingHostnameResultV4", mPingHostnameResultV4);
517 outState.putString("mPingHostnameResultV6", mPingHostnameResultV6);
518 outState.putString("mHttpClientTestResult", mHttpClientTestResult);
Nathan Harold2b77d742016-03-19 13:22:10 -0700519
Nathan Haroldcea413a2015-11-23 15:48:10 -0800520 outState.putInt("mPreferredNetworkTypeResult", mPreferredNetworkTypeResult);
Nathan Harold2b77d742016-03-19 13:22:10 -0700521 outState.putInt("mCellInfoRefreshRateIndex", mCellInfoRefreshRateIndex);
522
Nathan Haroldcea413a2015-11-23 15:48:10 -0800523 }
524
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800525 @Override
526 public boolean onCreateOptionsMenu(Menu menu) {
Wink Savillec3886682009-04-02 11:00:56 -0700527 menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label)
528 .setOnMenuItemClickListener(mSelectBandCallback)
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800529 .setAlphabeticShortcut('b');
530 menu.add(1, MENU_ITEM_VIEW_ADN, 0,
531 R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
532 menu.add(1, MENU_ITEM_VIEW_FDN, 0,
533 R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
534 menu.add(1, MENU_ITEM_VIEW_SDN, 0,
535 R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
536 menu.add(1, MENU_ITEM_GET_PDP_LIST,
537 0, R.string.radioInfo_menu_getPDP).setOnMenuItemClickListener(mGetPdpList);
538 menu.add(1, MENU_ITEM_TOGGLE_DATA,
Nathan Harold2b77d742016-03-19 13:22:10 -0700539 0, R.string.radio_info_data_connection_disable).setOnMenuItemClickListener(mToggleData);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800540 return true;
541 }
542
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800543 @Override
Wink Savillec3886682009-04-02 11:00:56 -0700544 public boolean onPrepareOptionsMenu(Menu menu) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800545 // Get the TOGGLE DATA menu item in the right state.
546 MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
547 int state = mTelephonyManager.getDataState();
548 boolean visible = true;
549
550 switch (state) {
551 case TelephonyManager.DATA_CONNECTED:
552 case TelephonyManager.DATA_SUSPENDED:
Nathan Harold2b77d742016-03-19 13:22:10 -0700553 item.setTitle(R.string.radio_info_data_connection_disable);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800554 break;
555 case TelephonyManager.DATA_DISCONNECTED:
Nathan Harold2b77d742016-03-19 13:22:10 -0700556 item.setTitle(R.string.radio_info_data_connection_enable);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800557 break;
558 default:
559 visible = false;
560 break;
561 }
562 item.setVisible(visible);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800563 return true;
564 }
565
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800566 private void updateDnsCheckState() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800567 //FIXME: Replace with a TelephonyManager call
Mike Lockwood5304c7e2009-04-05 11:37:45 -0700568 dnsCheckState.setText(phone.isDnsCheckDisabled() ?
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800569 "0.0.0.0 allowed" :"0.0.0.0 not allowed");
570 }
Wink Savillee2a14e32009-05-29 14:06:30 -0700571
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800572 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700573 updateSignalStrength(SignalStrength signalStrength) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800574 Resources r = getResources();
575
Nathan Harold2b77d742016-03-19 13:22:10 -0700576 int signalDbm = signalStrength.getDbm();
Wink Savillee2a14e32009-05-29 14:06:30 -0700577
Nathan Harold2b77d742016-03-19 13:22:10 -0700578 int signalAsu = signalStrength.getAsuLevel();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800579
580 if (-1 == signalAsu) signalAsu = 0;
581
582 dBm.setText(String.valueOf(signalDbm) + " "
583 + r.getString(R.string.radioInfo_display_dbm) + " "
584 + String.valueOf(signalAsu) + " "
585 + r.getString(R.string.radioInfo_display_asu));
586 }
587
588 private final void updateLocation(CellLocation location) {
jsh534f5ae2009-09-24 09:19:22 -0700589 Resources r = getResources();
Wink Savillec3886682009-04-02 11:00:56 -0700590 if (location instanceof GsmCellLocation) {
591 GsmCellLocation loc = (GsmCellLocation)location;
jsh534f5ae2009-09-24 09:19:22 -0700592 int lac = loc.getLac();
593 int cid = loc.getCid();
594 mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
595 + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
596 + " "
597 + r.getString(R.string.radioInfo_cid) + " = "
598 + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
599 } else if (location instanceof CdmaCellLocation) {
600 CdmaCellLocation loc = (CdmaCellLocation)location;
601 int bid = loc.getBaseStationId();
602 int sid = loc.getSystemId();
603 int nid = loc.getNetworkId();
604 int lat = loc.getBaseStationLatitude();
605 int lon = loc.getBaseStationLongitude();
606 mLocation.setText("BID = "
607 + ((bid == -1) ? "unknown" : Integer.toHexString(bid))
608 + " "
609 + "SID = "
610 + ((sid == -1) ? "unknown" : Integer.toHexString(sid))
611 + " "
612 + "NID = "
613 + ((nid == -1) ? "unknown" : Integer.toHexString(nid))
614 + "\n"
615 + "LAT = "
616 + ((lat == -1) ? "unknown" : Integer.toHexString(lat))
617 + " "
618 + "LONG = "
619 + ((lon == -1) ? "unknown" : Integer.toHexString(lon)));
620 } else {
621 mLocation.setText("unknown");
Wink Savillec3886682009-04-02 11:00:56 -0700622 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800623
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800624
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800625 }
626
Nathan Haroldcea413a2015-11-23 15:48:10 -0800627 private final void updateNeighboringCids(List<NeighboringCellInfo> cids) {
johnwangf02c65f2009-09-25 17:26:54 -0700628 StringBuilder sb = new StringBuilder();
629
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800630 if (cids != null) {
631 if ( cids.isEmpty() ) {
johnwangf02c65f2009-09-25 17:26:54 -0700632 sb.append("no neighboring cells");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800633 } else {
634 for (NeighboringCellInfo cell : cids) {
johnwangf02c65f2009-09-25 17:26:54 -0700635 sb.append(cell.toString()).append(" ");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800636 }
637 }
638 } else {
johnwangf02c65f2009-09-25 17:26:54 -0700639 sb.append("unknown");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800640 }
johnwangf02c65f2009-09-25 17:26:54 -0700641 mNeighboringCids.setText(sb.toString());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800642 }
643
Nathan Haroldcea413a2015-11-23 15:48:10 -0800644 private final String getCellInfoDisplayString(int i) {
645 return (i != Integer.MAX_VALUE) ? Integer.toString(i) : "";
646 }
647
648 private final String getCellInfoDisplayString(long i) {
649 return (i != Long.MAX_VALUE) ? Long.toString(i) : "";
650 }
651
652 private final String buildCdmaInfoString(CellInfoCdma ci) {
653 CellIdentityCdma cidCdma = ci.getCellIdentity();
654 CellSignalStrengthCdma ssCdma = ci.getCellSignalStrength();
655
656 return String.format("%-3.3s %-5.5s %-5.5s %-5.5s %-6.6s %-6.6s %-6.6s %-6.6s %-5.5s",
657 ci.isRegistered() ? "S " : " ",
658 getCellInfoDisplayString(cidCdma.getSystemId()),
659 getCellInfoDisplayString(cidCdma.getNetworkId()),
660 getCellInfoDisplayString(cidCdma.getBasestationId()),
661 getCellInfoDisplayString(ssCdma.getCdmaDbm()),
662 getCellInfoDisplayString(ssCdma.getCdmaEcio()),
663 getCellInfoDisplayString(ssCdma.getEvdoDbm()),
664 getCellInfoDisplayString(ssCdma.getEvdoEcio()),
665 getCellInfoDisplayString(ssCdma.getEvdoSnr()));
666 }
667
668 private final String buildGsmInfoString(CellInfoGsm ci) {
669 CellIdentityGsm cidGsm = ci.getCellIdentity();
670 CellSignalStrengthGsm ssGsm = ci.getCellSignalStrength();
671
Nathan Harold2b77d742016-03-19 13:22:10 -0700672 return String.format("%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-4.4s %-4.4s\n",
Nathan Haroldcea413a2015-11-23 15:48:10 -0800673 ci.isRegistered() ? "S " : " ",
674 getCellInfoDisplayString(cidGsm.getMcc()),
675 getCellInfoDisplayString(cidGsm.getMnc()),
676 getCellInfoDisplayString(cidGsm.getLac()),
677 getCellInfoDisplayString(cidGsm.getCid()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700678 getCellInfoDisplayString(cidGsm.getArfcn()),
679 getCellInfoDisplayString(cidGsm.getBsic()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800680 getCellInfoDisplayString(ssGsm.getDbm()));
681 }
682
683 private final String buildLteInfoString(CellInfoLte ci) {
684 CellIdentityLte cidLte = ci.getCellIdentity();
685 CellSignalStrengthLte ssLte = ci.getCellSignalStrength();
686
687 return String.format(
Nathan Harold2b77d742016-03-19 13:22:10 -0700688 "%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-3.3s %-6.6s %-4.4s %-4.4s %-2.2s\n",
Nathan Haroldcea413a2015-11-23 15:48:10 -0800689 ci.isRegistered() ? "S " : " ",
690 getCellInfoDisplayString(cidLte.getMcc()),
691 getCellInfoDisplayString(cidLte.getMnc()),
692 getCellInfoDisplayString(cidLte.getTac()),
693 getCellInfoDisplayString(cidLte.getCi()),
694 getCellInfoDisplayString(cidLte.getPci()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700695 getCellInfoDisplayString(cidLte.getEarfcn()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800696 getCellInfoDisplayString(ssLte.getDbm()),
697 getCellInfoDisplayString(ssLte.getRsrq()),
698 getCellInfoDisplayString(ssLte.getTimingAdvance()));
699 }
700
701 private final String buildWcdmaInfoString(CellInfoWcdma ci) {
702 CellIdentityWcdma cidWcdma = ci.getCellIdentity();
703 CellSignalStrengthWcdma ssWcdma = ci.getCellSignalStrength();
704
Nathan Harold2b77d742016-03-19 13:22:10 -0700705 return String.format("%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-3.3s %-4.4s\n",
Nathan Haroldcea413a2015-11-23 15:48:10 -0800706 ci.isRegistered() ? "S " : " ",
707 getCellInfoDisplayString(cidWcdma.getMcc()),
708 getCellInfoDisplayString(cidWcdma.getMnc()),
709 getCellInfoDisplayString(cidWcdma.getLac()),
710 getCellInfoDisplayString(cidWcdma.getCid()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700711 getCellInfoDisplayString(cidWcdma.getUarfcn()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800712 getCellInfoDisplayString(cidWcdma.getPsc()),
713 getCellInfoDisplayString(ssWcdma.getDbm()));
714 }
715
716 private final String buildCellInfoString(List<CellInfo> arrayCi) {
717 String value = new String();
718 StringBuilder cdmaCells = new StringBuilder(),
719 gsmCells = new StringBuilder(),
720 lteCells = new StringBuilder(),
721 wcdmaCells = new StringBuilder();
722
723 if (arrayCi != null) {
724 for (CellInfo ci : arrayCi) {
725
726 if (ci instanceof CellInfoLte) {
727 lteCells.append(buildLteInfoString((CellInfoLte) ci));
728 } else if (ci instanceof CellInfoWcdma) {
729 wcdmaCells.append(buildWcdmaInfoString((CellInfoWcdma) ci));
730 } else if (ci instanceof CellInfoGsm) {
731 gsmCells.append(buildGsmInfoString((CellInfoGsm) ci));
732 } else if (ci instanceof CellInfoCdma) {
733 cdmaCells.append(buildCdmaInfoString((CellInfoCdma) ci));
Wink Saville79bff2a2012-06-01 14:37:21 -0700734 }
735 }
Nathan Haroldcea413a2015-11-23 15:48:10 -0800736 if (lteCells.length() != 0) {
737 value += String.format(
Nathan Harold2b77d742016-03-19 13:22:10 -0700738 "LTE\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-3.3s %-6.6s %-4.4s %-4.4s %-2.2s\n",
739 "SRV", "MCC", "MNC", "TAC", "CID", "PCI", "EARFCN", "RSRP", "RSRQ", "TA");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800740 value += lteCells.toString();
741 }
742 if (wcdmaCells.length() != 0) {
Nathan Harold2b77d742016-03-19 13:22:10 -0700743 value += String.format("WCDMA\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-3.3s %-4.4s\n",
744 "SRV", "MCC", "MNC", "LAC", "CID", "UARFCN", "PSC", "RSCP");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800745 value += wcdmaCells.toString();
746 }
747 if (gsmCells.length() != 0) {
Nathan Harold2b77d742016-03-19 13:22:10 -0700748 value += String.format("GSM\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-4.4s %-4.4s\n",
749 "SRV", "MCC", "MNC", "LAC", "CID", "ARFCN", "BSIC", "RSSI");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800750 value += gsmCells.toString();
751 }
752 if (cdmaCells.length() != 0) {
753 value += String.format(
754 "CDMA/EVDO\n%-3.3s %-5.5s %-5.5s %-5.5s %-6.6s %-6.6s %-6.6s %-6.6s %-5.5s\n",
755 "SRV", "SID", "NID", "BSID", "C-RSSI", "C-ECIO", "E-RSSI", "E-ECIO", "E-SNR");
756 value += cdmaCells.toString();
757 }
758 } else {
759 value ="unknown";
Wink Saville79bff2a2012-06-01 14:37:21 -0700760 }
Nathan Haroldcea413a2015-11-23 15:48:10 -0800761
762 return value.toString();
763 }
764
765 private final void updateCellInfo(List<CellInfo> arrayCi) {
766 mCellInfo.setText(buildCellInfoString(arrayCi));
Wink Saville79bff2a2012-06-01 14:37:21 -0700767 }
768
Wink Saville4f0d8812014-04-15 22:05:24 -0700769 private final void updateDcRtInfoTv(DataConnectionRealTimeInfo dcRtInfo) {
770 mDcRtInfoTv.setText(dcRtInfo.toString());
771 }
772
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800773 private final void
774 updateMessageWaiting() {
775 mMwi.setText(String.valueOf(mMwiValue));
776 }
777
778 private final void
779 updateCallRedirect() {
780 mCfi.setText(String.valueOf(mCfiValue));
781 }
782
783
784 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700785 updateServiceState(ServiceState serviceState) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800786 int state = serviceState.getState();
787 Resources r = getResources();
788 String display = r.getString(R.string.radioInfo_unknown);
johnwang342101a2009-09-23 16:22:34 -0700789
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800790 switch (state) {
791 case ServiceState.STATE_IN_SERVICE:
792 display = r.getString(R.string.radioInfo_service_in);
793 break;
794 case ServiceState.STATE_OUT_OF_SERVICE:
795 case ServiceState.STATE_EMERGENCY_ONLY:
796 display = r.getString(R.string.radioInfo_service_emergency);
797 break;
798 case ServiceState.STATE_POWER_OFF:
799 display = r.getString(R.string.radioInfo_service_off);
800 break;
801 }
johnwang342101a2009-09-23 16:22:34 -0700802
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800803 gsmState.setText(display);
johnwang342101a2009-09-23 16:22:34 -0700804
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800805 if (serviceState.getRoaming()) {
806 roamingState.setText(R.string.radioInfo_roaming_in);
807 } else {
808 roamingState.setText(R.string.radioInfo_roaming_not);
809 }
810
811 operatorName.setText(serviceState.getOperatorAlphaLong());
812 }
813
814 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700815 updatePhoneState(int state) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800816 Resources r = getResources();
817 String display = r.getString(R.string.radioInfo_unknown);
818
819 switch (state) {
Nathan Harold2b77d742016-03-19 13:22:10 -0700820 case TelephonyManager.CALL_STATE_IDLE:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800821 display = r.getString(R.string.radioInfo_phone_idle);
822 break;
Nathan Harold2b77d742016-03-19 13:22:10 -0700823 case TelephonyManager.CALL_STATE_RINGING:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800824 display = r.getString(R.string.radioInfo_phone_ringing);
825 break;
Nathan Harold2b77d742016-03-19 13:22:10 -0700826 case TelephonyManager.CALL_STATE_OFFHOOK:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800827 display = r.getString(R.string.radioInfo_phone_offhook);
828 break;
829 }
830
831 callState.setText(display);
832 }
833
834 private final void
835 updateDataState() {
836 int state = mTelephonyManager.getDataState();
837 Resources r = getResources();
838 String display = r.getString(R.string.radioInfo_unknown);
839
840 switch (state) {
841 case TelephonyManager.DATA_CONNECTED:
842 display = r.getString(R.string.radioInfo_data_connected);
843 break;
844 case TelephonyManager.DATA_CONNECTING:
845 display = r.getString(R.string.radioInfo_data_connecting);
846 break;
847 case TelephonyManager.DATA_DISCONNECTED:
848 display = r.getString(R.string.radioInfo_data_disconnected);
849 break;
850 case TelephonyManager.DATA_SUSPENDED:
851 display = r.getString(R.string.radioInfo_data_suspended);
852 break;
853 }
johnwang342101a2009-09-23 16:22:34 -0700854
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800855 gprsState.setText(display);
856 }
857
858 private final void updateNetworkType() {
Nathan Harold2b77d742016-03-19 13:22:10 -0700859 if( phone != null ) {
860 ServiceState ss = phone.getServiceState();
861 dataNetwork.setText(ServiceState.rilRadioTechnologyToString(
862 phone.getServiceState().getRilDataRadioTechnology()));
863 voiceNetwork.setText(ServiceState.rilRadioTechnologyToString(
864 phone.getServiceState().getRilVoiceRadioTechnology()));
865 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800866 }
867
868 private final void
869 updateProperties() {
870 String s;
871 Resources r = getResources();
872
873 s = phone.getDeviceId();
johnwang342101a2009-09-23 16:22:34 -0700874 if (s == null) s = r.getString(R.string.radioInfo_unknown);
Wink Savillec3886682009-04-02 11:00:56 -0700875 mDeviceId.setText(s);
johnwang342101a2009-09-23 16:22:34 -0700876
Nathan Haroldcea413a2015-11-23 15:48:10 -0800877 //FIXME: Replace with a TelephonyManager call
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800878 s = phone.getLine1Number();
johnwang342101a2009-09-23 16:22:34 -0700879 if (s == null) s = r.getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800880 number.setText(s);
881 }
882
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800883 private final void updateDataStats2() {
884 Resources r = getResources();
885
Jeff Sharkey93029862011-05-27 18:26:15 -0700886 long txPackets = TrafficStats.getMobileTxPackets();
887 long rxPackets = TrafficStats.getMobileRxPackets();
888 long txBytes = TrafficStats.getMobileTxBytes();
889 long rxBytes = TrafficStats.getMobileRxBytes();
johnwang342101a2009-09-23 16:22:34 -0700890
Jeff Sharkey93029862011-05-27 18:26:15 -0700891 String packets = r.getString(R.string.radioInfo_display_packets);
892 String bytes = r.getString(R.string.radioInfo_display_bytes);
johnwang342101a2009-09-23 16:22:34 -0700893
Jeff Sharkey93029862011-05-27 18:26:15 -0700894 sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
895 received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800896 }
897
898 /**
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800899 * Ping a host name
900 */
901 private final void pingHostname() {
902 try {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800903 try {
904 Process p4 = Runtime.getRuntime().exec("ping -c 1 www.google.com");
905 int status4 = p4.waitFor();
906 if (status4 == 0) {
907 mPingHostnameResultV4 = "Pass";
908 } else {
909 mPingHostnameResultV4 = String.format("Fail(%d)", status4);
910 }
911 } catch (IOException e) {
912 mPingHostnameResultV4 = "Fail: IOException";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800913 }
Nathan Haroldcea413a2015-11-23 15:48:10 -0800914 try {
915 Process p6 = Runtime.getRuntime().exec("ping6 -c 1 www.google.com");
916 int status6 = p6.waitFor();
917 if (status6 == 0) {
918 mPingHostnameResultV6 = "Pass";
919 } else {
920 mPingHostnameResultV6 = String.format("Fail(%d)", status6);
921 }
922 } catch (IOException e) {
923 mPingHostnameResultV6 = "Fail: IOException";
924 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800925 } catch (InterruptedException e) {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800926 mPingHostnameResultV4 = mPingHostnameResultV6 = "Fail: InterruptedException";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800927 }
928 }
929
930 /**
931 * This function checks for basic functionality of HTTP Client.
932 */
933 private void httpClientTest() {
Narayan Kamathf25627c2014-12-12 13:53:28 +0000934 HttpURLConnection urlConnection = null;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800935 try {
Narayan Kamathf25627c2014-12-12 13:53:28 +0000936 // TODO: Hardcoded for now, make it UI configurable
Alex Klyubinb0090232015-04-02 11:08:51 -0700937 URL url = new URL("https://www.google.com");
Narayan Kamathf25627c2014-12-12 13:53:28 +0000938 urlConnection = (HttpURLConnection) url.openConnection();
939 if (urlConnection.getResponseCode() == 200) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800940 mHttpClientTestResult = "Pass";
941 } else {
Narayan Kamathf25627c2014-12-12 13:53:28 +0000942 mHttpClientTestResult = "Fail: Code: " + urlConnection.getResponseMessage();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800943 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800944 } catch (IOException e) {
945 mHttpClientTestResult = "Fail: IOException";
Narayan Kamathf25627c2014-12-12 13:53:28 +0000946 } finally {
947 if (urlConnection != null) {
948 urlConnection.disconnect();
949 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800950 }
951 }
952
953 private void refreshSmsc() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800954 //FIXME: Replace with a TelephonyManager call
jsh21dd4072009-05-12 11:26:55 -0700955 phone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800956 }
957
Nathan Haroldcea413a2015-11-23 15:48:10 -0800958 private final void updateAllCellInfo() {
959
960 mCellInfo.setText("");
961 mNeighboringCids.setText("");
962 mLocation.setText("");
963
964 final Runnable updateAllCellInfoResults = new Runnable() {
965 public void run() {
966 updateNeighboringCids(mNeighboringCellResult);
967 updateLocation(mCellLocationResult);
968 updateCellInfo(mCellInfoResult);
969 }
970 };
971
972 Thread locThread = new Thread() {
973 @Override
974 public void run() {
975 mCellInfoResult = mTelephonyManager.getAllCellInfo();
976 mCellLocationResult = mTelephonyManager.getCellLocation();
977 mNeighboringCellResult = mTelephonyManager.getNeighboringCellInfo();
978
979 mHandler.post(updateAllCellInfoResults);
980 }
981 };
982 locThread.start();
983 }
984
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800985 private final void updatePingState() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800986 // Set all to unknown since the threads will take a few secs to update.
Nathan Haroldcea413a2015-11-23 15:48:10 -0800987 mPingHostnameResultV4 = getResources().getString(R.string.radioInfo_unknown);
988 mPingHostnameResultV6 = getResources().getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800989 mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
990
Nathan Haroldcea413a2015-11-23 15:48:10 -0800991 mPingHostnameV4.setText(mPingHostnameResultV4);
992 mPingHostnameV6.setText(mPingHostnameResultV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800993 mHttpClientTest.setText(mHttpClientTestResult);
994
995 final Runnable updatePingResults = new Runnable() {
996 public void run() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800997 mPingHostnameV4.setText(mPingHostnameResultV4);
998 mPingHostnameV6.setText(mPingHostnameResultV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800999 mHttpClientTest.setText(mHttpClientTestResult);
1000 }
1001 };
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001002
1003 Thread hostname = new Thread() {
1004 @Override
1005 public void run() {
1006 pingHostname();
Nathan Haroldcea413a2015-11-23 15:48:10 -08001007 mHandler.post(updatePingResults);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001008 }
1009 };
1010 hostname.start();
1011
1012 Thread httpClient = new Thread() {
1013 @Override
1014 public void run() {
1015 httpClientTest();
Nathan Haroldcea413a2015-11-23 15:48:10 -08001016 mHandler.post(updatePingResults);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001017 }
1018 };
1019 httpClient.start();
1020 }
1021
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001022 private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
1023 public boolean onMenuItemClick(MenuItem item) {
1024 Intent intent = new Intent(Intent.ACTION_VIEW);
1025 // XXX We need to specify the component here because if we don't
1026 // the activity manager will try to resolve the type by calling
1027 // the content provider, which causes it to be loaded in a process
1028 // other than the Dialer process, which causes a lot of stuff to
1029 // break.
1030 intent.setClassName("com.android.phone",
1031 "com.android.phone.SimContacts");
1032 startActivity(intent);
1033 return true;
1034 }
1035 };
1036
1037 private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
1038 public boolean onMenuItemClick(MenuItem item) {
1039 Intent intent = new Intent(Intent.ACTION_VIEW);
1040 // XXX We need to specify the component here because if we don't
1041 // the activity manager will try to resolve the type by calling
1042 // the content provider, which causes it to be loaded in a process
1043 // other than the Dialer process, which causes a lot of stuff to
1044 // break.
1045 intent.setClassName("com.android.phone",
Andrew Leeda90d682014-10-31 13:12:20 -07001046 "com.android.phone.settings.fdn.FdnList");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001047 startActivity(intent);
1048 return true;
1049 }
1050 };
1051
1052 private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
1053 public boolean onMenuItemClick(MenuItem item) {
1054 Intent intent = new Intent(
Wink Savillec3886682009-04-02 11:00:56 -07001055 Intent.ACTION_VIEW, Uri.parse("content://icc/sdn"));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001056 // XXX We need to specify the component here because if we don't
1057 // the activity manager will try to resolve the type by calling
1058 // the content provider, which causes it to be loaded in a process
1059 // other than the Dialer process, which causes a lot of stuff to
1060 // break.
1061 intent.setClassName("com.android.phone",
1062 "com.android.phone.ADNList");
1063 startActivity(intent);
1064 return true;
1065 }
1066 };
1067
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001068 private MenuItem.OnMenuItemClickListener mGetPdpList = new MenuItem.OnMenuItemClickListener() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001069 public boolean onMenuItemClick(MenuItem item) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001070 //FIXME: Replace with a TelephonyManager call
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001071 phone.getDataCallList(null);
1072 return true;
1073 }
1074 };
1075
1076 private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
1077 public boolean onMenuItemClick(MenuItem item) {
1078 Intent intent = new Intent();
1079 intent.setClass(RadioInfo.this, BandMode.class);
1080 startActivity(intent);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001081 return true;
1082 }
1083 };
johnwang342101a2009-09-23 16:22:34 -07001084
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001085 private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
1086 public boolean onMenuItemClick(MenuItem item) {
1087 int state = mTelephonyManager.getDataState();
1088 switch (state) {
1089 case TelephonyManager.DATA_CONNECTED:
Nathan Haroldcea413a2015-11-23 15:48:10 -08001090 //FIXME: Replace with a TelephonyManager call
Robert Greenwalt0d4c5002014-05-21 20:02:32 -07001091 phone.setDataEnabled(false);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001092 break;
1093 case TelephonyManager.DATA_DISCONNECTED:
Nathan Haroldcea413a2015-11-23 15:48:10 -08001094 //FIXME: Replace with a TelephonyManager call
Robert Greenwalt0d4c5002014-05-21 20:02:32 -07001095 phone.setDataEnabled(true);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001096 break;
1097 default:
1098 // do nothing
1099 break;
1100 }
1101 return true;
1102 }
1103 };
1104
Nathan Harold2b77d742016-03-19 13:22:10 -07001105 private boolean isRadioOn() {
1106 //FIXME: Replace with a TelephonyManager call
1107 return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
1108 }
1109
1110 private void updateRadioPowerState() {
1111 //delightful hack to prevent on-checked-changed calls from
1112 //actually forcing the radio preference to its transient/current value.
1113 radioPowerOnSwitch.setOnCheckedChangeListener(null);
1114 radioPowerOnSwitch.setChecked(isRadioOn());
1115 radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
1116 }
1117
Nathan Harold12e1f552016-06-17 13:55:38 -07001118 void setImsVolteProvisionedState( boolean state ) {
1119 Log.d(TAG, "setImsVolteProvisioned state: " + ((state)? "on":"off"));
1120 setImsConfigProvisionedState( IMS_VOLTE_PROVISIONED_CONFIG_ID, state );
1121 }
1122
1123 void setImsVtProvisionedState( boolean state ) {
1124 Log.d(TAG, "setImsVtProvisioned() state: " + ((state)? "on":"off"));
1125 setImsConfigProvisionedState( IMS_VT_PROVISIONED_CONFIG_ID, state );
1126 }
1127
1128 void setImsWfcProvisionedState( boolean state ) {
1129 Log.d(TAG, "setImsWfcProvisioned() state: " + ((state)? "on":"off"));
1130 setImsConfigProvisionedState( IMS_WFC_PROVISIONED_CONFIG_ID, state );
1131 }
1132
1133 void setImsConfigProvisionedState( int configItem, boolean state ) {
1134 if (phone != null && mImsManager != null) {
1135 QueuedWork.singleThreadExecutor().submit(new Runnable() {
1136 public void run() {
1137 try {
1138 mImsManager.getConfigInterface().setProvisionedValue(
1139 configItem,
1140 state? 1 : 0);
1141 } catch (ImsException e) {
1142 Log.e(TAG, "setImsConfigProvisioned() exception:", e);
1143 }
1144 }
1145 });
1146 }
1147 }
1148
Nathan Harold2b77d742016-03-19 13:22:10 -07001149 OnCheckedChangeListener mRadioPowerOnChangeListener = new OnCheckedChangeListener() {
1150 @Override
1151 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1152 log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
1153 phone.setRadioPower(isChecked);
1154 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001155 };
1156
Nathan Harold12e1f552016-06-17 13:55:38 -07001157 private boolean isImsVolteProvisioned() {
Nathan Harold2b77d742016-03-19 13:22:10 -07001158 if (phone != null && mImsManager != null) {
1159 return mImsManager.isVolteEnabledByPlatform(phone.getContext())
1160 && mImsManager.isVolteProvisionedOnDevice(phone.getContext());
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -08001161 }
1162 return false;
1163 }
1164
Nathan Harold12e1f552016-06-17 13:55:38 -07001165 OnCheckedChangeListener mImsVolteCheckedChangeListener = new OnCheckedChangeListener() {
Wink Saville426fc662011-09-25 14:39:02 -07001166 @Override
Nathan Harold2b77d742016-03-19 13:22:10 -07001167 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Nathan Harold12e1f552016-06-17 13:55:38 -07001168 setImsVolteProvisionedState(isChecked);
Nathan Harold2b77d742016-03-19 13:22:10 -07001169 }
Wink Saville426fc662011-09-25 14:39:02 -07001170 };
1171
Nathan Harold12e1f552016-06-17 13:55:38 -07001172 private boolean isImsVtProvisioned() {
1173 if (phone != null && mImsManager != null) {
1174 return mImsManager.isVtEnabledByPlatform(phone.getContext())
1175 && mImsManager.isVtProvisionedOnDevice(phone.getContext());
1176 }
1177 return false;
1178 }
1179
1180 OnCheckedChangeListener mImsVtCheckedChangeListener = new OnCheckedChangeListener() {
1181 @Override
1182 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1183 setImsVtProvisionedState(isChecked);
1184 }
1185 };
1186
1187 private boolean isImsWfcProvisioned() {
1188 if (phone != null && mImsManager != null) {
1189 return mImsManager.isWfcEnabledByPlatform(phone.getContext())
1190 && mImsManager.isWfcProvisionedOnDevice(phone.getContext());
1191 }
1192 return false;
1193 }
1194
1195 OnCheckedChangeListener mImsWfcCheckedChangeListener = new OnCheckedChangeListener() {
1196 @Override
1197 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1198 setImsWfcProvisionedState(isChecked);
1199 }
1200 };
1201
1202 private void updateImsProvisionedState() {
1203 log("updateImsProvisionedState isImsVolteProvisioned()=" + isImsVolteProvisioned());
Nathan Harold2b77d742016-03-19 13:22:10 -07001204 //delightful hack to prevent on-checked-changed calls from
1205 //actually forcing the ims provisioning to its transient/current value.
Nathan Harold12e1f552016-06-17 13:55:38 -07001206 imsVolteProvisionedSwitch.setOnCheckedChangeListener(null);
1207 imsVolteProvisionedSwitch.setChecked(isImsVolteProvisioned());
1208 imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
1209
1210 imsVtProvisionedSwitch.setOnCheckedChangeListener(null);
1211 imsVtProvisionedSwitch.setChecked(isImsVtProvisioned());
1212 imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
1213
1214 imsWfcProvisionedSwitch.setOnCheckedChangeListener(null);
1215 imsWfcProvisionedSwitch.setChecked(isImsWfcProvisioned());
1216 imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
Wink Saville426fc662011-09-25 14:39:02 -07001217 }
1218
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001219 OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
1220 public void onClick(View v) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001221 //FIXME: Replace with a TelephonyManager call
Wink Savillec3886682009-04-02 11:00:56 -07001222 phone.disableDnsCheck(!phone.isDnsCheckDisabled());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001223 updateDnsCheckState();
1224 }
1225 };
johnwang342101a2009-09-23 16:22:34 -07001226
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001227 OnClickListener mOemInfoButtonHandler = new OnClickListener() {
1228 public void onClick(View v) {
1229 Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
1230 try {
1231 startActivity(intent);
1232 } catch (android.content.ActivityNotFoundException ex) {
Wink Savillebf471282013-04-05 15:04:05 -07001233 log("OEM-specific Info/Settings Activity Not Found : " + ex);
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001234 // If the activity does not exist, there are no OEM
1235 // settings, and so we can just do nothing...
1236 }
1237 }
1238 };
1239
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001240 OnClickListener mPingButtonHandler = new OnClickListener() {
1241 public void onClick(View v) {
1242 updatePingState();
1243 }
1244 };
1245
1246 OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
1247 public void onClick(View v) {
1248 updateSmscButton.setEnabled(false);
jsh21dd4072009-05-12 11:26:55 -07001249 phone.setSmscAddress(smsc.getText().toString(),
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001250 mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
1251 }
1252 };
1253
1254 OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
1255 public void onClick(View v) {
1256 refreshSmsc();
1257 }
1258 };
1259
Nathan Haroldcea413a2015-11-23 15:48:10 -08001260 AdapterView.OnItemSelectedListener mPreferredNetworkHandler =
1261 new AdapterView.OnItemSelectedListener() {
1262
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001263 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001264 if (mPreferredNetworkTypeResult != pos && pos >= 0
1265 && pos <= mPreferredNetworkLabels.length - 2) {
1266 mPreferredNetworkTypeResult = pos;
1267 Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
1268 phone.setPreferredNetworkType(mPreferredNetworkTypeResult, msg);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001269 }
1270 }
1271
1272 public void onNothingSelected(AdapterView parent) {
1273 }
1274 };
1275
Nathan Harold2b77d742016-03-19 13:22:10 -07001276 AdapterView.OnItemSelectedListener mCellInfoRefreshRateHandler =
1277 new AdapterView.OnItemSelectedListener() {
Wink Savillebf471282013-04-05 15:04:05 -07001278
Nathan Harold2b77d742016-03-19 13:22:10 -07001279 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1280 mCellInfoRefreshRateIndex = pos;
1281 phone.setCellInfoListRate(mCellInfoRefreshRates[pos]);
1282 updateAllCellInfo();
1283 }
1284
1285 public void onNothingSelected(AdapterView parent) {
1286 }
1287 };
1288
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001289}