blob: 099b55d732bb1e887af8b74ffd8eb73e93dec6ac [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;
Jordan Liue431f632019-04-05 14:39:41 -0700231 private Phone mPhone = 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
Jordan Liue431f632019-04-05 14:39:41 -0700259 // not final because we need to recreate this object to register on a new subId (b/117555407)
260 private PhoneStateListener mPhoneStateListener = new RadioInfoPhoneStateListener();
261 private class RadioInfoPhoneStateListener extends PhoneStateListener {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800262 @Override
263 public void onDataConnectionStateChanged(int state) {
264 updateDataState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800265 updateNetworkType();
266 }
267
268 @Override
269 public void onDataActivity(int direction) {
270 updateDataStats2();
271 }
272
273 @Override
Nathan Harold2b77d742016-03-19 13:22:10 -0700274 public void onCallStateChanged(int state, String incomingNumber) {
275 updateNetworkType();
276 updatePhoneState(state);
277 }
278
279 @Override
280 public void onPreciseCallStateChanged(PreciseCallState preciseState) {
281 updateNetworkType();
282 }
283
284 @Override
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800285 public void onCellLocationChanged(CellLocation location) {
286 updateLocation(location);
287 }
288
289 @Override
290 public void onMessageWaitingIndicatorChanged(boolean mwi) {
291 mMwiValue = mwi;
292 updateMessageWaiting();
293 }
294
295 @Override
296 public void onCallForwardingIndicatorChanged(boolean cfi) {
297 mCfiValue = cfi;
298 updateCallRedirect();
299 }
Wink Saville79bff2a2012-06-01 14:37:21 -0700300
301 @Override
302 public void onCellInfoChanged(List<CellInfo> arrayCi) {
Wink Savillebf471282013-04-05 15:04:05 -0700303 log("onCellInfoChanged: arrayCi=" + arrayCi);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800304 mCellInfoResult = arrayCi;
305 updateCellInfo(mCellInfoResult);
Wink Saville79bff2a2012-06-01 14:37:21 -0700306 }
Wink Saville4f0d8812014-04-15 22:05:24 -0700307
308 @Override
Nathan Harold2b77d742016-03-19 13:22:10 -0700309 public void onSignalStrengthsChanged(SignalStrength signalStrength) {
310 log("onSignalStrengthChanged: SignalStrength=" +signalStrength);
311 updateSignalStrength(signalStrength);
312 }
313
314 @Override
315 public void onServiceStateChanged(ServiceState serviceState) {
316 log("onServiceStateChanged: ServiceState=" + serviceState);
317 updateServiceState(serviceState);
318 updateRadioPowerState();
319 updateNetworkType();
Nathan Harold12e1f552016-06-17 13:55:38 -0700320 updateImsProvisionedState();
Nathan Harold2b77d742016-03-19 13:22:10 -0700321 }
Nathan Harold433ca442018-04-23 18:20:43 -0700322
323 @Override
324 public void onPhysicalChannelConfigurationChanged(
325 List<PhysicalChannelConfig> configs) {
326 updatePhysicalChannelConfiguration(configs);
327 }
328
Jordan Liue431f632019-04-05 14:39:41 -0700329 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800330
Nathan Harold433ca442018-04-23 18:20:43 -0700331 private void updatePhysicalChannelConfiguration(List<PhysicalChannelConfig> configs) {
332 StringBuilder sb = new StringBuilder();
333 String div = "";
334 sb.append("{");
335 if (configs != null) {
336 for(PhysicalChannelConfig c : configs) {
337 sb.append(div).append(c);
338 div = ",";
339 }
340 }
341 sb.append("}");
342 mPhyChanConfig.setText(sb.toString());
343 }
344
Nathan Haroldcea413a2015-11-23 15:48:10 -0800345 private void updatePreferredNetworkType(int type) {
346 if (type >= mPreferredNetworkLabels.length || type < 0) {
347 log("EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
348 "type=" + type);
349 type = mPreferredNetworkLabels.length - 1; //set to Unknown
350 }
351 mPreferredNetworkTypeResult = type;
352
353 preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
354 }
355
Jordan Liub69e8f22019-04-02 12:13:31 -0700356 private void updatePhoneIndex(int phoneIndex, int subId) {
357 // unregister listeners on the old subId
Jordan Liue431f632019-04-05 14:39:41 -0700358 unregisterPhoneStateListener();
Jordan Liub69e8f22019-04-02 12:13:31 -0700359 mTelephonyManager.setCellInfoListRate(CELL_INFO_LIST_RATE_DISABLED);
360
361 // update the subId
362 mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
Jordan Liub69e8f22019-04-02 12:13:31 -0700363
364 // update the phoneId
Jordan Liue431f632019-04-05 14:39:41 -0700365 mImsManager = ImsManager.getInstance(getApplicationContext(), phoneIndex);
366 mPhone = PhoneFactory.getPhone(phoneIndex);
Jordan Liub69e8f22019-04-02 12:13:31 -0700367
368 updateAllFields();
369 }
370
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800371 private Handler mHandler = new Handler() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800372 @Override
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800373 public void handleMessage(Message msg) {
374 AsyncResult ar;
375 switch (msg.what) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800376 case EVENT_QUERY_PREFERRED_TYPE_DONE:
377 ar= (AsyncResult) msg.obj;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800378 if (ar.exception == null && ar.result != null) {
379 updatePreferredNetworkType(((int[])ar.result)[0]);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800380 } else {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800381 //In case of an exception, we will set this to unknown
382 updatePreferredNetworkType(mPreferredNetworkLabels.length-1);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800383 }
384 break;
385 case EVENT_SET_PREFERRED_TYPE_DONE:
386 ar= (AsyncResult) msg.obj;
387 if (ar.exception != null) {
Nathan Harolded38afa2016-04-13 00:29:30 -0700388 log("Set preferred network type failed.");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800389 }
390 break;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800391 case EVENT_QUERY_SMSC_DONE:
392 ar= (AsyncResult) msg.obj;
393 if (ar.exception != null) {
394 smsc.setText("refresh error");
395 } else {
jsh21dd4072009-05-12 11:26:55 -0700396 smsc.setText((String)ar.result);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800397 }
398 break;
399 case EVENT_UPDATE_SMSC_DONE:
400 updateSmscButton.setEnabled(true);
401 ar= (AsyncResult) msg.obj;
402 if (ar.exception != null) {
403 smsc.setText("update error");
404 }
405 break;
406 default:
Nathan Haroldcea413a2015-11-23 15:48:10 -0800407 super.handleMessage(msg);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800408 break;
409
410 }
411 }
412 };
413
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800414 @Override
415 public void onCreate(Bundle icicle) {
416 super.onCreate(icicle);
fionaxub54cb2d2016-09-22 15:01:05 -0700417 if (!android.os.Process.myUserHandle().isSystem()) {
418 Log.e(TAG, "Not run from system user, don't do anything.");
419 finish();
420 return;
421 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800422
423 setContentView(R.layout.radio_info);
424
Nathan Haroldcea413a2015-11-23 15:48:10 -0800425 log("Started onCreate");
426
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800427 mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
Nathan Haroldf10ea322018-04-24 13:31:07 -0700428 mConnectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
Jordan Liue431f632019-04-05 14:39:41 -0700429 mPhone = PhoneFactory.getDefaultPhone();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800430
Nathan Haroldcea413a2015-11-23 15:48:10 -0800431 mImsManager = ImsManager.getInstance(getApplicationContext(),
432 SubscriptionManager.getDefaultVoicePhoneId());
433
Jordan Liub69e8f22019-04-02 12:13:31 -0700434 mPhoneIndexLabels = getPhoneIndexLabels(mTelephonyManager);
435
Meng Wang9053f172017-06-23 16:02:14 -0700436 mDeviceId = (TextView) findViewById(R.id.imei);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800437 number = (TextView) findViewById(R.id.number);
Jordan Liub69e8f22019-04-02 12:13:31 -0700438 mSubscriptionId = (TextView) findViewById(R.id.subid);
439 mDds = (TextView) findViewById(R.id.dds);
Meng Wang9053f172017-06-23 16:02:14 -0700440 mSubscriberId = (TextView) findViewById(R.id.imsi);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800441 callState = (TextView) findViewById(R.id.call);
442 operatorName = (TextView) findViewById(R.id.operator);
443 roamingState = (TextView) findViewById(R.id.roaming);
444 gsmState = (TextView) findViewById(R.id.gsm);
445 gprsState = (TextView) findViewById(R.id.gprs);
Nathan Harold2b77d742016-03-19 13:22:10 -0700446 voiceNetwork = (TextView) findViewById(R.id.voice_network);
447 dataNetwork = (TextView) findViewById(R.id.data_network);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800448 dBm = (TextView) findViewById(R.id.dbm);
449 mMwi = (TextView) findViewById(R.id.mwi);
450 mCfi = (TextView) findViewById(R.id.cfi);
451 mLocation = (TextView) findViewById(R.id.location);
Wink Saville79bff2a2012-06-01 14:37:21 -0700452 mCellInfo = (TextView) findViewById(R.id.cellinfo);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800453 mCellInfo.setTypeface(Typeface.MONOSPACE);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800454
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800455 sent = (TextView) findViewById(R.id.sent);
456 received = (TextView) findViewById(R.id.received);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800457 smsc = (EditText) findViewById(R.id.smsc);
458 dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800459 mPingHostnameV4 = (TextView) findViewById(R.id.pingHostnameV4);
460 mPingHostnameV6 = (TextView) findViewById(R.id.pingHostnameV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800461 mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
462
Nathan Harold433ca442018-04-23 18:20:43 -0700463 mPhyChanConfig = (TextView) findViewById(R.id.phy_chan_config);
464
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800465 preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
Jordan Liub69e8f22019-04-02 12:13:31 -0700466 ArrayAdapter<String> preferredNetworkTypeAdapter = new ArrayAdapter<String> (this,
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800467 android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
Jordan Liub69e8f22019-04-02 12:13:31 -0700468 preferredNetworkTypeAdapter
469 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
470 preferredNetworkType.setAdapter(preferredNetworkTypeAdapter);
471
472 mSelectPhoneIndex = (Spinner) findViewById(R.id.phoneIndex);
473 ArrayAdapter<String> phoneIndexAdapter = new ArrayAdapter<String> (this,
474 android.R.layout.simple_spinner_item, mPhoneIndexLabels);
475 phoneIndexAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
476 mSelectPhoneIndex.setAdapter(phoneIndexAdapter);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800477
Nathan Harold2b77d742016-03-19 13:22:10 -0700478 cellInfoRefreshRateSpinner = (Spinner) findViewById(R.id.cell_info_rate_select);
479 ArrayAdapter<String> cellInfoAdapter = new ArrayAdapter<String>(this,
480 android.R.layout.simple_spinner_item, mCellInfoRefreshRateLabels);
481 cellInfoAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
482 cellInfoRefreshRateSpinner.setAdapter(cellInfoAdapter);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800483
Nathan Harold12e1f552016-06-17 13:55:38 -0700484 imsVolteProvisionedSwitch = (Switch) findViewById(R.id.volte_provisioned_switch);
485 imsVtProvisionedSwitch = (Switch) findViewById(R.id.vt_provisioned_switch);
486 imsWfcProvisionedSwitch = (Switch) findViewById(R.id.wfc_provisioned_switch);
Meng Wang69439b52017-05-01 08:31:14 -0700487 eabProvisionedSwitch = (Switch) findViewById(R.id.eab_provisioned_switch);
Wink Savillebf471282013-04-05 15:04:05 -0700488
Jordan Liue431f632019-04-05 14:39:41 -0700489 if (!ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
Brad Ebinger8bff9c32019-03-11 17:33:53 -0700490 imsVolteProvisionedSwitch.setVisibility(View.GONE);
491 imsVtProvisionedSwitch.setVisibility(View.GONE);
492 imsWfcProvisionedSwitch.setVisibility(View.GONE);
493 eabProvisionedSwitch.setVisibility(View.GONE);
494 }
495
Nathan Harold2b77d742016-03-19 13:22:10 -0700496 radioPowerOnSwitch = (Switch) findViewById(R.id.radio_power);
Wink Saville426fc662011-09-25 14:39:02 -0700497
Nathan Haroldf10ea322018-04-24 13:31:07 -0700498 mDownlinkKbps = (TextView) findViewById(R.id.dl_kbps);
499 mUplinkKbps = (TextView) findViewById(R.id.ul_kbps);
500 updateBandwidths(0, 0);
501
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800502 pingTestButton = (Button) findViewById(R.id.ping_test);
503 pingTestButton.setOnClickListener(mPingButtonHandler);
504 updateSmscButton = (Button) findViewById(R.id.update_smsc);
505 updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
506 refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
507 refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
508 dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
509 dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
Youhan Wangfd781e92016-12-16 15:53:16 -0800510 carrierProvisioningButton = (Button) findViewById(R.id.carrier_provisioning);
511 carrierProvisioningButton.setOnClickListener(mCarrierProvisioningButtonHandler);
512 triggercarrierProvisioningButton = (Button) findViewById(R.id.trigger_carrier_provisioning);
513 triggercarrierProvisioningButton.setOnClickListener(
514 mTriggerCarrierProvisioningButtonHandler);
johnwang342101a2009-09-23 16:22:34 -0700515
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800516 oemInfoButton = (Button) findViewById(R.id.oem_info);
517 oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
518 PackageManager pm = getPackageManager();
519 Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
520 List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
521 if (oemInfoIntentList.size() == 0) {
522 oemInfoButton.setEnabled(false);
523 }
524
Nathan Harolded38afa2016-04-13 00:29:30 -0700525 mCellInfoRefreshRateIndex = 0; //disabled
Nathan Haroldcea413a2015-11-23 15:48:10 -0800526 mPreferredNetworkTypeResult = mPreferredNetworkLabels.length - 1; //Unknown
Jordan Liub69e8f22019-04-02 12:13:31 -0700527 mSelectedPhoneIndex = 0; //phone 0
Nathan Haroldcea413a2015-11-23 15:48:10 -0800528
529 //FIXME: Replace with TelephonyManager call
Jordan Liue431f632019-04-05 14:39:41 -0700530 mPhone.getPreferredNetworkType(
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800531 mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800532
Nathan Haroldcea413a2015-11-23 15:48:10 -0800533 restoreFromBundle(icicle);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800534 }
535
536 @Override
537 protected void onResume() {
538 super.onResume();
539
Nathan Haroldcea413a2015-11-23 15:48:10 -0800540 log("Started onResume");
541
Jordan Liub69e8f22019-04-02 12:13:31 -0700542 updateAllFields();
543 }
544
545 private void updateAllFields() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800546 updateMessageWaiting();
547 updateCallRedirect();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800548 updateDataState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800549 updateDataStats2();
Nathan Harold2b77d742016-03-19 13:22:10 -0700550 updateRadioPowerState();
Nathan Harold12e1f552016-06-17 13:55:38 -0700551 updateImsProvisionedState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800552 updateProperties();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800553 updateDnsCheckState();
Nathan Harold2b77d742016-03-19 13:22:10 -0700554 updateNetworkType();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800555
Nathan Haroldcea413a2015-11-23 15:48:10 -0800556 updateLocation(mCellLocationResult);
557 updateCellInfo(mCellInfoResult);
Jordan Liub69e8f22019-04-02 12:13:31 -0700558 updateSubscriptionIds();
Nathan Haroldcea413a2015-11-23 15:48:10 -0800559
560 mPingHostnameV4.setText(mPingHostnameResultV4);
561 mPingHostnameV6.setText(mPingHostnameResultV6);
562 mHttpClientTest.setText(mHttpClientTestResult);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800563
Nathan Harold2b77d742016-03-19 13:22:10 -0700564 cellInfoRefreshRateSpinner.setOnItemSelectedListener(mCellInfoRefreshRateHandler);
Nathan Harolded38afa2016-04-13 00:29:30 -0700565 //set selection after registering listener to force update
566 cellInfoRefreshRateSpinner.setSelection(mCellInfoRefreshRateIndex);
567
568 //set selection before registering to prevent update
569 preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
Nathan Harold2b77d742016-03-19 13:22:10 -0700570 preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
Nathan Harolded38afa2016-04-13 00:29:30 -0700571
Jordan Liub69e8f22019-04-02 12:13:31 -0700572 // set phone index
573 mSelectPhoneIndex.setSelection(mSelectedPhoneIndex, true);
574 mSelectPhoneIndex.setOnItemSelectedListener(mSelectPhoneIndexHandler);
575
Nathan Harold2b77d742016-03-19 13:22:10 -0700576 radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
Nathan Harold12e1f552016-06-17 13:55:38 -0700577 imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
578 imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
579 imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
Meng Wang586741c2017-04-26 15:02:51 -0700580 eabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
Nathan Harold2b77d742016-03-19 13:22:10 -0700581
Jordan Liue431f632019-04-05 14:39:41 -0700582 unregisterPhoneStateListener();
Jordan Liub69e8f22019-04-02 12:13:31 -0700583 registerPhoneStateListener();
Nathan Harolded38afa2016-04-13 00:29:30 -0700584
Nathan Haroldf10ea322018-04-24 13:31:07 -0700585 mConnectivityManager.registerNetworkCallback(
586 mDefaultNetworkRequest, mNetworkCallback, mHandler);
587
Nathan Harolded38afa2016-04-13 00:29:30 -0700588 smsc.clearFocus();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800589 }
590
591 @Override
Nathan Haroldcea413a2015-11-23 15:48:10 -0800592 protected void onPause() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800593 super.onPause();
594
Wink Savillebf471282013-04-05 15:04:05 -0700595 log("onPause: unregister phone & data intents");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800596
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800597 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
Sooraj Sasindran5cce06b2016-08-18 15:49:49 -0700598 mTelephonyManager.setCellInfoListRate(CELL_INFO_LIST_RATE_DISABLED);
Nathan Haroldf10ea322018-04-24 13:31:07 -0700599 mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
600
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800601 }
602
Nathan Haroldcea413a2015-11-23 15:48:10 -0800603 private void restoreFromBundle(Bundle b) {
Nathan Harolde272c202016-10-27 13:45:00 -0700604 if(b == null) {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800605 return;
606 }
607
608 mPingHostnameResultV4 = b.getString("mPingHostnameResultV4","");
609 mPingHostnameResultV6 = b.getString("mPingHostnameResultV6","");
610 mHttpClientTestResult = b.getString("mHttpClientTestResult","");
611
612 mPingHostnameV4.setText(mPingHostnameResultV4);
613 mPingHostnameV6.setText(mPingHostnameResultV6);
614 mHttpClientTest.setText(mHttpClientTestResult);
615
Nathan Harold2b77d742016-03-19 13:22:10 -0700616 mPreferredNetworkTypeResult = b.getInt("mPreferredNetworkTypeResult",
617 mPreferredNetworkLabels.length - 1);
618
Jordan Liub69e8f22019-04-02 12:13:31 -0700619 mSelectedPhoneIndex = b.getInt("mSelectedPhoneIndex", 0);
620
Nathan Harold2b77d742016-03-19 13:22:10 -0700621 mCellInfoRefreshRateIndex = b.getInt("mCellInfoRefreshRateIndex", 0);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800622 }
623
624 @Override
625 protected void onSaveInstanceState(Bundle outState) {
626 outState.putString("mPingHostnameResultV4", mPingHostnameResultV4);
627 outState.putString("mPingHostnameResultV6", mPingHostnameResultV6);
628 outState.putString("mHttpClientTestResult", mHttpClientTestResult);
Nathan Harold2b77d742016-03-19 13:22:10 -0700629
Nathan Haroldcea413a2015-11-23 15:48:10 -0800630 outState.putInt("mPreferredNetworkTypeResult", mPreferredNetworkTypeResult);
Jordan Liub69e8f22019-04-02 12:13:31 -0700631 outState.putInt("mSelectedPhoneIndex", mSelectedPhoneIndex);
Nathan Harold2b77d742016-03-19 13:22:10 -0700632 outState.putInt("mCellInfoRefreshRateIndex", mCellInfoRefreshRateIndex);
633
Nathan Haroldcea413a2015-11-23 15:48:10 -0800634 }
635
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800636 @Override
637 public boolean onCreateOptionsMenu(Menu menu) {
Wink Savillec3886682009-04-02 11:00:56 -0700638 menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label)
639 .setOnMenuItemClickListener(mSelectBandCallback)
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800640 .setAlphabeticShortcut('b');
641 menu.add(1, MENU_ITEM_VIEW_ADN, 0,
642 R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
643 menu.add(1, MENU_ITEM_VIEW_FDN, 0,
644 R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
645 menu.add(1, MENU_ITEM_VIEW_SDN, 0,
646 R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
Jordan Liue431f632019-04-05 14:39:41 -0700647 if (ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
Brad Ebinger8bff9c32019-03-11 17:33:53 -0700648 menu.add(1, MENU_ITEM_GET_IMS_STATUS,
649 0, R.string.radioInfo_menu_getIMS).setOnMenuItemClickListener(mGetImsStatus);
650 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800651 menu.add(1, MENU_ITEM_TOGGLE_DATA,
Nathan Harold2b77d742016-03-19 13:22:10 -0700652 0, R.string.radio_info_data_connection_disable).setOnMenuItemClickListener(mToggleData);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800653 return true;
654 }
655
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800656 @Override
Wink Savillec3886682009-04-02 11:00:56 -0700657 public boolean onPrepareOptionsMenu(Menu menu) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800658 // Get the TOGGLE DATA menu item in the right state.
659 MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
660 int state = mTelephonyManager.getDataState();
661 boolean visible = true;
662
663 switch (state) {
664 case TelephonyManager.DATA_CONNECTED:
665 case TelephonyManager.DATA_SUSPENDED:
Nathan Harold2b77d742016-03-19 13:22:10 -0700666 item.setTitle(R.string.radio_info_data_connection_disable);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800667 break;
668 case TelephonyManager.DATA_DISCONNECTED:
Nathan Harold2b77d742016-03-19 13:22:10 -0700669 item.setTitle(R.string.radio_info_data_connection_enable);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800670 break;
671 default:
672 visible = false;
673 break;
674 }
675 item.setVisible(visible);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800676 return true;
677 }
678
Jordan Liub69e8f22019-04-02 12:13:31 -0700679 // returns array of string labels for each phone index. The array index is equal to the phone
680 // index.
681 private static String[] getPhoneIndexLabels(TelephonyManager tm) {
682 int phones = tm.getPhoneCount();
683 String[] labels = new String[phones];
684 for (int i = 0; i < phones; i++) {
685 labels[i] = "Phone " + i;
686 }
687 return labels;
688 }
689
Jordan Liue431f632019-04-05 14:39:41 -0700690 private void unregisterPhoneStateListener() {
691 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
692
693 // clear all fields so they are blank until the next listener event occurs
694 operatorName.setText("");
695 gprsState.setText("");
696 dataNetwork.setText("");
697 voiceNetwork.setText("");
698 sent.setText("");
699 received.setText("");
700 callState.setText("");
701 mLocation.setText("");
702 mMwiValue = false;
703 mMwi.setText("");
704 mCfiValue = false;
705 mCfi.setText("");
706 mCellInfo.setText("");
707 dBm.setText("");
708 gsmState.setText("");
709 roamingState.setText("");
710 mPhyChanConfig.setText("");
711 }
712
Jordan Liub69e8f22019-04-02 12:13:31 -0700713 // register mPhoneStateListener for relevant fields using the current TelephonyManager
714 private void registerPhoneStateListener() {
Jordan Liue431f632019-04-05 14:39:41 -0700715 mPhoneStateListener = new RadioInfoPhoneStateListener();
Jordan Liub69e8f22019-04-02 12:13:31 -0700716 mTelephonyManager.listen(mPhoneStateListener,
717 PhoneStateListener.LISTEN_CALL_STATE
718 //b/27803938 - RadioInfo currently cannot read PRECISE_CALL_STATE
719 // | PhoneStateListener.LISTEN_PRECISE_CALL_STATE
720 | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
721 | PhoneStateListener.LISTEN_DATA_ACTIVITY
722 | PhoneStateListener.LISTEN_CELL_LOCATION
723 | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
724 | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
725 | PhoneStateListener.LISTEN_CELL_INFO
726 | PhoneStateListener.LISTEN_SERVICE_STATE
727 | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
728 | PhoneStateListener.LISTEN_PHYSICAL_CHANNEL_CONFIGURATION);
729 }
730
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800731 private void updateDnsCheckState() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800732 //FIXME: Replace with a TelephonyManager call
Jordan Liue431f632019-04-05 14:39:41 -0700733 dnsCheckState.setText(mPhone.isDnsCheckDisabled() ?
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800734 "0.0.0.0 allowed" :"0.0.0.0 not allowed");
735 }
Wink Savillee2a14e32009-05-29 14:06:30 -0700736
Nathan Haroldf10ea322018-04-24 13:31:07 -0700737 private void updateBandwidths(int dlbw, int ulbw) {
738 dlbw = (dlbw < 0 || dlbw == Integer.MAX_VALUE) ? -1 : dlbw;
739 ulbw = (ulbw < 0 || ulbw == Integer.MAX_VALUE) ? -1 : ulbw;
740 mDownlinkKbps.setText(String.format("%-5d", dlbw));
741 mUplinkKbps.setText(String.format("%-5d", ulbw));
742 }
743
744
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800745 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700746 updateSignalStrength(SignalStrength signalStrength) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800747 Resources r = getResources();
748
Nathan Harold2b77d742016-03-19 13:22:10 -0700749 int signalDbm = signalStrength.getDbm();
Wink Savillee2a14e32009-05-29 14:06:30 -0700750
Nathan Harold2b77d742016-03-19 13:22:10 -0700751 int signalAsu = signalStrength.getAsuLevel();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800752
753 if (-1 == signalAsu) signalAsu = 0;
754
755 dBm.setText(String.valueOf(signalDbm) + " "
756 + r.getString(R.string.radioInfo_display_dbm) + " "
757 + String.valueOf(signalAsu) + " "
758 + r.getString(R.string.radioInfo_display_asu));
759 }
760
761 private final void updateLocation(CellLocation location) {
jsh534f5ae2009-09-24 09:19:22 -0700762 Resources r = getResources();
Wink Savillec3886682009-04-02 11:00:56 -0700763 if (location instanceof GsmCellLocation) {
764 GsmCellLocation loc = (GsmCellLocation)location;
jsh534f5ae2009-09-24 09:19:22 -0700765 int lac = loc.getLac();
766 int cid = loc.getCid();
767 mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
768 + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
769 + " "
770 + r.getString(R.string.radioInfo_cid) + " = "
771 + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
772 } else if (location instanceof CdmaCellLocation) {
773 CdmaCellLocation loc = (CdmaCellLocation)location;
774 int bid = loc.getBaseStationId();
775 int sid = loc.getSystemId();
776 int nid = loc.getNetworkId();
777 int lat = loc.getBaseStationLatitude();
778 int lon = loc.getBaseStationLongitude();
779 mLocation.setText("BID = "
780 + ((bid == -1) ? "unknown" : Integer.toHexString(bid))
781 + " "
782 + "SID = "
783 + ((sid == -1) ? "unknown" : Integer.toHexString(sid))
784 + " "
785 + "NID = "
786 + ((nid == -1) ? "unknown" : Integer.toHexString(nid))
787 + "\n"
788 + "LAT = "
789 + ((lat == -1) ? "unknown" : Integer.toHexString(lat))
790 + " "
791 + "LONG = "
792 + ((lon == -1) ? "unknown" : Integer.toHexString(lon)));
793 } else {
794 mLocation.setText("unknown");
Wink Savillec3886682009-04-02 11:00:56 -0700795 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800796
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800797
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800798 }
799
Nathan Haroldcea413a2015-11-23 15:48:10 -0800800 private final String getCellInfoDisplayString(int i) {
801 return (i != Integer.MAX_VALUE) ? Integer.toString(i) : "";
802 }
803
804 private final String getCellInfoDisplayString(long i) {
805 return (i != Long.MAX_VALUE) ? Long.toString(i) : "";
806 }
807
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700808 private final String getConnectionStatusString(CellInfo ci) {
809 String regStr = "";
810 String connStatStr = "";
811 String connector = "";
812
813 if (ci.isRegistered()) {
814 regStr = "R";
815 }
816 switch (ci.getCellConnectionStatus()) {
817 case CellInfo.CONNECTION_PRIMARY_SERVING: connStatStr = "P"; break;
818 case CellInfo.CONNECTION_SECONDARY_SERVING: connStatStr = "S"; break;
819 case CellInfo.CONNECTION_NONE: connStatStr = "N"; break;
820 case CellInfo.CONNECTION_UNKNOWN: /* Field is unsupported */ break;
821 default: break;
822 }
823 if (!TextUtils.isEmpty(regStr) && !TextUtils.isEmpty(connStatStr)) {
824 connector = "+";
825 }
826
827 return regStr + connector + connStatStr;
828 }
829
Nathan Haroldcea413a2015-11-23 15:48:10 -0800830 private final String buildCdmaInfoString(CellInfoCdma ci) {
831 CellIdentityCdma cidCdma = ci.getCellIdentity();
832 CellSignalStrengthCdma ssCdma = ci.getCellSignalStrength();
833
834 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 -0700835 getConnectionStatusString(ci),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800836 getCellInfoDisplayString(cidCdma.getSystemId()),
837 getCellInfoDisplayString(cidCdma.getNetworkId()),
838 getCellInfoDisplayString(cidCdma.getBasestationId()),
839 getCellInfoDisplayString(ssCdma.getCdmaDbm()),
840 getCellInfoDisplayString(ssCdma.getCdmaEcio()),
841 getCellInfoDisplayString(ssCdma.getEvdoDbm()),
842 getCellInfoDisplayString(ssCdma.getEvdoEcio()),
843 getCellInfoDisplayString(ssCdma.getEvdoSnr()));
844 }
845
846 private final String buildGsmInfoString(CellInfoGsm ci) {
847 CellIdentityGsm cidGsm = ci.getCellIdentity();
848 CellSignalStrengthGsm ssGsm = ci.getCellSignalStrength();
849
Nathan Harold2b77d742016-03-19 13:22:10 -0700850 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 -0700851 getConnectionStatusString(ci),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800852 getCellInfoDisplayString(cidGsm.getMcc()),
853 getCellInfoDisplayString(cidGsm.getMnc()),
854 getCellInfoDisplayString(cidGsm.getLac()),
855 getCellInfoDisplayString(cidGsm.getCid()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700856 getCellInfoDisplayString(cidGsm.getArfcn()),
857 getCellInfoDisplayString(cidGsm.getBsic()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800858 getCellInfoDisplayString(ssGsm.getDbm()));
859 }
860
861 private final String buildLteInfoString(CellInfoLte ci) {
862 CellIdentityLte cidLte = ci.getCellIdentity();
863 CellSignalStrengthLte ssLte = ci.getCellSignalStrength();
864
865 return String.format(
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700866 "%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-3.3s %-6.6s %-2.2s %-4.4s %-4.4s %-2.2s\n",
867 getConnectionStatusString(ci),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800868 getCellInfoDisplayString(cidLte.getMcc()),
869 getCellInfoDisplayString(cidLte.getMnc()),
870 getCellInfoDisplayString(cidLte.getTac()),
871 getCellInfoDisplayString(cidLte.getCi()),
872 getCellInfoDisplayString(cidLte.getPci()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700873 getCellInfoDisplayString(cidLte.getEarfcn()),
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700874 getCellInfoDisplayString(cidLte.getBandwidth()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800875 getCellInfoDisplayString(ssLte.getDbm()),
876 getCellInfoDisplayString(ssLte.getRsrq()),
877 getCellInfoDisplayString(ssLte.getTimingAdvance()));
878 }
879
880 private final String buildWcdmaInfoString(CellInfoWcdma ci) {
881 CellIdentityWcdma cidWcdma = ci.getCellIdentity();
882 CellSignalStrengthWcdma ssWcdma = ci.getCellSignalStrength();
883
Nathan Harold2b77d742016-03-19 13:22:10 -0700884 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 -0700885 getConnectionStatusString(ci),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800886 getCellInfoDisplayString(cidWcdma.getMcc()),
887 getCellInfoDisplayString(cidWcdma.getMnc()),
888 getCellInfoDisplayString(cidWcdma.getLac()),
889 getCellInfoDisplayString(cidWcdma.getCid()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700890 getCellInfoDisplayString(cidWcdma.getUarfcn()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800891 getCellInfoDisplayString(cidWcdma.getPsc()),
892 getCellInfoDisplayString(ssWcdma.getDbm()));
893 }
894
895 private final String buildCellInfoString(List<CellInfo> arrayCi) {
896 String value = new String();
897 StringBuilder cdmaCells = new StringBuilder(),
898 gsmCells = new StringBuilder(),
899 lteCells = new StringBuilder(),
900 wcdmaCells = new StringBuilder();
901
902 if (arrayCi != null) {
903 for (CellInfo ci : arrayCi) {
904
905 if (ci instanceof CellInfoLte) {
906 lteCells.append(buildLteInfoString((CellInfoLte) ci));
907 } else if (ci instanceof CellInfoWcdma) {
908 wcdmaCells.append(buildWcdmaInfoString((CellInfoWcdma) ci));
909 } else if (ci instanceof CellInfoGsm) {
910 gsmCells.append(buildGsmInfoString((CellInfoGsm) ci));
911 } else if (ci instanceof CellInfoCdma) {
912 cdmaCells.append(buildCdmaInfoString((CellInfoCdma) ci));
Wink Saville79bff2a2012-06-01 14:37:21 -0700913 }
914 }
Nathan Haroldcea413a2015-11-23 15:48:10 -0800915 if (lteCells.length() != 0) {
916 value += String.format(
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700917 "LTE\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-3.3s"
918 + " %-6.6s %-2.2s %-4.4s %-4.4s %-2.2s\n",
919 "SRV", "MCC", "MNC", "TAC", "CID", "PCI",
920 "EARFCN", "BW", "RSRP", "RSRQ", "TA");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800921 value += lteCells.toString();
922 }
923 if (wcdmaCells.length() != 0) {
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700924 value += String.format(
925 "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 -0700926 "SRV", "MCC", "MNC", "LAC", "CID", "UARFCN", "PSC", "RSCP");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800927 value += wcdmaCells.toString();
928 }
929 if (gsmCells.length() != 0) {
Nathan Harold6e16fdf2018-04-17 17:01:32 -0700930 value += String.format(
931 "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 -0700932 "SRV", "MCC", "MNC", "LAC", "CID", "ARFCN", "BSIC", "RSSI");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800933 value += gsmCells.toString();
934 }
935 if (cdmaCells.length() != 0) {
936 value += String.format(
937 "CDMA/EVDO\n%-3.3s %-5.5s %-5.5s %-5.5s %-6.6s %-6.6s %-6.6s %-6.6s %-5.5s\n",
938 "SRV", "SID", "NID", "BSID", "C-RSSI", "C-ECIO", "E-RSSI", "E-ECIO", "E-SNR");
939 value += cdmaCells.toString();
940 }
941 } else {
942 value ="unknown";
Wink Saville79bff2a2012-06-01 14:37:21 -0700943 }
Nathan Haroldcea413a2015-11-23 15:48:10 -0800944
945 return value.toString();
946 }
947
948 private final void updateCellInfo(List<CellInfo> arrayCi) {
949 mCellInfo.setText(buildCellInfoString(arrayCi));
Wink Saville79bff2a2012-06-01 14:37:21 -0700950 }
951
Jordan Liub69e8f22019-04-02 12:13:31 -0700952 private final void updateSubscriptionIds() {
Jordan Liue431f632019-04-05 14:39:41 -0700953 mSubscriptionId.setText(Integer.toString(mPhone.getSubId()));
Jordan Liub69e8f22019-04-02 12:13:31 -0700954 mDds.setText(Integer.toString(SubscriptionManager.getDefaultDataSubscriptionId()));
955 }
956
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800957 private final void
958 updateMessageWaiting() {
959 mMwi.setText(String.valueOf(mMwiValue));
960 }
961
962 private final void
963 updateCallRedirect() {
964 mCfi.setText(String.valueOf(mCfiValue));
965 }
966
967
968 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700969 updateServiceState(ServiceState serviceState) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800970 int state = serviceState.getState();
971 Resources r = getResources();
972 String display = r.getString(R.string.radioInfo_unknown);
johnwang342101a2009-09-23 16:22:34 -0700973
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800974 switch (state) {
975 case ServiceState.STATE_IN_SERVICE:
976 display = r.getString(R.string.radioInfo_service_in);
977 break;
978 case ServiceState.STATE_OUT_OF_SERVICE:
979 case ServiceState.STATE_EMERGENCY_ONLY:
980 display = r.getString(R.string.radioInfo_service_emergency);
981 break;
982 case ServiceState.STATE_POWER_OFF:
983 display = r.getString(R.string.radioInfo_service_off);
984 break;
985 }
johnwang342101a2009-09-23 16:22:34 -0700986
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800987 gsmState.setText(display);
johnwang342101a2009-09-23 16:22:34 -0700988
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800989 if (serviceState.getRoaming()) {
990 roamingState.setText(R.string.radioInfo_roaming_in);
991 } else {
992 roamingState.setText(R.string.radioInfo_roaming_not);
993 }
994
995 operatorName.setText(serviceState.getOperatorAlphaLong());
996 }
997
998 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700999 updatePhoneState(int state) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001000 Resources r = getResources();
1001 String display = r.getString(R.string.radioInfo_unknown);
1002
1003 switch (state) {
Nathan Harold2b77d742016-03-19 13:22:10 -07001004 case TelephonyManager.CALL_STATE_IDLE:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001005 display = r.getString(R.string.radioInfo_phone_idle);
1006 break;
Nathan Harold2b77d742016-03-19 13:22:10 -07001007 case TelephonyManager.CALL_STATE_RINGING:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001008 display = r.getString(R.string.radioInfo_phone_ringing);
1009 break;
Nathan Harold2b77d742016-03-19 13:22:10 -07001010 case TelephonyManager.CALL_STATE_OFFHOOK:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001011 display = r.getString(R.string.radioInfo_phone_offhook);
1012 break;
1013 }
1014
1015 callState.setText(display);
1016 }
1017
1018 private final void
1019 updateDataState() {
1020 int state = mTelephonyManager.getDataState();
1021 Resources r = getResources();
1022 String display = r.getString(R.string.radioInfo_unknown);
1023
1024 switch (state) {
1025 case TelephonyManager.DATA_CONNECTED:
1026 display = r.getString(R.string.radioInfo_data_connected);
1027 break;
1028 case TelephonyManager.DATA_CONNECTING:
1029 display = r.getString(R.string.radioInfo_data_connecting);
1030 break;
1031 case TelephonyManager.DATA_DISCONNECTED:
1032 display = r.getString(R.string.radioInfo_data_disconnected);
1033 break;
1034 case TelephonyManager.DATA_SUSPENDED:
1035 display = r.getString(R.string.radioInfo_data_suspended);
1036 break;
1037 }
johnwang342101a2009-09-23 16:22:34 -07001038
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001039 gprsState.setText(display);
1040 }
1041
1042 private final void updateNetworkType() {
Jordan Liue431f632019-04-05 14:39:41 -07001043 if(mPhone != null) {
1044 ServiceState ss = mPhone.getServiceState();
Nathan Harold2b77d742016-03-19 13:22:10 -07001045 dataNetwork.setText(ServiceState.rilRadioTechnologyToString(
Jordan Liue431f632019-04-05 14:39:41 -07001046 mPhone.getServiceState().getRilDataRadioTechnology()));
Nathan Harold2b77d742016-03-19 13:22:10 -07001047 voiceNetwork.setText(ServiceState.rilRadioTechnologyToString(
Jordan Liue431f632019-04-05 14:39:41 -07001048 mPhone.getServiceState().getRilVoiceRadioTechnology()));
Nathan Harold2b77d742016-03-19 13:22:10 -07001049 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001050 }
1051
1052 private final void
1053 updateProperties() {
1054 String s;
1055 Resources r = getResources();
1056
Jordan Liue431f632019-04-05 14:39:41 -07001057 s = mPhone.getDeviceId();
johnwang342101a2009-09-23 16:22:34 -07001058 if (s == null) s = r.getString(R.string.radioInfo_unknown);
Wink Savillec3886682009-04-02 11:00:56 -07001059 mDeviceId.setText(s);
johnwang342101a2009-09-23 16:22:34 -07001060
Jordan Liue431f632019-04-05 14:39:41 -07001061 s = mPhone.getSubscriberId();
Meng Wang9053f172017-06-23 16:02:14 -07001062 if (s == null) s = r.getString(R.string.radioInfo_unknown);
1063 mSubscriberId.setText(s);
1064
Nathan Haroldcea413a2015-11-23 15:48:10 -08001065 //FIXME: Replace with a TelephonyManager call
Jordan Liue431f632019-04-05 14:39:41 -07001066 s = mPhone.getLine1Number();
johnwang342101a2009-09-23 16:22:34 -07001067 if (s == null) s = r.getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001068 number.setText(s);
1069 }
1070
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001071 private final void updateDataStats2() {
1072 Resources r = getResources();
1073
Jeff Sharkey93029862011-05-27 18:26:15 -07001074 long txPackets = TrafficStats.getMobileTxPackets();
1075 long rxPackets = TrafficStats.getMobileRxPackets();
1076 long txBytes = TrafficStats.getMobileTxBytes();
1077 long rxBytes = TrafficStats.getMobileRxBytes();
johnwang342101a2009-09-23 16:22:34 -07001078
Jeff Sharkey93029862011-05-27 18:26:15 -07001079 String packets = r.getString(R.string.radioInfo_display_packets);
1080 String bytes = r.getString(R.string.radioInfo_display_bytes);
johnwang342101a2009-09-23 16:22:34 -07001081
Jeff Sharkey93029862011-05-27 18:26:15 -07001082 sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
1083 received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001084 }
1085
1086 /**
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001087 * Ping a host name
1088 */
1089 private final void pingHostname() {
1090 try {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001091 try {
1092 Process p4 = Runtime.getRuntime().exec("ping -c 1 www.google.com");
1093 int status4 = p4.waitFor();
1094 if (status4 == 0) {
1095 mPingHostnameResultV4 = "Pass";
1096 } else {
1097 mPingHostnameResultV4 = String.format("Fail(%d)", status4);
1098 }
1099 } catch (IOException e) {
1100 mPingHostnameResultV4 = "Fail: IOException";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001101 }
Nathan Haroldcea413a2015-11-23 15:48:10 -08001102 try {
1103 Process p6 = Runtime.getRuntime().exec("ping6 -c 1 www.google.com");
1104 int status6 = p6.waitFor();
1105 if (status6 == 0) {
1106 mPingHostnameResultV6 = "Pass";
1107 } else {
1108 mPingHostnameResultV6 = String.format("Fail(%d)", status6);
1109 }
1110 } catch (IOException e) {
1111 mPingHostnameResultV6 = "Fail: IOException";
1112 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001113 } catch (InterruptedException e) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001114 mPingHostnameResultV4 = mPingHostnameResultV6 = "Fail: InterruptedException";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001115 }
1116 }
1117
1118 /**
1119 * This function checks for basic functionality of HTTP Client.
1120 */
1121 private void httpClientTest() {
Narayan Kamathf25627c2014-12-12 13:53:28 +00001122 HttpURLConnection urlConnection = null;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001123 try {
Narayan Kamathf25627c2014-12-12 13:53:28 +00001124 // TODO: Hardcoded for now, make it UI configurable
Alex Klyubinb0090232015-04-02 11:08:51 -07001125 URL url = new URL("https://www.google.com");
Narayan Kamathf25627c2014-12-12 13:53:28 +00001126 urlConnection = (HttpURLConnection) url.openConnection();
1127 if (urlConnection.getResponseCode() == 200) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001128 mHttpClientTestResult = "Pass";
1129 } else {
Narayan Kamathf25627c2014-12-12 13:53:28 +00001130 mHttpClientTestResult = "Fail: Code: " + urlConnection.getResponseMessage();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001131 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001132 } catch (IOException e) {
1133 mHttpClientTestResult = "Fail: IOException";
Narayan Kamathf25627c2014-12-12 13:53:28 +00001134 } finally {
1135 if (urlConnection != null) {
1136 urlConnection.disconnect();
1137 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001138 }
1139 }
1140
1141 private void refreshSmsc() {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001142 //FIXME: Replace with a TelephonyManager call
Jordan Liue431f632019-04-05 14:39:41 -07001143 mPhone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001144 }
1145
Nathan Haroldcea413a2015-11-23 15:48:10 -08001146 private final void updateAllCellInfo() {
1147
1148 mCellInfo.setText("");
Nathan Haroldcea413a2015-11-23 15:48:10 -08001149 mLocation.setText("");
1150
1151 final Runnable updateAllCellInfoResults = new Runnable() {
1152 public void run() {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001153 updateLocation(mCellLocationResult);
1154 updateCellInfo(mCellInfoResult);
1155 }
1156 };
1157
1158 Thread locThread = new Thread() {
1159 @Override
1160 public void run() {
1161 mCellInfoResult = mTelephonyManager.getAllCellInfo();
1162 mCellLocationResult = mTelephonyManager.getCellLocation();
Nathan Haroldcea413a2015-11-23 15:48:10 -08001163
1164 mHandler.post(updateAllCellInfoResults);
1165 }
1166 };
1167 locThread.start();
1168 }
1169
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001170 private final void updatePingState() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001171 // Set all to unknown since the threads will take a few secs to update.
Nathan Haroldcea413a2015-11-23 15:48:10 -08001172 mPingHostnameResultV4 = getResources().getString(R.string.radioInfo_unknown);
1173 mPingHostnameResultV6 = getResources().getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001174 mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
1175
Nathan Haroldcea413a2015-11-23 15:48:10 -08001176 mPingHostnameV4.setText(mPingHostnameResultV4);
1177 mPingHostnameV6.setText(mPingHostnameResultV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001178 mHttpClientTest.setText(mHttpClientTestResult);
1179
1180 final Runnable updatePingResults = new Runnable() {
1181 public void run() {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001182 mPingHostnameV4.setText(mPingHostnameResultV4);
1183 mPingHostnameV6.setText(mPingHostnameResultV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001184 mHttpClientTest.setText(mHttpClientTestResult);
1185 }
1186 };
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001187
1188 Thread hostname = new Thread() {
1189 @Override
1190 public void run() {
1191 pingHostname();
Nathan Haroldcea413a2015-11-23 15:48:10 -08001192 mHandler.post(updatePingResults);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001193 }
1194 };
1195 hostname.start();
1196
1197 Thread httpClient = new Thread() {
1198 @Override
1199 public void run() {
1200 httpClientTest();
Nathan Haroldcea413a2015-11-23 15:48:10 -08001201 mHandler.post(updatePingResults);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001202 }
1203 };
1204 httpClient.start();
1205 }
1206
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001207 private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
1208 public boolean onMenuItemClick(MenuItem item) {
1209 Intent intent = new Intent(Intent.ACTION_VIEW);
1210 // XXX We need to specify the component here because if we don't
1211 // the activity manager will try to resolve the type by calling
1212 // the content provider, which causes it to be loaded in a process
1213 // other than the Dialer process, which causes a lot of stuff to
1214 // break.
Jordan Liue431f632019-04-05 14:39:41 -07001215 intent.setClassName("com.android.phone", "com.android.phone.SimContacts");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001216 startActivity(intent);
1217 return true;
1218 }
1219 };
1220
1221 private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
1222 public boolean onMenuItemClick(MenuItem item) {
1223 Intent intent = new Intent(Intent.ACTION_VIEW);
1224 // XXX We need to specify the component here because if we don't
1225 // the activity manager will try to resolve the type by calling
1226 // the content provider, which causes it to be loaded in a process
1227 // other than the Dialer process, which causes a lot of stuff to
1228 // break.
Jordan Liue431f632019-04-05 14:39:41 -07001229 intent.setClassName("com.android.phone", "com.android.phone.settings.fdn.FdnList");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001230 startActivity(intent);
1231 return true;
1232 }
1233 };
1234
1235 private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
1236 public boolean onMenuItemClick(MenuItem item) {
1237 Intent intent = new Intent(
Wink Savillec3886682009-04-02 11:00:56 -07001238 Intent.ACTION_VIEW, Uri.parse("content://icc/sdn"));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001239 // XXX We need to specify the component here because if we don't
1240 // the activity manager will try to resolve the type by calling
1241 // the content provider, which causes it to be loaded in a process
1242 // other than the Dialer process, which causes a lot of stuff to
1243 // break.
Jordan Liue431f632019-04-05 14:39:41 -07001244 intent.setClassName("com.android.phone", "com.android.phone.ADNList");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001245 startActivity(intent);
1246 return true;
1247 }
1248 };
1249
Nathan Harolde272c202016-10-27 13:45:00 -07001250 private MenuItem.OnMenuItemClickListener mGetImsStatus = new MenuItem.OnMenuItemClickListener() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001251 public boolean onMenuItemClick(MenuItem item) {
Jordan Liue431f632019-04-05 14:39:41 -07001252 boolean isImsRegistered = mPhone.isImsRegistered();
1253 boolean availableVolte = mPhone.isVolteEnabled();
1254 boolean availableWfc = mPhone.isWifiCallingEnabled();
1255 boolean availableVt = mPhone.isVideoEnabled();
1256 boolean availableUt = mPhone.isUtEnabled();
Nathan Harolde272c202016-10-27 13:45:00 -07001257
1258 final String imsRegString = isImsRegistered ?
1259 getString(R.string.radio_info_ims_reg_status_registered) :
1260 getString(R.string.radio_info_ims_reg_status_not_registered);
1261
1262 final String available = getString(R.string.radio_info_ims_feature_status_available);
1263 final String unavailable = getString(
1264 R.string.radio_info_ims_feature_status_unavailable);
1265
1266 String imsStatus = getString(R.string.radio_info_ims_reg_status,
1267 imsRegString,
1268 availableVolte ? available : unavailable,
1269 availableWfc ? available : unavailable,
1270 availableVt ? available : unavailable,
1271 availableUt ? available : unavailable);
1272
1273 AlertDialog imsDialog = new AlertDialog.Builder(RadioInfo.this)
1274 .setMessage(imsStatus)
1275 .setTitle(getString(R.string.radio_info_ims_reg_status_title))
1276 .create();
1277
1278 imsDialog.show();
1279
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001280 return true;
1281 }
1282 };
1283
1284 private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
1285 public boolean onMenuItemClick(MenuItem item) {
1286 Intent intent = new Intent();
1287 intent.setClass(RadioInfo.this, BandMode.class);
1288 startActivity(intent);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001289 return true;
1290 }
1291 };
johnwang342101a2009-09-23 16:22:34 -07001292
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001293 private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
1294 public boolean onMenuItemClick(MenuItem item) {
1295 int state = mTelephonyManager.getDataState();
1296 switch (state) {
1297 case TelephonyManager.DATA_CONNECTED:
Jack Yue5accf72018-12-13 11:51:20 -08001298 mTelephonyManager.setDataEnabled(false);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001299 break;
1300 case TelephonyManager.DATA_DISCONNECTED:
Jack Yue5accf72018-12-13 11:51:20 -08001301 mTelephonyManager.setDataEnabled(true);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001302 break;
1303 default:
1304 // do nothing
1305 break;
1306 }
1307 return true;
1308 }
1309 };
1310
Nathan Harold2b77d742016-03-19 13:22:10 -07001311 private boolean isRadioOn() {
1312 //FIXME: Replace with a TelephonyManager call
Jordan Liue431f632019-04-05 14:39:41 -07001313 return mPhone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
Nathan Harold2b77d742016-03-19 13:22:10 -07001314 }
1315
1316 private void updateRadioPowerState() {
1317 //delightful hack to prevent on-checked-changed calls from
1318 //actually forcing the radio preference to its transient/current value.
1319 radioPowerOnSwitch.setOnCheckedChangeListener(null);
1320 radioPowerOnSwitch.setChecked(isRadioOn());
1321 radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
1322 }
1323
Nathan Harolde272c202016-10-27 13:45:00 -07001324 void setImsVolteProvisionedState(boolean state) {
Nathan Harold12e1f552016-06-17 13:55:38 -07001325 Log.d(TAG, "setImsVolteProvisioned state: " + ((state)? "on":"off"));
Nathan Harolde272c202016-10-27 13:45:00 -07001326 setImsConfigProvisionedState(IMS_VOLTE_PROVISIONED_CONFIG_ID, state);
Nathan Harold12e1f552016-06-17 13:55:38 -07001327 }
1328
Nathan Harolde272c202016-10-27 13:45:00 -07001329 void setImsVtProvisionedState(boolean state) {
Nathan Harold12e1f552016-06-17 13:55:38 -07001330 Log.d(TAG, "setImsVtProvisioned() state: " + ((state)? "on":"off"));
Nathan Harolde272c202016-10-27 13:45:00 -07001331 setImsConfigProvisionedState(IMS_VT_PROVISIONED_CONFIG_ID, state);
Nathan Harold12e1f552016-06-17 13:55:38 -07001332 }
1333
Nathan Harolde272c202016-10-27 13:45:00 -07001334 void setImsWfcProvisionedState(boolean state) {
Nathan Harold12e1f552016-06-17 13:55:38 -07001335 Log.d(TAG, "setImsWfcProvisioned() state: " + ((state)? "on":"off"));
Nathan Harolde272c202016-10-27 13:45:00 -07001336 setImsConfigProvisionedState(IMS_WFC_PROVISIONED_CONFIG_ID, state);
Nathan Harold12e1f552016-06-17 13:55:38 -07001337 }
1338
Meng Wang586741c2017-04-26 15:02:51 -07001339 void setEabProvisionedState(boolean state) {
1340 Log.d(TAG, "setEabProvisioned() state: " + ((state)? "on":"off"));
1341 setImsConfigProvisionedState(EAB_PROVISIONED_CONFIG_ID, state);
1342 }
1343
Nathan Harolde272c202016-10-27 13:45:00 -07001344 void setImsConfigProvisionedState(int configItem, boolean state) {
Jordan Liue431f632019-04-05 14:39:41 -07001345 if (mPhone != null && mImsManager != null) {
Philip P. Moltmann5c449ae2017-02-14 12:43:02 -08001346 QueuedWork.queue(new Runnable() {
Nathan Harold12e1f552016-06-17 13:55:38 -07001347 public void run() {
1348 try {
1349 mImsManager.getConfigInterface().setProvisionedValue(
1350 configItem,
1351 state? 1 : 0);
1352 } catch (ImsException e) {
1353 Log.e(TAG, "setImsConfigProvisioned() exception:", e);
1354 }
1355 }
Philip P. Moltmann5c449ae2017-02-14 12:43:02 -08001356 }, false);
Nathan Harold12e1f552016-06-17 13:55:38 -07001357 }
1358 }
1359
Nathan Harold2b77d742016-03-19 13:22:10 -07001360 OnCheckedChangeListener mRadioPowerOnChangeListener = new OnCheckedChangeListener() {
1361 @Override
1362 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1363 log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
Jordan Liue431f632019-04-05 14:39:41 -07001364 mPhone.setRadioPower(isChecked);
Nathan Harold2b77d742016-03-19 13:22:10 -07001365 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001366 };
1367
Nathan Harold12e1f552016-06-17 13:55:38 -07001368 private boolean isImsVolteProvisioned() {
Jordan Liue431f632019-04-05 14:39:41 -07001369 if (mPhone != null && mImsManager != null) {
1370 return mImsManager.isVolteEnabledByPlatform(mPhone.getContext())
1371 && mImsManager.isVolteProvisionedOnDevice(mPhone.getContext());
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -08001372 }
1373 return false;
1374 }
1375
Nathan Harold12e1f552016-06-17 13:55:38 -07001376 OnCheckedChangeListener mImsVolteCheckedChangeListener = new OnCheckedChangeListener() {
Wink Saville426fc662011-09-25 14:39:02 -07001377 @Override
Nathan Harold2b77d742016-03-19 13:22:10 -07001378 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Nathan Harold12e1f552016-06-17 13:55:38 -07001379 setImsVolteProvisionedState(isChecked);
Nathan Harolde272c202016-10-27 13:45:00 -07001380 }
Wink Saville426fc662011-09-25 14:39:02 -07001381 };
1382
Nathan Harold12e1f552016-06-17 13:55:38 -07001383 private boolean isImsVtProvisioned() {
Jordan Liue431f632019-04-05 14:39:41 -07001384 if (mPhone != null && mImsManager != null) {
1385 return mImsManager.isVtEnabledByPlatform(mPhone.getContext())
1386 && mImsManager.isVtProvisionedOnDevice(mPhone.getContext());
Nathan Harold12e1f552016-06-17 13:55:38 -07001387 }
1388 return false;
1389 }
1390
1391 OnCheckedChangeListener mImsVtCheckedChangeListener = new OnCheckedChangeListener() {
1392 @Override
1393 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1394 setImsVtProvisionedState(isChecked);
Nathan Harolde272c202016-10-27 13:45:00 -07001395 }
Nathan Harold12e1f552016-06-17 13:55:38 -07001396 };
1397
1398 private boolean isImsWfcProvisioned() {
Jordan Liue431f632019-04-05 14:39:41 -07001399 if (mPhone != null && mImsManager != null) {
1400 return mImsManager.isWfcEnabledByPlatform(mPhone.getContext())
1401 && mImsManager.isWfcProvisionedOnDevice(mPhone.getContext());
Nathan Harold12e1f552016-06-17 13:55:38 -07001402 }
1403 return false;
1404 }
1405
1406 OnCheckedChangeListener mImsWfcCheckedChangeListener = new OnCheckedChangeListener() {
1407 @Override
1408 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1409 setImsWfcProvisionedState(isChecked);
Nathan Harolde272c202016-10-27 13:45:00 -07001410 }
Nathan Harold12e1f552016-06-17 13:55:38 -07001411 };
1412
Meng Wang586741c2017-04-26 15:02:51 -07001413 private boolean isEabProvisioned() {
1414 return isFeatureProvisioned(EAB_PROVISIONED_CONFIG_ID, false);
1415 }
1416
1417 OnCheckedChangeListener mEabCheckedChangeListener = new OnCheckedChangeListener() {
1418 @Override
1419 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1420 setEabProvisionedState(isChecked);
1421 }
1422 };
1423
1424 private boolean isFeatureProvisioned(int featureId, boolean defaultValue) {
1425 boolean provisioned = defaultValue;
1426 if (mImsManager != null) {
1427 try {
1428 ImsConfig imsConfig = mImsManager.getConfigInterface();
1429 if (imsConfig != null) {
1430 provisioned =
1431 (imsConfig.getProvisionedValue(featureId)
1432 == ImsConfig.FeatureValueConstants.ON);
1433 }
1434 } catch (ImsException ex) {
1435 Log.e(TAG, "isFeatureProvisioned() exception:", ex);
1436 }
1437 }
1438
1439 log("isFeatureProvisioned() featureId=" + featureId + " provisioned=" + provisioned);
1440 return provisioned;
1441 }
1442
1443 private static boolean isEabEnabledByPlatform(Context context) {
1444 if (context != null) {
1445 CarrierConfigManager configManager = (CarrierConfigManager)
1446 context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
1447 if (configManager != null && configManager.getConfig().getBoolean(
1448 CarrierConfigManager.KEY_USE_RCS_PRESENCE_BOOL)) {
1449 return true;
1450 }
1451 }
1452 return false;
1453 }
1454
Nathan Harold12e1f552016-06-17 13:55:38 -07001455 private void updateImsProvisionedState() {
Jordan Liue431f632019-04-05 14:39:41 -07001456 if (!ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
Brad Ebinger8bff9c32019-03-11 17:33:53 -07001457 return;
1458 }
Nathan Harold12e1f552016-06-17 13:55:38 -07001459 log("updateImsProvisionedState isImsVolteProvisioned()=" + isImsVolteProvisioned());
Nathan Harold2b77d742016-03-19 13:22:10 -07001460 //delightful hack to prevent on-checked-changed calls from
1461 //actually forcing the ims provisioning to its transient/current value.
Nathan Harold12e1f552016-06-17 13:55:38 -07001462 imsVolteProvisionedSwitch.setOnCheckedChangeListener(null);
1463 imsVolteProvisionedSwitch.setChecked(isImsVolteProvisioned());
1464 imsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
Sreekanth Badidac888e192018-02-05 17:18:40 +01001465 imsVolteProvisionedSwitch.setEnabled(!Build.IS_USER
Jordan Liue431f632019-04-05 14:39:41 -07001466 && mImsManager.isVolteEnabledByPlatform(mPhone.getContext()));
Nathan Harold12e1f552016-06-17 13:55:38 -07001467
1468 imsVtProvisionedSwitch.setOnCheckedChangeListener(null);
1469 imsVtProvisionedSwitch.setChecked(isImsVtProvisioned());
1470 imsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
Sreekanth Badidac888e192018-02-05 17:18:40 +01001471 imsVtProvisionedSwitch.setEnabled(!Build.IS_USER
Jordan Liue431f632019-04-05 14:39:41 -07001472 && mImsManager.isVtEnabledByPlatform(mPhone.getContext()));
Nathan Harold12e1f552016-06-17 13:55:38 -07001473
1474 imsWfcProvisionedSwitch.setOnCheckedChangeListener(null);
1475 imsWfcProvisionedSwitch.setChecked(isImsWfcProvisioned());
1476 imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
Sreekanth Badidac888e192018-02-05 17:18:40 +01001477 imsWfcProvisionedSwitch.setEnabled(!Build.IS_USER
Jordan Liue431f632019-04-05 14:39:41 -07001478 && mImsManager.isWfcEnabledByPlatform(mPhone.getContext()));
Meng Wang586741c2017-04-26 15:02:51 -07001479
1480 eabProvisionedSwitch.setOnCheckedChangeListener(null);
1481 eabProvisionedSwitch.setChecked(isEabProvisioned());
1482 eabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
Sreekanth Badidac888e192018-02-05 17:18:40 +01001483 eabProvisionedSwitch.setEnabled(!Build.IS_USER
Jordan Liue431f632019-04-05 14:39:41 -07001484 && isEabEnabledByPlatform(mPhone.getContext()));
Wink Saville426fc662011-09-25 14:39:02 -07001485 }
1486
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001487 OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
1488 public void onClick(View v) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001489 //FIXME: Replace with a TelephonyManager call
Jordan Liue431f632019-04-05 14:39:41 -07001490 mPhone.disableDnsCheck(!mPhone.isDnsCheckDisabled());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001491 updateDnsCheckState();
1492 }
1493 };
johnwang342101a2009-09-23 16:22:34 -07001494
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001495 OnClickListener mOemInfoButtonHandler = new OnClickListener() {
1496 public void onClick(View v) {
1497 Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
1498 try {
1499 startActivity(intent);
1500 } catch (android.content.ActivityNotFoundException ex) {
Wink Savillebf471282013-04-05 15:04:05 -07001501 log("OEM-specific Info/Settings Activity Not Found : " + ex);
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001502 // If the activity does not exist, there are no OEM
1503 // settings, and so we can just do nothing...
1504 }
1505 }
1506 };
1507
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001508 OnClickListener mPingButtonHandler = new OnClickListener() {
1509 public void onClick(View v) {
1510 updatePingState();
1511 }
1512 };
1513
1514 OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
1515 public void onClick(View v) {
1516 updateSmscButton.setEnabled(false);
Jordan Liue431f632019-04-05 14:39:41 -07001517 mPhone.setSmscAddress(smsc.getText().toString(),
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001518 mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
1519 }
1520 };
1521
1522 OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
1523 public void onClick(View v) {
1524 refreshSmsc();
1525 }
1526 };
1527
Youhan Wangfd781e92016-12-16 15:53:16 -08001528 OnClickListener mCarrierProvisioningButtonHandler = new OnClickListener() {
1529 public void onClick(View v) {
Meng Wanga04449b2017-08-03 14:34:35 -07001530 final Intent intent = new Intent("com.android.settings.CARRIER_PROVISIONING");
1531 final ComponentName serviceComponent = ComponentName.unflattenFromString(
1532 "com.android.omadm.service/.DMIntentReceiver");
Youhan Wangfd781e92016-12-16 15:53:16 -08001533 intent.setComponent(serviceComponent);
Meng Wanga04449b2017-08-03 14:34:35 -07001534 sendBroadcast(intent);
Youhan Wangfd781e92016-12-16 15:53:16 -08001535 }
1536 };
1537
1538 OnClickListener mTriggerCarrierProvisioningButtonHandler = new OnClickListener() {
1539 public void onClick(View v) {
Meng Wanga04449b2017-08-03 14:34:35 -07001540 final Intent intent = new Intent("com.android.settings.TRIGGER_CARRIER_PROVISIONING");
1541 final ComponentName serviceComponent = ComponentName.unflattenFromString(
1542 "com.android.omadm.service/.DMIntentReceiver");
Youhan Wangfd781e92016-12-16 15:53:16 -08001543 intent.setComponent(serviceComponent);
Meng Wanga04449b2017-08-03 14:34:35 -07001544 sendBroadcast(intent);
Youhan Wangfd781e92016-12-16 15:53:16 -08001545 }
1546 };
1547
Nathan Haroldcea413a2015-11-23 15:48:10 -08001548 AdapterView.OnItemSelectedListener mPreferredNetworkHandler =
1549 new AdapterView.OnItemSelectedListener() {
1550
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001551 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001552 if (mPreferredNetworkTypeResult != pos && pos >= 0
1553 && pos <= mPreferredNetworkLabels.length - 2) {
1554 mPreferredNetworkTypeResult = pos;
Nathan Harolddaea8be2018-06-05 14:02:35 -07001555
1556 // TODO: Possibly migrate this to TelephonyManager.setPreferredNetworkType()
1557 // which today still has some issues (mostly that the "set" is conditional
1558 // on a successful modem call, which is not what we want). Instead we always
1559 // want this setting to be set, so that if the radio hiccups and this setting
1560 // is for some reason unsuccessful, future calls to the radio will reflect
1561 // the users's preference which is set here.
Jordan Liue431f632019-04-05 14:39:41 -07001562 final int subId = mPhone.getSubId();
Nathan Harolddaea8be2018-06-05 14:02:35 -07001563 if (SubscriptionManager.isUsableSubIdValue(subId)) {
Jordan Liue431f632019-04-05 14:39:41 -07001564 Settings.Global.putInt(mPhone.getContext().getContentResolver(),
Nathan Harolddaea8be2018-06-05 14:02:35 -07001565 PREFERRED_NETWORK_MODE + subId, mPreferredNetworkTypeResult);
1566 }
1567 log("Calling setPreferredNetworkType(" + mPreferredNetworkTypeResult + ")");
Nathan Haroldcea413a2015-11-23 15:48:10 -08001568 Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
Jordan Liue431f632019-04-05 14:39:41 -07001569 mPhone.setPreferredNetworkType(mPreferredNetworkTypeResult, msg);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001570 }
1571 }
1572
1573 public void onNothingSelected(AdapterView parent) {
1574 }
1575 };
1576
Jordan Liub69e8f22019-04-02 12:13:31 -07001577 AdapterView.OnItemSelectedListener mSelectPhoneIndexHandler =
1578 new AdapterView.OnItemSelectedListener() {
1579
1580 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1581 if (pos >= 0 && pos <= mPhoneIndexLabels.length - 1) {
1582 // the array position is equal to the phone index
1583 int phoneIndex = pos;
1584 Phone[] phones = PhoneFactory.getPhones();
1585 if (phones == null || phones.length <= phoneIndex) {
1586 log("phoneIndex " + phoneIndex + " is invalid");
1587 return;
1588 }
1589 log("switching to phone " + phoneIndex);
1590 // getSubId says it takes a slotIndex, but it actually takes a phone index
1591 int[] subIds = SubscriptionManager.getSubId(phoneIndex);
1592 if (subIds == null || subIds.length < 1) {
1593 log("no subscription found for phoneIndex " + phoneIndex);
1594 return;
1595 }
1596 mSelectedPhoneIndex = phoneIndex;
1597
1598 updatePhoneIndex(phoneIndex, subIds[0]);
1599 }
1600 }
1601
1602 public void onNothingSelected(AdapterView parent) {
1603 }
1604 };
1605
Nathan Harold2b77d742016-03-19 13:22:10 -07001606 AdapterView.OnItemSelectedListener mCellInfoRefreshRateHandler =
1607 new AdapterView.OnItemSelectedListener() {
Wink Savillebf471282013-04-05 15:04:05 -07001608
Nathan Harold2b77d742016-03-19 13:22:10 -07001609 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1610 mCellInfoRefreshRateIndex = pos;
Sooraj Sasindran5cce06b2016-08-18 15:49:49 -07001611 mTelephonyManager.setCellInfoListRate(mCellInfoRefreshRates[pos]);
Nathan Harold2b77d742016-03-19 13:22:10 -07001612 updateAllCellInfo();
1613 }
1614
1615 public void onNothingSelected(AdapterView parent) {
1616 }
1617 };
1618
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001619}