blob: 32e209ea3c4a28cdc9d6ff36bd09ffda131816ba [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
Nathan Haroldf10ea322018-04-24 13:31:07 -070019import static android.net.ConnectivityManager.NetworkCallback;
Nathan Harolddaea8be2018-06-05 14:02:35 -070020import static android.provider.Settings.Global.PREFERRED_NETWORK_MODE;
Nathan Haroldf10ea322018-04-24 13:31:07 -070021
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080022import android.app.Activity;
Nathan Harolde272c202016-10-27 13:45:00 -070023import android.app.AlertDialog;
24import android.app.Dialog;
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -080025import android.app.QueuedWork;
Youhan Wangfd781e92016-12-16 15:53:16 -080026import android.content.ComponentName;
Meng Wang586741c2017-04-26 15:02:51 -070027import android.content.Context;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080028import android.content.Intent;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +080029import android.content.pm.PackageManager;
30import android.content.pm.ResolveInfo;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080031import android.content.res.Resources;
Nathan Haroldcea413a2015-11-23 15:48:10 -080032import android.graphics.Typeface;
Nathan Haroldf10ea322018-04-24 13:31:07 -070033import android.net.ConnectivityManager;
34import android.net.Network;
35import android.net.NetworkCapabilities;
36import android.net.NetworkRequest;
Jeff Sharkey93029862011-05-27 18:26:15 -070037import android.net.TrafficStats;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080038import android.net.Uri;
39import android.os.AsyncResult;
Sreekanth Badidac888e192018-02-05 17:18:40 +010040import android.os.Build;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080041import android.os.Bundle;
42import android.os.Handler;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080043import android.os.Message;
Nathan Harolddaea8be2018-06-05 14:02:35 -070044import android.provider.Settings;
Meng Wang586741c2017-04-26 15:02:51 -070045import android.telephony.CarrierConfigManager;
Wink Saville79bff2a2012-06-01 14:37:21 -070046import android.telephony.CellInfo;
Nathan Haroldcea413a2015-11-23 15:48:10 -080047import android.telephony.CellInfoCdma;
48import android.telephony.CellInfoGsm;
49import android.telephony.CellInfoLte;
50import android.telephony.CellInfoWcdma;
51import android.telephony.CellIdentityCdma;
52import android.telephony.CellIdentityGsm;
53import android.telephony.CellIdentityLte;
54import android.telephony.CellIdentityWcdma;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080055import android.telephony.CellLocation;
Nathan Haroldcea413a2015-11-23 15:48:10 -080056import android.telephony.CellSignalStrengthCdma;
57import android.telephony.CellSignalStrengthGsm;
58import android.telephony.CellSignalStrengthLte;
59import android.telephony.CellSignalStrengthWcdma;
Nathan Harold2b77d742016-03-19 13:22:10 -070060import android.telephony.PreciseCallState;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080061import android.telephony.PhoneStateListener;
Nathan Harold433ca442018-04-23 18:20:43 -070062import android.telephony.PhysicalChannelConfig;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080063import android.telephony.ServiceState;
Nathan Harold2b77d742016-03-19 13:22:10 -070064import android.telephony.SignalStrength;
Nathan Haroldcea413a2015-11-23 15:48:10 -080065import android.telephony.SubscriptionManager;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080066import android.telephony.TelephonyManager;
jsh534f5ae2009-09-24 09:19:22 -070067import android.telephony.cdma.CdmaCellLocation;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080068import android.telephony.gsm.GsmCellLocation;
Nathan Harold6e16fdf2018-04-17 17:01:32 -070069import android.text.TextUtils;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080070import android.util.Log;
71import android.view.Menu;
72import android.view.MenuItem;
73import android.view.View;
74import android.view.View.OnClickListener;
75import android.widget.AdapterView;
76import android.widget.ArrayAdapter;
77import android.widget.Button;
Nathan Harold2b77d742016-03-19 13:22:10 -070078import android.widget.CompoundButton;
79import android.widget.CompoundButton.OnCheckedChangeListener;
Jason Monk39b46742015-09-10 15:52:51 -040080import android.widget.EditText;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080081import android.widget.Spinner;
Nathan Harold2b77d742016-03-19 13:22:10 -070082import android.widget.Switch;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080083import android.widget.TextView;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080084
Jason Monk39b46742015-09-10 15:52:51 -040085import com.android.ims.ImsConfig;
86import com.android.ims.ImsException;
87import com.android.ims.ImsManager;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080088import com.android.internal.telephony.Phone;
Wink Saville55434042012-06-14 12:33:43 -070089import com.android.internal.telephony.PhoneConstants;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080090import com.android.internal.telephony.PhoneFactory;
Nathan Haroldcea413a2015-11-23 15:48:10 -080091import com.android.internal.telephony.RILConstants;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080092import com.android.internal.telephony.TelephonyProperties;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080093
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080094import java.io.IOException;
Jason Monk39b46742015-09-10 15:52:51 -040095import java.net.HttpURLConnection;
96import java.net.URL;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080097import java.net.UnknownHostException;
98import java.util.ArrayList;
99import java.util.List;
100
101public class RadioInfo extends Activity {
Nathan Harold2b77d742016-03-19 13:22:10 -0700102 private static final String TAG = "RadioInfo";
johnwang342101a2009-09-23 16:22:34 -0700103
Nathan Harold2b77d742016-03-19 13:22:10 -0700104 private static final String[] mPreferredNetworkLabels = {
105 "WCDMA preferred",
106 "GSM only",
107 "WCDMA only",
108 "GSM auto (PRL)",
109 "CDMA auto (PRL)",
110 "CDMA only",
111 "EvDo only",
112 "Global auto (PRL)",
113 "LTE/CDMA auto (PRL)",
114 "LTE/UMTS auto (PRL)",
115 "LTE/CDMA/UMTS auto (PRL)",
116 "LTE only",
117 "LTE/WCDMA",
118 "TD-SCDMA only",
119 "TD-SCDMA/WCDMA",
120 "LTE/TD-SCDMA",
121 "TD-SCDMA/GSM",
122 "TD-SCDMA/UMTS",
123 "LTE/TD-SCDMA/WCDMA",
124 "LTE/TD-SCDMA/UMTS",
125 "TD-SCDMA/CDMA/UMTS",
126 "Global/TD-SCDMA",
127 "Unknown"
128 };
129
Jordan Liub69e8f22019-04-02 12:13:31 -0700130 private static String[] mPhoneIndexLabels;
Nathan Harold2b77d742016-03-19 13:22:10 -0700131
132 private static final int CELL_INFO_LIST_RATE_DISABLED = Integer.MAX_VALUE;
133 private static final int CELL_INFO_LIST_RATE_MAX = 0;
134
Nathan Harold12e1f552016-06-17 13:55:38 -0700135
136 private static final int IMS_VOLTE_PROVISIONED_CONFIG_ID =
137 ImsConfig.ConfigConstants.VLT_SETTING_ENABLED;
138
139 private static final int IMS_VT_PROVISIONED_CONFIG_ID =
140 ImsConfig.ConfigConstants.LVC_SETTING_ENABLED;
141
142 private static final int IMS_WFC_PROVISIONED_CONFIG_ID =
143 ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED;
144
Meng Wang586741c2017-04-26 15:02:51 -0700145 private static final int EAB_PROVISIONED_CONFIG_ID =
146 ImsConfig.ConfigConstants.EAB_SETTING_ENABLED;
147
Nathan Harold2b77d742016-03-19 13:22:10 -0700148 //Values in must match mCellInfoRefreshRates
149 private static final String[] mCellInfoRefreshRateLabels = {
150 "Disabled",
151 "Immediate",
152 "Min 5s",
153 "Min 10s",
154 "Min 60s"
155 };
156
157 //Values in seconds, must match mCellInfoRefreshRateLabels
158 private static final int mCellInfoRefreshRates[] = {
159 CELL_INFO_LIST_RATE_DISABLED,
160 CELL_INFO_LIST_RATE_MAX,
161 5000,
162 10000,
163 60000
164 };
165
Jordan Liub69e8f22019-04-02 12:13:31 -0700166 private static void log(String s) {
Nathan Harold2b77d742016-03-19 13:22:10 -0700167 Log.d(TAG, s);
168 }
169
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800170 private static final int EVENT_CFI_CHANGED = 302;
171
172 private static final int EVENT_QUERY_PREFERRED_TYPE_DONE = 1000;
173 private static final int EVENT_SET_PREFERRED_TYPE_DONE = 1001;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800174 private static final int EVENT_QUERY_SMSC_DONE = 1005;
175 private static final int EVENT_UPDATE_SMSC_DONE = 1006;
176
Jordan Liub69e8f22019-04-02 12:13:31 -0700177 private static final int MENU_ITEM_SELECT_BAND = 0;
178 private static final int MENU_ITEM_VIEW_ADN = 1;
179 private static final int MENU_ITEM_VIEW_FDN = 2;
180 private static final int MENU_ITEM_VIEW_SDN = 3;
181 private static final int MENU_ITEM_GET_IMS_STATUS = 4;
182 private static final int MENU_ITEM_TOGGLE_DATA = 5;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800183
Wink Savillec3886682009-04-02 11:00:56 -0700184 private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800185 private TextView number;
Jordan Liub69e8f22019-04-02 12:13:31 -0700186 private TextView mSubscriptionId;
187 private TextView mDds;
Meng Wang9053f172017-06-23 16:02:14 -0700188 private TextView mSubscriberId;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800189 private TextView callState;
190 private TextView operatorName;
191 private TextView roamingState;
192 private TextView gsmState;
193 private TextView gprsState;
Nathan Harold2b77d742016-03-19 13:22:10 -0700194 private TextView voiceNetwork;
195 private TextView dataNetwork;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800196 private TextView dBm;
197 private TextView mMwi;
198 private TextView mCfi;
199 private TextView mLocation;
Wink Saville79bff2a2012-06-01 14:37:21 -0700200 private TextView mCellInfo;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800201 private TextView sent;
202 private TextView received;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800203 private TextView mPingHostnameV4;
204 private TextView mPingHostnameV6;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800205 private TextView mHttpClientTest;
Nathan Harold433ca442018-04-23 18:20:43 -0700206 private TextView mPhyChanConfig;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800207 private TextView dnsCheckState;
Nathan Haroldf10ea322018-04-24 13:31:07 -0700208 private TextView mDownlinkKbps;
209 private TextView mUplinkKbps;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800210 private EditText smsc;
Nathan Harold2b77d742016-03-19 13:22:10 -0700211 private Switch radioPowerOnSwitch;
212 private Button cellInfoRefreshRateButton;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800213 private Button dnsCheckToggleButton;
214 private Button pingTestButton;
215 private Button updateSmscButton;
216 private Button refreshSmscButton;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800217 private Button oemInfoButton;
Youhan Wangfd781e92016-12-16 15:53:16 -0800218 private Button carrierProvisioningButton;
219 private Button triggercarrierProvisioningButton;
Nathan Harold12e1f552016-06-17 13:55:38 -0700220 private Switch imsVolteProvisionedSwitch;
221 private Switch imsVtProvisionedSwitch;
222 private Switch imsWfcProvisionedSwitch;
Meng Wang586741c2017-04-26 15:02:51 -0700223 private Switch eabProvisionedSwitch;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800224 private Spinner preferredNetworkType;
Jordan Liub69e8f22019-04-02 12:13:31 -0700225 private Spinner mSelectPhoneIndex;
Nathan Harold2b77d742016-03-19 13:22:10 -0700226 private Spinner cellInfoRefreshRateSpinner;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800227
Nathan Haroldf10ea322018-04-24 13:31:07 -0700228 private ConnectivityManager mConnectivityManager;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800229 private TelephonyManager mTelephonyManager;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800230 private ImsManager mImsManager = null;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800231 private Phone phone = null;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800232
Nathan Haroldcea413a2015-11-23 15:48:10 -0800233 private String mPingHostnameResultV4;
234 private String mPingHostnameResultV6;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800235 private String mHttpClientTestResult;
236 private boolean mMwiValue = false;
237 private boolean mCfiValue = false;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800238
239 private List<CellInfo> mCellInfoResult = null;
240 private CellLocation mCellLocationResult = null;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800241
242 private int mPreferredNetworkTypeResult;
Nathan Harold2b77d742016-03-19 13:22:10 -0700243 private int mCellInfoRefreshRateIndex;
Jordan Liub69e8f22019-04-02 12:13:31 -0700244 private int mSelectedPhoneIndex;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800245
Nathan Haroldf10ea322018-04-24 13:31:07 -0700246 private final NetworkRequest mDefaultNetworkRequest = new NetworkRequest.Builder()
247 .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
248 .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
249 .build();
250
251 private final NetworkCallback mNetworkCallback = new NetworkCallback() {
252 public void onCapabilitiesChanged(Network n, NetworkCapabilities nc) {
253 int dlbw = nc.getLinkDownstreamBandwidthKbps();
254 int ulbw = nc.getLinkUpstreamBandwidthKbps();
255 updateBandwidths(dlbw, ulbw);
256 }
257 };
258
Nathan Harold2b77d742016-03-19 13:22:10 -0700259 private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800260 @Override
261 public void onDataConnectionStateChanged(int state) {
262 updateDataState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800263 updateNetworkType();
264 }
265
266 @Override
267 public void onDataActivity(int direction) {
268 updateDataStats2();
269 }
270
271 @Override
Nathan Harold2b77d742016-03-19 13:22:10 -0700272 public void onCallStateChanged(int state, String incomingNumber) {
273 updateNetworkType();
274 updatePhoneState(state);
275 }
276
277 @Override
278 public void onPreciseCallStateChanged(PreciseCallState preciseState) {
279 updateNetworkType();
280 }
281
282 @Override
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800283 public void onCellLocationChanged(CellLocation location) {
284 updateLocation(location);
285 }
286
287 @Override
288 public void onMessageWaitingIndicatorChanged(boolean mwi) {
289 mMwiValue = mwi;
290 updateMessageWaiting();
291 }
292
293 @Override
294 public void onCallForwardingIndicatorChanged(boolean cfi) {
295 mCfiValue = cfi;
296 updateCallRedirect();
297 }
Wink Saville79bff2a2012-06-01 14:37:21 -0700298
299 @Override
300 public void onCellInfoChanged(List<CellInfo> arrayCi) {
Wink Savillebf471282013-04-05 15:04:05 -0700301 log("onCellInfoChanged: arrayCi=" + arrayCi);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800302 mCellInfoResult = arrayCi;
303 updateCellInfo(mCellInfoResult);
Wink Saville79bff2a2012-06-01 14:37:21 -0700304 }
Wink Saville4f0d8812014-04-15 22:05:24 -0700305
306 @Override
Nathan Harold2b77d742016-03-19 13:22:10 -0700307 public void onSignalStrengthsChanged(SignalStrength signalStrength) {
308 log("onSignalStrengthChanged: SignalStrength=" +signalStrength);
309 updateSignalStrength(signalStrength);
310 }
311
312 @Override
313 public void onServiceStateChanged(ServiceState serviceState) {
314 log("onServiceStateChanged: ServiceState=" + serviceState);
315 updateServiceState(serviceState);
316 updateRadioPowerState();
317 updateNetworkType();
Nathan Harold12e1f552016-06-17 13:55:38 -0700318 updateImsProvisionedState();
Nathan Harold2b77d742016-03-19 13:22:10 -0700319 }
Nathan Harold433ca442018-04-23 18:20:43 -0700320
321 @Override
322 public void onPhysicalChannelConfigurationChanged(
323 List<PhysicalChannelConfig> configs) {
324 updatePhysicalChannelConfiguration(configs);
325 }
326
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800327 };
328
Nathan Harold433ca442018-04-23 18:20:43 -0700329 private void updatePhysicalChannelConfiguration(List<PhysicalChannelConfig> configs) {
330 StringBuilder sb = new StringBuilder();
331 String div = "";
332 sb.append("{");
333 if (configs != null) {
334 for(PhysicalChannelConfig c : configs) {
335 sb.append(div).append(c);
336 div = ",";
337 }
338 }
339 sb.append("}");
340 mPhyChanConfig.setText(sb.toString());
341 }
342
Nathan Haroldcea413a2015-11-23 15:48:10 -0800343 private void updatePreferredNetworkType(int type) {
344 if (type >= mPreferredNetworkLabels.length || type < 0) {
345 log("EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
346 "type=" + type);
347 type = mPreferredNetworkLabels.length - 1; //set to Unknown
348 }
349 mPreferredNetworkTypeResult = type;
350
351 preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
352 }
353
Jordan Liub69e8f22019-04-02 12:13:31 -0700354 private void updatePhoneIndex(int phoneIndex, int subId) {
355 // unregister listeners on the old subId
356 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
357 mTelephonyManager.setCellInfoListRate(CELL_INFO_LIST_RATE_DISABLED);
358
359 // update the subId
360 mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
361 mImsManager = ImsManager.getInstance(getApplicationContext(), phoneIndex);
362
363 // update the phoneId
364 phone = PhoneFactory.getPhone(phoneIndex);
365
366 updateAllFields();
367 }
368
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800369 private Handler mHandler = new Handler() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800370 @Override
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800371 public void handleMessage(Message msg) {
372 AsyncResult ar;
373 switch (msg.what) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800374 case EVENT_QUERY_PREFERRED_TYPE_DONE:
375 ar= (AsyncResult) msg.obj;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800376 if (ar.exception == null && ar.result != null) {
377 updatePreferredNetworkType(((int[])ar.result)[0]);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800378 } else {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800379 //In case of an exception, we will set this to unknown
380 updatePreferredNetworkType(mPreferredNetworkLabels.length-1);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800381 }
382 break;
383 case EVENT_SET_PREFERRED_TYPE_DONE:
384 ar= (AsyncResult) msg.obj;
385 if (ar.exception != null) {
Nathan Harolded38afa2016-04-13 00:29:30 -0700386 log("Set preferred network type failed.");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800387 }
388 break;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800389 case EVENT_QUERY_SMSC_DONE:
390 ar= (AsyncResult) msg.obj;
391 if (ar.exception != null) {
392 smsc.setText("refresh error");
393 } else {
jsh21dd4072009-05-12 11:26:55 -0700394 smsc.setText((String)ar.result);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800395 }
396 break;
397 case EVENT_UPDATE_SMSC_DONE:
398 updateSmscButton.setEnabled(true);
399 ar= (AsyncResult) msg.obj;
400 if (ar.exception != null) {
401 smsc.setText("update error");
402 }
403 break;
404 default:
Nathan Haroldcea413a2015-11-23 15:48:10 -0800405 super.handleMessage(msg);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800406 break;
407
408 }
409 }
410 };
411
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800412 @Override
413 public void onCreate(Bundle icicle) {
414 super.onCreate(icicle);
fionaxub54cb2d2016-09-22 15:01:05 -0700415 if (!android.os.Process.myUserHandle().isSystem()) {
416 Log.e(TAG, "Not run from system user, don't do anything.");
417 finish();
418 return;
419 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800420
421 setContentView(R.layout.radio_info);
422
Nathan Haroldcea413a2015-11-23 15:48:10 -0800423 log("Started onCreate");
424
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800425 mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
Nathan Haroldf10ea322018-04-24 13:31:07 -0700426 mConnectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800427 phone = PhoneFactory.getDefaultPhone();
428
Nathan Haroldcea413a2015-11-23 15:48:10 -0800429 mImsManager = ImsManager.getInstance(getApplicationContext(),
430 SubscriptionManager.getDefaultVoicePhoneId());
431
Jordan Liub69e8f22019-04-02 12:13:31 -0700432 mPhoneIndexLabels = getPhoneIndexLabels(mTelephonyManager);
433
Meng Wang9053f172017-06-23 16:02:14 -0700434 mDeviceId = (TextView) findViewById(R.id.imei);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800435 number = (TextView) findViewById(R.id.number);
Jordan Liub69e8f22019-04-02 12:13:31 -0700436 mSubscriptionId = (TextView) findViewById(R.id.subid);
437 mDds = (TextView) findViewById(R.id.dds);
Meng Wang9053f172017-06-23 16:02:14 -0700438 mSubscriberId = (TextView) findViewById(R.id.imsi);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800439 callState = (TextView) findViewById(R.id.call);
440 operatorName = (TextView) findViewById(R.id.operator);
441 roamingState = (TextView) findViewById(R.id.roaming);
442 gsmState = (TextView) findViewById(R.id.gsm);
443 gprsState = (TextView) findViewById(R.id.gprs);
Nathan Harold2b77d742016-03-19 13:22:10 -0700444 voiceNetwork = (TextView) findViewById(R.id.voice_network);
445 dataNetwork = (TextView) findViewById(R.id.data_network);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800446 dBm = (TextView) findViewById(R.id.dbm);
447 mMwi = (TextView) findViewById(R.id.mwi);
448 mCfi = (TextView) findViewById(R.id.cfi);
449 mLocation = (TextView) findViewById(R.id.location);
Wink Saville79bff2a2012-06-01 14:37:21 -0700450 mCellInfo = (TextView) findViewById(R.id.cellinfo);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800451 mCellInfo.setTypeface(Typeface.MONOSPACE);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800452
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800453 sent = (TextView) findViewById(R.id.sent);
454 received = (TextView) findViewById(R.id.received);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800455 smsc = (EditText) findViewById(R.id.smsc);
456 dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800457 mPingHostnameV4 = (TextView) findViewById(R.id.pingHostnameV4);
458 mPingHostnameV6 = (TextView) findViewById(R.id.pingHostnameV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800459 mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
460
Nathan Harold433ca442018-04-23 18:20:43 -0700461 mPhyChanConfig = (TextView) findViewById(R.id.phy_chan_config);
462
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800463 preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
Jordan Liub69e8f22019-04-02 12:13:31 -0700464 ArrayAdapter<String> preferredNetworkTypeAdapter = new ArrayAdapter<String> (this,
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800465 android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
Jordan Liub69e8f22019-04-02 12:13:31 -0700466 preferredNetworkTypeAdapter
467 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
468 preferredNetworkType.setAdapter(preferredNetworkTypeAdapter);
469
470 mSelectPhoneIndex = (Spinner) findViewById(R.id.phoneIndex);
471 ArrayAdapter<String> phoneIndexAdapter = new ArrayAdapter<String> (this,
472 android.R.layout.simple_spinner_item, mPhoneIndexLabels);
473 phoneIndexAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
474 mSelectPhoneIndex.setAdapter(phoneIndexAdapter);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800475
Nathan Harold2b77d742016-03-19 13:22:10 -0700476 cellInfoRefreshRateSpinner = (Spinner) findViewById(R.id.cell_info_rate_select);
477 ArrayAdapter<String> cellInfoAdapter = new ArrayAdapter<String>(this,
478 android.R.layout.simple_spinner_item, mCellInfoRefreshRateLabels);
479 cellInfoAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
480 cellInfoRefreshRateSpinner.setAdapter(cellInfoAdapter);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800481
Nathan Harold12e1f552016-06-17 13:55:38 -0700482 imsVolteProvisionedSwitch = (Switch) findViewById(R.id.volte_provisioned_switch);
483 imsVtProvisionedSwitch = (Switch) findViewById(R.id.vt_provisioned_switch);
484 imsWfcProvisionedSwitch = (Switch) findViewById(R.id.wfc_provisioned_switch);
Meng Wang69439b52017-05-01 08:31:14 -0700485 eabProvisionedSwitch = (Switch) findViewById(R.id.eab_provisioned_switch);
Wink Savillebf471282013-04-05 15:04:05 -0700486
Brad Ebinger8bff9c32019-03-11 17:33:53 -0700487 if (!ImsManager.isImsSupportedOnDevice(phone.getContext())) {
488 imsVolteProvisionedSwitch.setVisibility(View.GONE);
489 imsVtProvisionedSwitch.setVisibility(View.GONE);
490 imsWfcProvisionedSwitch.setVisibility(View.GONE);
491 eabProvisionedSwitch.setVisibility(View.GONE);
492 }
493
Nathan Harold2b77d742016-03-19 13:22:10 -0700494 radioPowerOnSwitch = (Switch) findViewById(R.id.radio_power);
Wink Saville426fc662011-09-25 14:39:02 -0700495
Nathan Haroldf10ea322018-04-24 13:31:07 -0700496 mDownlinkKbps = (TextView) findViewById(R.id.dl_kbps);
497 mUplinkKbps = (TextView) findViewById(R.id.ul_kbps);
498 updateBandwidths(0, 0);
499
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800500 pingTestButton = (Button) findViewById(R.id.ping_test);
501 pingTestButton.setOnClickListener(mPingButtonHandler);
502 updateSmscButton = (Button) findViewById(R.id.update_smsc);
503 updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
504 refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
505 refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
506 dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
507 dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
Youhan Wangfd781e92016-12-16 15:53:16 -0800508 carrierProvisioningButton = (Button) findViewById(R.id.carrier_provisioning);
509 carrierProvisioningButton.setOnClickListener(mCarrierProvisioningButtonHandler);
510 triggercarrierProvisioningButton = (Button) findViewById(R.id.trigger_carrier_provisioning);
511 triggercarrierProvisioningButton.setOnClickListener(
512 mTriggerCarrierProvisioningButtonHandler);
johnwang342101a2009-09-23 16:22:34 -0700513
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800514 oemInfoButton = (Button) findViewById(R.id.oem_info);
515 oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
516 PackageManager pm = getPackageManager();
517 Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
518 List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
519 if (oemInfoIntentList.size() == 0) {
520 oemInfoButton.setEnabled(false);
521 }
522
Nathan Harolded38afa2016-04-13 00:29:30 -0700523 mCellInfoRefreshRateIndex = 0; //disabled
Nathan Haroldcea413a2015-11-23 15:48:10 -0800524 mPreferredNetworkTypeResult = mPreferredNetworkLabels.length - 1; //Unknown
Jordan Liub69e8f22019-04-02 12:13:31 -0700525 mSelectedPhoneIndex = 0; //phone 0
Nathan Haroldcea413a2015-11-23 15:48:10 -0800526
527 //FIXME: Replace with TelephonyManager call
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800528 phone.getPreferredNetworkType(
529 mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800530
Nathan Haroldcea413a2015-11-23 15:48:10 -0800531 restoreFromBundle(icicle);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800532 }
533
534 @Override
535 protected void onResume() {
536 super.onResume();
537
Nathan Haroldcea413a2015-11-23 15:48:10 -0800538 log("Started onResume");
539
Jordan Liub69e8f22019-04-02 12:13:31 -0700540 updateAllFields();
541 }
542
543 private void updateAllFields() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800544 updateMessageWaiting();
545 updateCallRedirect();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800546 updateDataState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800547 updateDataStats2();
Nathan Harold2b77d742016-03-19 13:22:10 -0700548 updateRadioPowerState();
Nathan Harold12e1f552016-06-17 13:55:38 -0700549 updateImsProvisionedState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800550 updateProperties();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800551 updateDnsCheckState();
Nathan Harold2b77d742016-03-19 13:22:10 -0700552 updateNetworkType();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800553
Nathan Haroldcea413a2015-11-23 15:48:10 -0800554 updateLocation(mCellLocationResult);
555 updateCellInfo(mCellInfoResult);
Jordan Liub69e8f22019-04-02 12:13:31 -0700556 updateSubscriptionIds();
Nathan Haroldcea413a2015-11-23 15:48:10 -0800557
558 mPingHostnameV4.setText(mPingHostnameResultV4);
559 mPingHostnameV6.setText(mPingHostnameResultV6);
560 mHttpClientTest.setText(mHttpClientTestResult);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800561
Nathan Harold2b77d742016-03-19 13:22:10 -0700562 cellInfoRefreshRateSpinner.setOnItemSelectedListener(mCellInfoRefreshRateHandler);
Nathan Harolded38afa2016-04-13 00:29:30 -0700563 //set selection after registering listener to force update
564 cellInfoRefreshRateSpinner.setSelection(mCellInfoRefreshRateIndex);
565
566 //set selection before registering to prevent update
567 preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
Nathan Harold2b77d742016-03-19 13:22:10 -0700568 preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
Nathan Harolded38afa2016-04-13 00:29:30 -0700569
Jordan Liub69e8f22019-04-02 12:13:31 -0700570 // set phone index
571 mSelectPhoneIndex.setSelection(mSelectedPhoneIndex, true);
572 mSelectPhoneIndex.setOnItemSelectedListener(mSelectPhoneIndexHandler);
573
Nathan Harold2b77d742016-03-19 13:22:10 -0700574 radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
Nathan Harold12e1f552016-06-17 13:55:38 -0700575 imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
576 imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
577 imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
Meng Wang586741c2017-04-26 15:02:51 -0700578 eabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
Nathan Harold2b77d742016-03-19 13:22:10 -0700579
Jordan Liub69e8f22019-04-02 12:13:31 -0700580 registerPhoneStateListener();
Nathan Harolded38afa2016-04-13 00:29:30 -0700581
Nathan Haroldf10ea322018-04-24 13:31:07 -0700582 mConnectivityManager.registerNetworkCallback(
583 mDefaultNetworkRequest, mNetworkCallback, mHandler);
584
Nathan Harolded38afa2016-04-13 00:29:30 -0700585 smsc.clearFocus();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800586 }
587
588 @Override
Nathan Haroldcea413a2015-11-23 15:48:10 -0800589 protected void onPause() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800590 super.onPause();
591
Wink Savillebf471282013-04-05 15:04:05 -0700592 log("onPause: unregister phone & data intents");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800593
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800594 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
Sooraj Sasindran5cce06b2016-08-18 15:49:49 -0700595 mTelephonyManager.setCellInfoListRate(CELL_INFO_LIST_RATE_DISABLED);
Nathan Haroldf10ea322018-04-24 13:31:07 -0700596 mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
597
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800598 }
599
Nathan Haroldcea413a2015-11-23 15:48:10 -0800600 private void restoreFromBundle(Bundle b) {
Nathan Harolde272c202016-10-27 13:45:00 -0700601 if(b == null) {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800602 return;
603 }
604
605 mPingHostnameResultV4 = b.getString("mPingHostnameResultV4","");
606 mPingHostnameResultV6 = b.getString("mPingHostnameResultV6","");
607 mHttpClientTestResult = b.getString("mHttpClientTestResult","");
608
609 mPingHostnameV4.setText(mPingHostnameResultV4);
610 mPingHostnameV6.setText(mPingHostnameResultV6);
611 mHttpClientTest.setText(mHttpClientTestResult);
612
Nathan Harold2b77d742016-03-19 13:22:10 -0700613 mPreferredNetworkTypeResult = b.getInt("mPreferredNetworkTypeResult",
614 mPreferredNetworkLabels.length - 1);
615
Jordan Liub69e8f22019-04-02 12:13:31 -0700616 mSelectedPhoneIndex = b.getInt("mSelectedPhoneIndex", 0);
617
Nathan Harold2b77d742016-03-19 13:22:10 -0700618 mCellInfoRefreshRateIndex = b.getInt("mCellInfoRefreshRateIndex", 0);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800619 }
620
621 @Override
622 protected void onSaveInstanceState(Bundle outState) {
623 outState.putString("mPingHostnameResultV4", mPingHostnameResultV4);
624 outState.putString("mPingHostnameResultV6", mPingHostnameResultV6);
625 outState.putString("mHttpClientTestResult", mHttpClientTestResult);
Nathan Harold2b77d742016-03-19 13:22:10 -0700626
Nathan Haroldcea413a2015-11-23 15:48:10 -0800627 outState.putInt("mPreferredNetworkTypeResult", mPreferredNetworkTypeResult);
Jordan Liub69e8f22019-04-02 12:13:31 -0700628 outState.putInt("mSelectedPhoneIndex", mSelectedPhoneIndex);
Nathan Harold2b77d742016-03-19 13:22:10 -0700629 outState.putInt("mCellInfoRefreshRateIndex", mCellInfoRefreshRateIndex);
630
Nathan Haroldcea413a2015-11-23 15:48:10 -0800631 }
632
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800633 @Override
634 public boolean onCreateOptionsMenu(Menu menu) {
Wink Savillec3886682009-04-02 11:00:56 -0700635 menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label)
636 .setOnMenuItemClickListener(mSelectBandCallback)
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800637 .setAlphabeticShortcut('b');
638 menu.add(1, MENU_ITEM_VIEW_ADN, 0,
639 R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
640 menu.add(1, MENU_ITEM_VIEW_FDN, 0,
641 R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
642 menu.add(1, MENU_ITEM_VIEW_SDN, 0,
643 R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
Brad Ebinger8bff9c32019-03-11 17:33:53 -0700644 if (ImsManager.isImsSupportedOnDevice(phone.getContext())) {
645 menu.add(1, MENU_ITEM_GET_IMS_STATUS,
646 0, R.string.radioInfo_menu_getIMS).setOnMenuItemClickListener(mGetImsStatus);
647 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800648 menu.add(1, MENU_ITEM_TOGGLE_DATA,
Nathan Harold2b77d742016-03-19 13:22:10 -0700649 0, R.string.radio_info_data_connection_disable).setOnMenuItemClickListener(mToggleData);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800650 return true;
651 }
652
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800653 @Override
Wink Savillec3886682009-04-02 11:00:56 -0700654 public boolean onPrepareOptionsMenu(Menu menu) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800655 // Get the TOGGLE DATA menu item in the right state.
656 MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
657 int state = mTelephonyManager.getDataState();
658 boolean visible = true;
659
660 switch (state) {
661 case TelephonyManager.DATA_CONNECTED:
662 case TelephonyManager.DATA_SUSPENDED:
Nathan Harold2b77d742016-03-19 13:22:10 -0700663 item.setTitle(R.string.radio_info_data_connection_disable);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800664 break;
665 case TelephonyManager.DATA_DISCONNECTED:
Nathan Harold2b77d742016-03-19 13:22:10 -0700666 item.setTitle(R.string.radio_info_data_connection_enable);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800667 break;
668 default:
669 visible = false;
670 break;
671 }
672 item.setVisible(visible);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800673 return true;
674 }
675
Jordan Liub69e8f22019-04-02 12:13:31 -0700676 // returns array of string labels for each phone index. The array index is equal to the phone
677 // index.
678 private static String[] getPhoneIndexLabels(TelephonyManager tm) {
679 int phones = tm.getPhoneCount();
680 String[] labels = new String[phones];
681 for (int i = 0; i < phones; i++) {
682 labels[i] = "Phone " + i;
683 }
684 return labels;
685 }
686
687 // register mPhoneStateListener for relevant fields using the current TelephonyManager
688 private void registerPhoneStateListener() {
689 mTelephonyManager.listen(mPhoneStateListener,
690 PhoneStateListener.LISTEN_CALL_STATE
691 //b/27803938 - RadioInfo currently cannot read PRECISE_CALL_STATE
692 // | PhoneStateListener.LISTEN_PRECISE_CALL_STATE
693 | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
694 | PhoneStateListener.LISTEN_DATA_ACTIVITY
695 | PhoneStateListener.LISTEN_CELL_LOCATION
696 | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
697 | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
698 | PhoneStateListener.LISTEN_CELL_INFO
699 | PhoneStateListener.LISTEN_SERVICE_STATE
700 | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
701 | PhoneStateListener.LISTEN_PHYSICAL_CHANNEL_CONFIGURATION);
702 }
703
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800704 private void updateDnsCheckState() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800705 //FIXME: Replace with a TelephonyManager call
Mike Lockwood5304c7e2009-04-05 11:37:45 -0700706 dnsCheckState.setText(phone.isDnsCheckDisabled() ?
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800707 "0.0.0.0 allowed" :"0.0.0.0 not allowed");
708 }
Wink Savillee2a14e32009-05-29 14:06:30 -0700709
Nathan Haroldf10ea322018-04-24 13:31:07 -0700710 private void updateBandwidths(int dlbw, int ulbw) {
711 dlbw = (dlbw < 0 || dlbw == Integer.MAX_VALUE) ? -1 : dlbw;
712 ulbw = (ulbw < 0 || ulbw == Integer.MAX_VALUE) ? -1 : ulbw;
713 mDownlinkKbps.setText(String.format("%-5d", dlbw));
714 mUplinkKbps.setText(String.format("%-5d", ulbw));
715 }
716
717
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800718 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700719 updateSignalStrength(SignalStrength signalStrength) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800720 Resources r = getResources();
721
Nathan Harold2b77d742016-03-19 13:22:10 -0700722 int signalDbm = signalStrength.getDbm();
Wink Savillee2a14e32009-05-29 14:06:30 -0700723
Nathan Harold2b77d742016-03-19 13:22:10 -0700724 int signalAsu = signalStrength.getAsuLevel();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800725
726 if (-1 == signalAsu) signalAsu = 0;
727
728 dBm.setText(String.valueOf(signalDbm) + " "
729 + r.getString(R.string.radioInfo_display_dbm) + " "
730 + String.valueOf(signalAsu) + " "
731 + r.getString(R.string.radioInfo_display_asu));
732 }
733
734 private final void updateLocation(CellLocation location) {
jsh534f5ae2009-09-24 09:19:22 -0700735 Resources r = getResources();
Wink Savillec3886682009-04-02 11:00:56 -0700736 if (location instanceof GsmCellLocation) {
737 GsmCellLocation loc = (GsmCellLocation)location;
jsh534f5ae2009-09-24 09:19:22 -0700738 int lac = loc.getLac();
739 int cid = loc.getCid();
740 mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
741 + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
742 + " "
743 + r.getString(R.string.radioInfo_cid) + " = "
744 + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
745 } else if (location instanceof CdmaCellLocation) {
746 CdmaCellLocation loc = (CdmaCellLocation)location;
747 int bid = loc.getBaseStationId();
748 int sid = loc.getSystemId();
749 int nid = loc.getNetworkId();
750 int lat = loc.getBaseStationLatitude();
751 int lon = loc.getBaseStationLongitude();
752 mLocation.setText("BID = "
753 + ((bid == -1) ? "unknown" : Integer.toHexString(bid))
754 + " "
755 + "SID = "
756 + ((sid == -1) ? "unknown" : Integer.toHexString(sid))
757 + " "
758 + "NID = "
759 + ((nid == -1) ? "unknown" : Integer.toHexString(nid))
760 + "\n"
761 + "LAT = "
762 + ((lat == -1) ? "unknown" : Integer.toHexString(lat))
763 + " "
764 + "LONG = "
765 + ((lon == -1) ? "unknown" : Integer.toHexString(lon)));
766 } else {
767 mLocation.setText("unknown");
Wink Savillec3886682009-04-02 11:00:56 -0700768 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800769
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800770
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800771 }
772
Nathan Haroldcea413a2015-11-23 15:48:10 -0800773 private final String getCellInfoDisplayString(int i) {
774 return (i != Integer.MAX_VALUE) ? Integer.toString(i) : "";
775 }
776
777 private final String getCellInfoDisplayString(long i) {
778 return (i != Long.MAX_VALUE) ? Long.toString(i) : "";
779 }
780
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700781 private final String getConnectionStatusString(CellInfo ci) {
782 String regStr = "";
783 String connStatStr = "";
784 String connector = "";
785
786 if (ci.isRegistered()) {
787 regStr = "R";
788 }
789 switch (ci.getCellConnectionStatus()) {
790 case CellInfo.CONNECTION_PRIMARY_SERVING: connStatStr = "P"; break;
791 case CellInfo.CONNECTION_SECONDARY_SERVING: connStatStr = "S"; break;
792 case CellInfo.CONNECTION_NONE: connStatStr = "N"; break;
793 case CellInfo.CONNECTION_UNKNOWN: /* Field is unsupported */ break;
794 default: break;
795 }
796 if (!TextUtils.isEmpty(regStr) && !TextUtils.isEmpty(connStatStr)) {
797 connector = "+";
798 }
799
800 return regStr + connector + connStatStr;
801 }
802
Nathan Haroldcea413a2015-11-23 15:48:10 -0800803 private final String buildCdmaInfoString(CellInfoCdma ci) {
804 CellIdentityCdma cidCdma = ci.getCellIdentity();
805 CellSignalStrengthCdma ssCdma = ci.getCellSignalStrength();
806
807 return String.format("%-3.3s %-5.5s %-5.5s %-5.5s %-6.6s %-6.6s %-6.6s %-6.6s %-5.5s",
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700808 getConnectionStatusString(ci),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800809 getCellInfoDisplayString(cidCdma.getSystemId()),
810 getCellInfoDisplayString(cidCdma.getNetworkId()),
811 getCellInfoDisplayString(cidCdma.getBasestationId()),
812 getCellInfoDisplayString(ssCdma.getCdmaDbm()),
813 getCellInfoDisplayString(ssCdma.getCdmaEcio()),
814 getCellInfoDisplayString(ssCdma.getEvdoDbm()),
815 getCellInfoDisplayString(ssCdma.getEvdoEcio()),
816 getCellInfoDisplayString(ssCdma.getEvdoSnr()));
817 }
818
819 private final String buildGsmInfoString(CellInfoGsm ci) {
820 CellIdentityGsm cidGsm = ci.getCellIdentity();
821 CellSignalStrengthGsm ssGsm = ci.getCellSignalStrength();
822
Nathan Harold2b77d742016-03-19 13:22:10 -0700823 return String.format("%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-4.4s %-4.4s\n",
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700824 getConnectionStatusString(ci),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800825 getCellInfoDisplayString(cidGsm.getMcc()),
826 getCellInfoDisplayString(cidGsm.getMnc()),
827 getCellInfoDisplayString(cidGsm.getLac()),
828 getCellInfoDisplayString(cidGsm.getCid()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700829 getCellInfoDisplayString(cidGsm.getArfcn()),
830 getCellInfoDisplayString(cidGsm.getBsic()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800831 getCellInfoDisplayString(ssGsm.getDbm()));
832 }
833
834 private final String buildLteInfoString(CellInfoLte ci) {
835 CellIdentityLte cidLte = ci.getCellIdentity();
836 CellSignalStrengthLte ssLte = ci.getCellSignalStrength();
837
838 return String.format(
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700839 "%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-3.3s %-6.6s %-2.2s %-4.4s %-4.4s %-2.2s\n",
840 getConnectionStatusString(ci),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800841 getCellInfoDisplayString(cidLte.getMcc()),
842 getCellInfoDisplayString(cidLte.getMnc()),
843 getCellInfoDisplayString(cidLte.getTac()),
844 getCellInfoDisplayString(cidLte.getCi()),
845 getCellInfoDisplayString(cidLte.getPci()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700846 getCellInfoDisplayString(cidLte.getEarfcn()),
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700847 getCellInfoDisplayString(cidLte.getBandwidth()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800848 getCellInfoDisplayString(ssLte.getDbm()),
849 getCellInfoDisplayString(ssLte.getRsrq()),
850 getCellInfoDisplayString(ssLte.getTimingAdvance()));
851 }
852
853 private final String buildWcdmaInfoString(CellInfoWcdma ci) {
854 CellIdentityWcdma cidWcdma = ci.getCellIdentity();
855 CellSignalStrengthWcdma ssWcdma = ci.getCellSignalStrength();
856
Nathan Harold2b77d742016-03-19 13:22:10 -0700857 return String.format("%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-3.3s %-4.4s\n",
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700858 getConnectionStatusString(ci),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800859 getCellInfoDisplayString(cidWcdma.getMcc()),
860 getCellInfoDisplayString(cidWcdma.getMnc()),
861 getCellInfoDisplayString(cidWcdma.getLac()),
862 getCellInfoDisplayString(cidWcdma.getCid()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700863 getCellInfoDisplayString(cidWcdma.getUarfcn()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800864 getCellInfoDisplayString(cidWcdma.getPsc()),
865 getCellInfoDisplayString(ssWcdma.getDbm()));
866 }
867
868 private final String buildCellInfoString(List<CellInfo> arrayCi) {
869 String value = new String();
870 StringBuilder cdmaCells = new StringBuilder(),
871 gsmCells = new StringBuilder(),
872 lteCells = new StringBuilder(),
873 wcdmaCells = new StringBuilder();
874
875 if (arrayCi != null) {
876 for (CellInfo ci : arrayCi) {
877
878 if (ci instanceof CellInfoLte) {
879 lteCells.append(buildLteInfoString((CellInfoLte) ci));
880 } else if (ci instanceof CellInfoWcdma) {
881 wcdmaCells.append(buildWcdmaInfoString((CellInfoWcdma) ci));
882 } else if (ci instanceof CellInfoGsm) {
883 gsmCells.append(buildGsmInfoString((CellInfoGsm) ci));
884 } else if (ci instanceof CellInfoCdma) {
885 cdmaCells.append(buildCdmaInfoString((CellInfoCdma) ci));
Wink Saville79bff2a2012-06-01 14:37:21 -0700886 }
887 }
Nathan Haroldcea413a2015-11-23 15:48:10 -0800888 if (lteCells.length() != 0) {
889 value += String.format(
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700890 "LTE\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-3.3s"
891 + " %-6.6s %-2.2s %-4.4s %-4.4s %-2.2s\n",
892 "SRV", "MCC", "MNC", "TAC", "CID", "PCI",
893 "EARFCN", "BW", "RSRP", "RSRQ", "TA");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800894 value += lteCells.toString();
895 }
896 if (wcdmaCells.length() != 0) {
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700897 value += String.format(
898 "WCDMA\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-3.3s %-4.4s\n",
Nathan Harold2b77d742016-03-19 13:22:10 -0700899 "SRV", "MCC", "MNC", "LAC", "CID", "UARFCN", "PSC", "RSCP");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800900 value += wcdmaCells.toString();
901 }
902 if (gsmCells.length() != 0) {
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700903 value += String.format(
904 "GSM\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-4.4s %-4.4s\n",
Nathan Harold2b77d742016-03-19 13:22:10 -0700905 "SRV", "MCC", "MNC", "LAC", "CID", "ARFCN", "BSIC", "RSSI");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800906 value += gsmCells.toString();
907 }
908 if (cdmaCells.length() != 0) {
909 value += String.format(
910 "CDMA/EVDO\n%-3.3s %-5.5s %-5.5s %-5.5s %-6.6s %-6.6s %-6.6s %-6.6s %-5.5s\n",
911 "SRV", "SID", "NID", "BSID", "C-RSSI", "C-ECIO", "E-RSSI", "E-ECIO", "E-SNR");
912 value += cdmaCells.toString();
913 }
914 } else {
915 value ="unknown";
Wink Saville79bff2a2012-06-01 14:37:21 -0700916 }
Nathan Haroldcea413a2015-11-23 15:48:10 -0800917
918 return value.toString();
919 }
920
921 private final void updateCellInfo(List<CellInfo> arrayCi) {
922 mCellInfo.setText(buildCellInfoString(arrayCi));
Wink Saville79bff2a2012-06-01 14:37:21 -0700923 }
924
Jordan Liub69e8f22019-04-02 12:13:31 -0700925 private final void updateSubscriptionIds() {
926 mSubscriptionId.setText(Integer.toString(phone.getSubId()));
927 mDds.setText(Integer.toString(SubscriptionManager.getDefaultDataSubscriptionId()));
928 }
929
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800930 private final void
931 updateMessageWaiting() {
932 mMwi.setText(String.valueOf(mMwiValue));
933 }
934
935 private final void
936 updateCallRedirect() {
937 mCfi.setText(String.valueOf(mCfiValue));
938 }
939
940
941 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700942 updateServiceState(ServiceState serviceState) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800943 int state = serviceState.getState();
944 Resources r = getResources();
945 String display = r.getString(R.string.radioInfo_unknown);
johnwang342101a2009-09-23 16:22:34 -0700946
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800947 switch (state) {
948 case ServiceState.STATE_IN_SERVICE:
949 display = r.getString(R.string.radioInfo_service_in);
950 break;
951 case ServiceState.STATE_OUT_OF_SERVICE:
952 case ServiceState.STATE_EMERGENCY_ONLY:
953 display = r.getString(R.string.radioInfo_service_emergency);
954 break;
955 case ServiceState.STATE_POWER_OFF:
956 display = r.getString(R.string.radioInfo_service_off);
957 break;
958 }
johnwang342101a2009-09-23 16:22:34 -0700959
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800960 gsmState.setText(display);
johnwang342101a2009-09-23 16:22:34 -0700961
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800962 if (serviceState.getRoaming()) {
963 roamingState.setText(R.string.radioInfo_roaming_in);
964 } else {
965 roamingState.setText(R.string.radioInfo_roaming_not);
966 }
967
968 operatorName.setText(serviceState.getOperatorAlphaLong());
969 }
970
971 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700972 updatePhoneState(int state) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800973 Resources r = getResources();
974 String display = r.getString(R.string.radioInfo_unknown);
975
976 switch (state) {
Nathan Harold2b77d742016-03-19 13:22:10 -0700977 case TelephonyManager.CALL_STATE_IDLE:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800978 display = r.getString(R.string.radioInfo_phone_idle);
979 break;
Nathan Harold2b77d742016-03-19 13:22:10 -0700980 case TelephonyManager.CALL_STATE_RINGING:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800981 display = r.getString(R.string.radioInfo_phone_ringing);
982 break;
Nathan Harold2b77d742016-03-19 13:22:10 -0700983 case TelephonyManager.CALL_STATE_OFFHOOK:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800984 display = r.getString(R.string.radioInfo_phone_offhook);
985 break;
986 }
987
988 callState.setText(display);
989 }
990
991 private final void
992 updateDataState() {
993 int state = mTelephonyManager.getDataState();
994 Resources r = getResources();
995 String display = r.getString(R.string.radioInfo_unknown);
996
997 switch (state) {
998 case TelephonyManager.DATA_CONNECTED:
999 display = r.getString(R.string.radioInfo_data_connected);
1000 break;
1001 case TelephonyManager.DATA_CONNECTING:
1002 display = r.getString(R.string.radioInfo_data_connecting);
1003 break;
1004 case TelephonyManager.DATA_DISCONNECTED:
1005 display = r.getString(R.string.radioInfo_data_disconnected);
1006 break;
1007 case TelephonyManager.DATA_SUSPENDED:
1008 display = r.getString(R.string.radioInfo_data_suspended);
1009 break;
1010 }
johnwang342101a2009-09-23 16:22:34 -07001011
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001012 gprsState.setText(display);
1013 }
1014
1015 private final void updateNetworkType() {
Nathan Harolde272c202016-10-27 13:45:00 -07001016 if(phone != null) {
Nathan Harold2b77d742016-03-19 13:22:10 -07001017 ServiceState ss = phone.getServiceState();
1018 dataNetwork.setText(ServiceState.rilRadioTechnologyToString(
1019 phone.getServiceState().getRilDataRadioTechnology()));
1020 voiceNetwork.setText(ServiceState.rilRadioTechnologyToString(
1021 phone.getServiceState().getRilVoiceRadioTechnology()));
1022 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001023 }
1024
1025 private final void
1026 updateProperties() {
1027 String s;
1028 Resources r = getResources();
1029
1030 s = phone.getDeviceId();
johnwang342101a2009-09-23 16:22:34 -07001031 if (s == null) s = r.getString(R.string.radioInfo_unknown);
Wink Savillec3886682009-04-02 11:00:56 -07001032 mDeviceId.setText(s);
johnwang342101a2009-09-23 16:22:34 -07001033
Meng Wang9053f172017-06-23 16:02:14 -07001034 s = phone.getSubscriberId();
1035 if (s == null) s = r.getString(R.string.radioInfo_unknown);
1036 mSubscriberId.setText(s);
1037
Nathan Haroldcea413a2015-11-23 15:48:10 -08001038 //FIXME: Replace with a TelephonyManager call
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001039 s = phone.getLine1Number();
johnwang342101a2009-09-23 16:22:34 -07001040 if (s == null) s = r.getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001041 number.setText(s);
1042 }
1043
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001044 private final void updateDataStats2() {
1045 Resources r = getResources();
1046
Jeff Sharkey93029862011-05-27 18:26:15 -07001047 long txPackets = TrafficStats.getMobileTxPackets();
1048 long rxPackets = TrafficStats.getMobileRxPackets();
1049 long txBytes = TrafficStats.getMobileTxBytes();
1050 long rxBytes = TrafficStats.getMobileRxBytes();
johnwang342101a2009-09-23 16:22:34 -07001051
Jeff Sharkey93029862011-05-27 18:26:15 -07001052 String packets = r.getString(R.string.radioInfo_display_packets);
1053 String bytes = r.getString(R.string.radioInfo_display_bytes);
johnwang342101a2009-09-23 16:22:34 -07001054
Jeff Sharkey93029862011-05-27 18:26:15 -07001055 sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
1056 received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001057 }
1058
1059 /**
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001060 * Ping a host name
1061 */
1062 private final void pingHostname() {
1063 try {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001064 try {
1065 Process p4 = Runtime.getRuntime().exec("ping -c 1 www.google.com");
1066 int status4 = p4.waitFor();
1067 if (status4 == 0) {
1068 mPingHostnameResultV4 = "Pass";
1069 } else {
1070 mPingHostnameResultV4 = String.format("Fail(%d)", status4);
1071 }
1072 } catch (IOException e) {
1073 mPingHostnameResultV4 = "Fail: IOException";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001074 }
Nathan Haroldcea413a2015-11-23 15:48:10 -08001075 try {
1076 Process p6 = Runtime.getRuntime().exec("ping6 -c 1 www.google.com");
1077 int status6 = p6.waitFor();
1078 if (status6 == 0) {
1079 mPingHostnameResultV6 = "Pass";
1080 } else {
1081 mPingHostnameResultV6 = String.format("Fail(%d)", status6);
1082 }
1083 } catch (IOException e) {
1084 mPingHostnameResultV6 = "Fail: IOException";
1085 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001086 } catch (InterruptedException e) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001087 mPingHostnameResultV4 = mPingHostnameResultV6 = "Fail: InterruptedException";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001088 }
1089 }
1090
1091 /**
1092 * This function checks for basic functionality of HTTP Client.
1093 */
1094 private void httpClientTest() {
Narayan Kamathf25627c2014-12-12 13:53:28 +00001095 HttpURLConnection urlConnection = null;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001096 try {
Narayan Kamathf25627c2014-12-12 13:53:28 +00001097 // TODO: Hardcoded for now, make it UI configurable
Alex Klyubinb0090232015-04-02 11:08:51 -07001098 URL url = new URL("https://www.google.com");
Narayan Kamathf25627c2014-12-12 13:53:28 +00001099 urlConnection = (HttpURLConnection) url.openConnection();
1100 if (urlConnection.getResponseCode() == 200) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001101 mHttpClientTestResult = "Pass";
1102 } else {
Narayan Kamathf25627c2014-12-12 13:53:28 +00001103 mHttpClientTestResult = "Fail: Code: " + urlConnection.getResponseMessage();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001104 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001105 } catch (IOException e) {
1106 mHttpClientTestResult = "Fail: IOException";
Narayan Kamathf25627c2014-12-12 13:53:28 +00001107 } finally {
1108 if (urlConnection != null) {
1109 urlConnection.disconnect();
1110 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001111 }
1112 }
1113
1114 private void refreshSmsc() {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001115 //FIXME: Replace with a TelephonyManager call
jsh21dd4072009-05-12 11:26:55 -07001116 phone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001117 }
1118
Nathan Haroldcea413a2015-11-23 15:48:10 -08001119 private final void updateAllCellInfo() {
1120
1121 mCellInfo.setText("");
Nathan Haroldcea413a2015-11-23 15:48:10 -08001122 mLocation.setText("");
1123
1124 final Runnable updateAllCellInfoResults = new Runnable() {
1125 public void run() {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001126 updateLocation(mCellLocationResult);
1127 updateCellInfo(mCellInfoResult);
1128 }
1129 };
1130
1131 Thread locThread = new Thread() {
1132 @Override
1133 public void run() {
1134 mCellInfoResult = mTelephonyManager.getAllCellInfo();
1135 mCellLocationResult = mTelephonyManager.getCellLocation();
Nathan Haroldcea413a2015-11-23 15:48:10 -08001136
1137 mHandler.post(updateAllCellInfoResults);
1138 }
1139 };
1140 locThread.start();
1141 }
1142
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001143 private final void updatePingState() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001144 // Set all to unknown since the threads will take a few secs to update.
Nathan Haroldcea413a2015-11-23 15:48:10 -08001145 mPingHostnameResultV4 = getResources().getString(R.string.radioInfo_unknown);
1146 mPingHostnameResultV6 = getResources().getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001147 mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
1148
Nathan Haroldcea413a2015-11-23 15:48:10 -08001149 mPingHostnameV4.setText(mPingHostnameResultV4);
1150 mPingHostnameV6.setText(mPingHostnameResultV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001151 mHttpClientTest.setText(mHttpClientTestResult);
1152
1153 final Runnable updatePingResults = new Runnable() {
1154 public void run() {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001155 mPingHostnameV4.setText(mPingHostnameResultV4);
1156 mPingHostnameV6.setText(mPingHostnameResultV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001157 mHttpClientTest.setText(mHttpClientTestResult);
1158 }
1159 };
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001160
1161 Thread hostname = new Thread() {
1162 @Override
1163 public void run() {
1164 pingHostname();
Nathan Haroldcea413a2015-11-23 15:48:10 -08001165 mHandler.post(updatePingResults);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001166 }
1167 };
1168 hostname.start();
1169
1170 Thread httpClient = new Thread() {
1171 @Override
1172 public void run() {
1173 httpClientTest();
Nathan Haroldcea413a2015-11-23 15:48:10 -08001174 mHandler.post(updatePingResults);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001175 }
1176 };
1177 httpClient.start();
1178 }
1179
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001180 private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
1181 public boolean onMenuItemClick(MenuItem item) {
1182 Intent intent = new Intent(Intent.ACTION_VIEW);
1183 // XXX We need to specify the component here because if we don't
1184 // the activity manager will try to resolve the type by calling
1185 // the content provider, which causes it to be loaded in a process
1186 // other than the Dialer process, which causes a lot of stuff to
1187 // break.
1188 intent.setClassName("com.android.phone",
1189 "com.android.phone.SimContacts");
1190 startActivity(intent);
1191 return true;
1192 }
1193 };
1194
1195 private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
1196 public boolean onMenuItemClick(MenuItem item) {
1197 Intent intent = new Intent(Intent.ACTION_VIEW);
1198 // XXX We need to specify the component here because if we don't
1199 // the activity manager will try to resolve the type by calling
1200 // the content provider, which causes it to be loaded in a process
1201 // other than the Dialer process, which causes a lot of stuff to
1202 // break.
1203 intent.setClassName("com.android.phone",
Andrew Leeda90d682014-10-31 13:12:20 -07001204 "com.android.phone.settings.fdn.FdnList");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001205 startActivity(intent);
1206 return true;
1207 }
1208 };
1209
1210 private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
1211 public boolean onMenuItemClick(MenuItem item) {
1212 Intent intent = new Intent(
Wink Savillec3886682009-04-02 11:00:56 -07001213 Intent.ACTION_VIEW, Uri.parse("content://icc/sdn"));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001214 // XXX We need to specify the component here because if we don't
1215 // the activity manager will try to resolve the type by calling
1216 // the content provider, which causes it to be loaded in a process
1217 // other than the Dialer process, which causes a lot of stuff to
1218 // break.
1219 intent.setClassName("com.android.phone",
1220 "com.android.phone.ADNList");
1221 startActivity(intent);
1222 return true;
1223 }
1224 };
1225
Nathan Harolde272c202016-10-27 13:45:00 -07001226 private MenuItem.OnMenuItemClickListener mGetImsStatus = new MenuItem.OnMenuItemClickListener() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001227 public boolean onMenuItemClick(MenuItem item) {
Nathan Harolde272c202016-10-27 13:45:00 -07001228 boolean isImsRegistered = phone.isImsRegistered();
1229 boolean availableVolte = phone.isVolteEnabled();
1230 boolean availableWfc = phone.isWifiCallingEnabled();
1231 boolean availableVt = phone.isVideoEnabled();
1232 boolean availableUt = phone.isUtEnabled();
1233
1234 final String imsRegString = isImsRegistered ?
1235 getString(R.string.radio_info_ims_reg_status_registered) :
1236 getString(R.string.radio_info_ims_reg_status_not_registered);
1237
1238 final String available = getString(R.string.radio_info_ims_feature_status_available);
1239 final String unavailable = getString(
1240 R.string.radio_info_ims_feature_status_unavailable);
1241
1242 String imsStatus = getString(R.string.radio_info_ims_reg_status,
1243 imsRegString,
1244 availableVolte ? available : unavailable,
1245 availableWfc ? available : unavailable,
1246 availableVt ? available : unavailable,
1247 availableUt ? available : unavailable);
1248
1249 AlertDialog imsDialog = new AlertDialog.Builder(RadioInfo.this)
1250 .setMessage(imsStatus)
1251 .setTitle(getString(R.string.radio_info_ims_reg_status_title))
1252 .create();
1253
1254 imsDialog.show();
1255
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001256 return true;
1257 }
1258 };
1259
1260 private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
1261 public boolean onMenuItemClick(MenuItem item) {
1262 Intent intent = new Intent();
1263 intent.setClass(RadioInfo.this, BandMode.class);
1264 startActivity(intent);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001265 return true;
1266 }
1267 };
johnwang342101a2009-09-23 16:22:34 -07001268
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001269 private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
1270 public boolean onMenuItemClick(MenuItem item) {
1271 int state = mTelephonyManager.getDataState();
1272 switch (state) {
1273 case TelephonyManager.DATA_CONNECTED:
Jack Yue5accf72018-12-13 11:51:20 -08001274 mTelephonyManager.setDataEnabled(false);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001275 break;
1276 case TelephonyManager.DATA_DISCONNECTED:
Jack Yue5accf72018-12-13 11:51:20 -08001277 mTelephonyManager.setDataEnabled(true);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001278 break;
1279 default:
1280 // do nothing
1281 break;
1282 }
1283 return true;
1284 }
1285 };
1286
Nathan Harold2b77d742016-03-19 13:22:10 -07001287 private boolean isRadioOn() {
1288 //FIXME: Replace with a TelephonyManager call
1289 return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
1290 }
1291
1292 private void updateRadioPowerState() {
1293 //delightful hack to prevent on-checked-changed calls from
1294 //actually forcing the radio preference to its transient/current value.
1295 radioPowerOnSwitch.setOnCheckedChangeListener(null);
1296 radioPowerOnSwitch.setChecked(isRadioOn());
1297 radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
1298 }
1299
Nathan Harolde272c202016-10-27 13:45:00 -07001300 void setImsVolteProvisionedState(boolean state) {
Nathan Harold12e1f552016-06-17 13:55:38 -07001301 Log.d(TAG, "setImsVolteProvisioned state: " + ((state)? "on":"off"));
Nathan Harolde272c202016-10-27 13:45:00 -07001302 setImsConfigProvisionedState(IMS_VOLTE_PROVISIONED_CONFIG_ID, state);
Nathan Harold12e1f552016-06-17 13:55:38 -07001303 }
1304
Nathan Harolde272c202016-10-27 13:45:00 -07001305 void setImsVtProvisionedState(boolean state) {
Nathan Harold12e1f552016-06-17 13:55:38 -07001306 Log.d(TAG, "setImsVtProvisioned() state: " + ((state)? "on":"off"));
Nathan Harolde272c202016-10-27 13:45:00 -07001307 setImsConfigProvisionedState(IMS_VT_PROVISIONED_CONFIG_ID, state);
Nathan Harold12e1f552016-06-17 13:55:38 -07001308 }
1309
Nathan Harolde272c202016-10-27 13:45:00 -07001310 void setImsWfcProvisionedState(boolean state) {
Nathan Harold12e1f552016-06-17 13:55:38 -07001311 Log.d(TAG, "setImsWfcProvisioned() state: " + ((state)? "on":"off"));
Nathan Harolde272c202016-10-27 13:45:00 -07001312 setImsConfigProvisionedState(IMS_WFC_PROVISIONED_CONFIG_ID, state);
Nathan Harold12e1f552016-06-17 13:55:38 -07001313 }
1314
Meng Wang586741c2017-04-26 15:02:51 -07001315 void setEabProvisionedState(boolean state) {
1316 Log.d(TAG, "setEabProvisioned() state: " + ((state)? "on":"off"));
1317 setImsConfigProvisionedState(EAB_PROVISIONED_CONFIG_ID, state);
1318 }
1319
Nathan Harolde272c202016-10-27 13:45:00 -07001320 void setImsConfigProvisionedState(int configItem, boolean state) {
Nathan Harold12e1f552016-06-17 13:55:38 -07001321 if (phone != null && mImsManager != null) {
Philip P. Moltmann5c449ae2017-02-14 12:43:02 -08001322 QueuedWork.queue(new Runnable() {
Nathan Harold12e1f552016-06-17 13:55:38 -07001323 public void run() {
1324 try {
1325 mImsManager.getConfigInterface().setProvisionedValue(
1326 configItem,
1327 state? 1 : 0);
1328 } catch (ImsException e) {
1329 Log.e(TAG, "setImsConfigProvisioned() exception:", e);
1330 }
1331 }
Philip P. Moltmann5c449ae2017-02-14 12:43:02 -08001332 }, false);
Nathan Harold12e1f552016-06-17 13:55:38 -07001333 }
1334 }
1335
Nathan Harold2b77d742016-03-19 13:22:10 -07001336 OnCheckedChangeListener mRadioPowerOnChangeListener = new OnCheckedChangeListener() {
1337 @Override
1338 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1339 log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
1340 phone.setRadioPower(isChecked);
1341 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001342 };
1343
Nathan Harold12e1f552016-06-17 13:55:38 -07001344 private boolean isImsVolteProvisioned() {
Nathan Harold2b77d742016-03-19 13:22:10 -07001345 if (phone != null && mImsManager != null) {
1346 return mImsManager.isVolteEnabledByPlatform(phone.getContext())
1347 && mImsManager.isVolteProvisionedOnDevice(phone.getContext());
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -08001348 }
1349 return false;
1350 }
1351
Nathan Harold12e1f552016-06-17 13:55:38 -07001352 OnCheckedChangeListener mImsVolteCheckedChangeListener = new OnCheckedChangeListener() {
Wink Saville426fc662011-09-25 14:39:02 -07001353 @Override
Nathan Harold2b77d742016-03-19 13:22:10 -07001354 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Nathan Harold12e1f552016-06-17 13:55:38 -07001355 setImsVolteProvisionedState(isChecked);
Nathan Harolde272c202016-10-27 13:45:00 -07001356 }
Wink Saville426fc662011-09-25 14:39:02 -07001357 };
1358
Nathan Harold12e1f552016-06-17 13:55:38 -07001359 private boolean isImsVtProvisioned() {
1360 if (phone != null && mImsManager != null) {
1361 return mImsManager.isVtEnabledByPlatform(phone.getContext())
1362 && mImsManager.isVtProvisionedOnDevice(phone.getContext());
1363 }
1364 return false;
1365 }
1366
1367 OnCheckedChangeListener mImsVtCheckedChangeListener = new OnCheckedChangeListener() {
1368 @Override
1369 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1370 setImsVtProvisionedState(isChecked);
Nathan Harolde272c202016-10-27 13:45:00 -07001371 }
Nathan Harold12e1f552016-06-17 13:55:38 -07001372 };
1373
1374 private boolean isImsWfcProvisioned() {
1375 if (phone != null && mImsManager != null) {
1376 return mImsManager.isWfcEnabledByPlatform(phone.getContext())
1377 && mImsManager.isWfcProvisionedOnDevice(phone.getContext());
1378 }
1379 return false;
1380 }
1381
1382 OnCheckedChangeListener mImsWfcCheckedChangeListener = new OnCheckedChangeListener() {
1383 @Override
1384 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1385 setImsWfcProvisionedState(isChecked);
Nathan Harolde272c202016-10-27 13:45:00 -07001386 }
Nathan Harold12e1f552016-06-17 13:55:38 -07001387 };
1388
Meng Wang586741c2017-04-26 15:02:51 -07001389 private boolean isEabProvisioned() {
1390 return isFeatureProvisioned(EAB_PROVISIONED_CONFIG_ID, false);
1391 }
1392
1393 OnCheckedChangeListener mEabCheckedChangeListener = new OnCheckedChangeListener() {
1394 @Override
1395 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1396 setEabProvisionedState(isChecked);
1397 }
1398 };
1399
1400 private boolean isFeatureProvisioned(int featureId, boolean defaultValue) {
1401 boolean provisioned = defaultValue;
1402 if (mImsManager != null) {
1403 try {
1404 ImsConfig imsConfig = mImsManager.getConfigInterface();
1405 if (imsConfig != null) {
1406 provisioned =
1407 (imsConfig.getProvisionedValue(featureId)
1408 == ImsConfig.FeatureValueConstants.ON);
1409 }
1410 } catch (ImsException ex) {
1411 Log.e(TAG, "isFeatureProvisioned() exception:", ex);
1412 }
1413 }
1414
1415 log("isFeatureProvisioned() featureId=" + featureId + " provisioned=" + provisioned);
1416 return provisioned;
1417 }
1418
1419 private static boolean isEabEnabledByPlatform(Context context) {
1420 if (context != null) {
1421 CarrierConfigManager configManager = (CarrierConfigManager)
1422 context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
1423 if (configManager != null && configManager.getConfig().getBoolean(
1424 CarrierConfigManager.KEY_USE_RCS_PRESENCE_BOOL)) {
1425 return true;
1426 }
1427 }
1428 return false;
1429 }
1430
Nathan Harold12e1f552016-06-17 13:55:38 -07001431 private void updateImsProvisionedState() {
Brad Ebinger8bff9c32019-03-11 17:33:53 -07001432 if (!ImsManager.isImsSupportedOnDevice(phone.getContext())) {
1433 return;
1434 }
Nathan Harold12e1f552016-06-17 13:55:38 -07001435 log("updateImsProvisionedState isImsVolteProvisioned()=" + isImsVolteProvisioned());
Nathan Harold2b77d742016-03-19 13:22:10 -07001436 //delightful hack to prevent on-checked-changed calls from
1437 //actually forcing the ims provisioning to its transient/current value.
Nathan Harold12e1f552016-06-17 13:55:38 -07001438 imsVolteProvisionedSwitch.setOnCheckedChangeListener(null);
1439 imsVolteProvisionedSwitch.setChecked(isImsVolteProvisioned());
1440 imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
Sreekanth Badidac888e192018-02-05 17:18:40 +01001441 imsVolteProvisionedSwitch.setEnabled(!Build.IS_USER
1442 && mImsManager.isVolteEnabledByPlatform(phone.getContext()));
Nathan Harold12e1f552016-06-17 13:55:38 -07001443
1444 imsVtProvisionedSwitch.setOnCheckedChangeListener(null);
1445 imsVtProvisionedSwitch.setChecked(isImsVtProvisioned());
1446 imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
Sreekanth Badidac888e192018-02-05 17:18:40 +01001447 imsVtProvisionedSwitch.setEnabled(!Build.IS_USER
1448 && mImsManager.isVtEnabledByPlatform(phone.getContext()));
Nathan Harold12e1f552016-06-17 13:55:38 -07001449
1450 imsWfcProvisionedSwitch.setOnCheckedChangeListener(null);
1451 imsWfcProvisionedSwitch.setChecked(isImsWfcProvisioned());
1452 imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
Sreekanth Badidac888e192018-02-05 17:18:40 +01001453 imsWfcProvisionedSwitch.setEnabled(!Build.IS_USER
1454 && mImsManager.isWfcEnabledByPlatform(phone.getContext()));
Meng Wang586741c2017-04-26 15:02:51 -07001455
1456 eabProvisionedSwitch.setOnCheckedChangeListener(null);
1457 eabProvisionedSwitch.setChecked(isEabProvisioned());
1458 eabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
Sreekanth Badidac888e192018-02-05 17:18:40 +01001459 eabProvisionedSwitch.setEnabled(!Build.IS_USER
1460 && isEabEnabledByPlatform(phone.getContext()));
Wink Saville426fc662011-09-25 14:39:02 -07001461 }
1462
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001463 OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
1464 public void onClick(View v) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001465 //FIXME: Replace with a TelephonyManager call
Wink Savillec3886682009-04-02 11:00:56 -07001466 phone.disableDnsCheck(!phone.isDnsCheckDisabled());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001467 updateDnsCheckState();
1468 }
1469 };
johnwang342101a2009-09-23 16:22:34 -07001470
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001471 OnClickListener mOemInfoButtonHandler = new OnClickListener() {
1472 public void onClick(View v) {
1473 Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
1474 try {
1475 startActivity(intent);
1476 } catch (android.content.ActivityNotFoundException ex) {
Wink Savillebf471282013-04-05 15:04:05 -07001477 log("OEM-specific Info/Settings Activity Not Found : " + ex);
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001478 // If the activity does not exist, there are no OEM
1479 // settings, and so we can just do nothing...
1480 }
1481 }
1482 };
1483
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001484 OnClickListener mPingButtonHandler = new OnClickListener() {
1485 public void onClick(View v) {
1486 updatePingState();
1487 }
1488 };
1489
1490 OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
1491 public void onClick(View v) {
1492 updateSmscButton.setEnabled(false);
jsh21dd4072009-05-12 11:26:55 -07001493 phone.setSmscAddress(smsc.getText().toString(),
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001494 mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
1495 }
1496 };
1497
1498 OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
1499 public void onClick(View v) {
1500 refreshSmsc();
1501 }
1502 };
1503
Youhan Wangfd781e92016-12-16 15:53:16 -08001504 OnClickListener mCarrierProvisioningButtonHandler = new OnClickListener() {
1505 public void onClick(View v) {
Meng Wanga04449b2017-08-03 14:34:35 -07001506 final Intent intent = new Intent("com.android.settings.CARRIER_PROVISIONING");
1507 final ComponentName serviceComponent = ComponentName.unflattenFromString(
1508 "com.android.omadm.service/.DMIntentReceiver");
Youhan Wangfd781e92016-12-16 15:53:16 -08001509 intent.setComponent(serviceComponent);
Meng Wanga04449b2017-08-03 14:34:35 -07001510 sendBroadcast(intent);
Youhan Wangfd781e92016-12-16 15:53:16 -08001511 }
1512 };
1513
1514 OnClickListener mTriggerCarrierProvisioningButtonHandler = new OnClickListener() {
1515 public void onClick(View v) {
Meng Wanga04449b2017-08-03 14:34:35 -07001516 final Intent intent = new Intent("com.android.settings.TRIGGER_CARRIER_PROVISIONING");
1517 final ComponentName serviceComponent = ComponentName.unflattenFromString(
1518 "com.android.omadm.service/.DMIntentReceiver");
Youhan Wangfd781e92016-12-16 15:53:16 -08001519 intent.setComponent(serviceComponent);
Meng Wanga04449b2017-08-03 14:34:35 -07001520 sendBroadcast(intent);
Youhan Wangfd781e92016-12-16 15:53:16 -08001521 }
1522 };
1523
Nathan Haroldcea413a2015-11-23 15:48:10 -08001524 AdapterView.OnItemSelectedListener mPreferredNetworkHandler =
1525 new AdapterView.OnItemSelectedListener() {
1526
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001527 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001528 if (mPreferredNetworkTypeResult != pos && pos >= 0
1529 && pos <= mPreferredNetworkLabels.length - 2) {
1530 mPreferredNetworkTypeResult = pos;
Nathan Harolddaea8be2018-06-05 14:02:35 -07001531
1532 // TODO: Possibly migrate this to TelephonyManager.setPreferredNetworkType()
1533 // which today still has some issues (mostly that the "set" is conditional
1534 // on a successful modem call, which is not what we want). Instead we always
1535 // want this setting to be set, so that if the radio hiccups and this setting
1536 // is for some reason unsuccessful, future calls to the radio will reflect
1537 // the users's preference which is set here.
1538 final int subId = phone.getSubId();
1539 if (SubscriptionManager.isUsableSubIdValue(subId)) {
1540 Settings.Global.putInt(phone.getContext().getContentResolver(),
1541 PREFERRED_NETWORK_MODE + subId, mPreferredNetworkTypeResult);
1542 }
1543 log("Calling setPreferredNetworkType(" + mPreferredNetworkTypeResult + ")");
Nathan Haroldcea413a2015-11-23 15:48:10 -08001544 Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
1545 phone.setPreferredNetworkType(mPreferredNetworkTypeResult, msg);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001546 }
1547 }
1548
1549 public void onNothingSelected(AdapterView parent) {
1550 }
1551 };
1552
Jordan Liub69e8f22019-04-02 12:13:31 -07001553 AdapterView.OnItemSelectedListener mSelectPhoneIndexHandler =
1554 new AdapterView.OnItemSelectedListener() {
1555
1556 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1557 if (pos >= 0 && pos <= mPhoneIndexLabels.length - 1) {
1558 // the array position is equal to the phone index
1559 int phoneIndex = pos;
1560 Phone[] phones = PhoneFactory.getPhones();
1561 if (phones == null || phones.length <= phoneIndex) {
1562 log("phoneIndex " + phoneIndex + " is invalid");
1563 return;
1564 }
1565 log("switching to phone " + phoneIndex);
1566 // getSubId says it takes a slotIndex, but it actually takes a phone index
1567 int[] subIds = SubscriptionManager.getSubId(phoneIndex);
1568 if (subIds == null || subIds.length < 1) {
1569 log("no subscription found for phoneIndex " + phoneIndex);
1570 return;
1571 }
1572 mSelectedPhoneIndex = phoneIndex;
1573
1574 updatePhoneIndex(phoneIndex, subIds[0]);
1575 }
1576 }
1577
1578 public void onNothingSelected(AdapterView parent) {
1579 }
1580 };
1581
Nathan Harold2b77d742016-03-19 13:22:10 -07001582 AdapterView.OnItemSelectedListener mCellInfoRefreshRateHandler =
1583 new AdapterView.OnItemSelectedListener() {
Wink Savillebf471282013-04-05 15:04:05 -07001584
Nathan Harold2b77d742016-03-19 13:22:10 -07001585 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1586 mCellInfoRefreshRateIndex = pos;
Sooraj Sasindran5cce06b2016-08-18 15:49:49 -07001587 mTelephonyManager.setCellInfoListRate(mCellInfoRefreshRates[pos]);
Nathan Harold2b77d742016-03-19 13:22:10 -07001588 updateAllCellInfo();
1589 }
1590
1591 public void onNothingSelected(AdapterView parent) {
1592 }
1593 };
1594
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001595}