blob: 031a1ae2fa483c05214d6c36a96ed90799750cf6 [file] [log] [blame]
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.settings;
18
19import android.app.Activity;
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -080020import android.app.QueuedWork;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080021import android.content.Intent;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +080022import android.content.pm.PackageManager;
23import android.content.pm.ResolveInfo;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080024import android.content.res.Resources;
Nathan Haroldcea413a2015-11-23 15:48:10 -080025import android.graphics.Typeface;
Jeff Sharkey93029862011-05-27 18:26:15 -070026import android.net.TrafficStats;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080027import android.net.Uri;
28import android.os.AsyncResult;
29import android.os.Bundle;
30import android.os.Handler;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080031import android.os.Message;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080032import android.os.SystemProperties;
Wink Saville79bff2a2012-06-01 14:37:21 -070033import android.telephony.CellInfo;
Nathan Haroldcea413a2015-11-23 15:48:10 -080034import android.telephony.CellInfoCdma;
35import android.telephony.CellInfoGsm;
36import android.telephony.CellInfoLte;
37import android.telephony.CellInfoWcdma;
38import android.telephony.CellIdentityCdma;
39import android.telephony.CellIdentityGsm;
40import android.telephony.CellIdentityLte;
41import android.telephony.CellIdentityWcdma;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080042import android.telephony.CellLocation;
Nathan Haroldcea413a2015-11-23 15:48:10 -080043import android.telephony.CellSignalStrengthCdma;
44import android.telephony.CellSignalStrengthGsm;
45import android.telephony.CellSignalStrengthLte;
46import android.telephony.CellSignalStrengthWcdma;
Wink Saville4f0d8812014-04-15 22:05:24 -070047import android.telephony.DataConnectionRealTimeInfo;
Jason Monk39b46742015-09-10 15:52:51 -040048import android.telephony.NeighboringCellInfo;
Nathan Harold2b77d742016-03-19 13:22:10 -070049import android.telephony.PreciseCallState;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080050import android.telephony.PhoneStateListener;
51import android.telephony.ServiceState;
Nathan Harold2b77d742016-03-19 13:22:10 -070052import android.telephony.SignalStrength;
Nathan Haroldcea413a2015-11-23 15:48:10 -080053import android.telephony.SubscriptionManager;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080054import android.telephony.TelephonyManager;
jsh534f5ae2009-09-24 09:19:22 -070055import android.telephony.cdma.CdmaCellLocation;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080056import android.telephony.gsm.GsmCellLocation;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080057import android.util.Log;
58import android.view.Menu;
59import android.view.MenuItem;
60import android.view.View;
61import android.view.View.OnClickListener;
62import android.widget.AdapterView;
63import android.widget.ArrayAdapter;
64import android.widget.Button;
Nathan Harold2b77d742016-03-19 13:22:10 -070065import android.widget.CompoundButton;
66import android.widget.CompoundButton.OnCheckedChangeListener;
Jason Monk39b46742015-09-10 15:52:51 -040067import android.widget.EditText;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080068import android.widget.Spinner;
Nathan Harold2b77d742016-03-19 13:22:10 -070069import android.widget.Switch;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080070import android.widget.TextView;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080071
Jason Monk39b46742015-09-10 15:52:51 -040072import com.android.ims.ImsConfig;
73import com.android.ims.ImsException;
74import com.android.ims.ImsManager;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080075import com.android.internal.telephony.Phone;
Wink Saville55434042012-06-14 12:33:43 -070076import com.android.internal.telephony.PhoneConstants;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080077import com.android.internal.telephony.PhoneFactory;
Nathan Haroldcea413a2015-11-23 15:48:10 -080078import com.android.internal.telephony.RILConstants;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080079import com.android.internal.telephony.TelephonyProperties;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080080
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080081import java.io.IOException;
Jason Monk39b46742015-09-10 15:52:51 -040082import java.net.HttpURLConnection;
83import java.net.URL;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080084import java.net.UnknownHostException;
85import java.util.ArrayList;
86import java.util.List;
87
88public class RadioInfo extends Activity {
Nathan Harold2b77d742016-03-19 13:22:10 -070089 private static final String TAG = "RadioInfo";
johnwang342101a2009-09-23 16:22:34 -070090
Nathan Harold2b77d742016-03-19 13:22:10 -070091 private static final String[] mPreferredNetworkLabels = {
92 "WCDMA preferred",
93 "GSM only",
94 "WCDMA only",
95 "GSM auto (PRL)",
96 "CDMA auto (PRL)",
97 "CDMA only",
98 "EvDo only",
99 "Global auto (PRL)",
100 "LTE/CDMA auto (PRL)",
101 "LTE/UMTS auto (PRL)",
102 "LTE/CDMA/UMTS auto (PRL)",
103 "LTE only",
104 "LTE/WCDMA",
105 "TD-SCDMA only",
106 "TD-SCDMA/WCDMA",
107 "LTE/TD-SCDMA",
108 "TD-SCDMA/GSM",
109 "TD-SCDMA/UMTS",
110 "LTE/TD-SCDMA/WCDMA",
111 "LTE/TD-SCDMA/UMTS",
112 "TD-SCDMA/CDMA/UMTS",
113 "Global/TD-SCDMA",
114 "Unknown"
115 };
116
117
118 private static final int CELL_INFO_LIST_RATE_DISABLED = Integer.MAX_VALUE;
119 private static final int CELL_INFO_LIST_RATE_MAX = 0;
120
121 //Values in must match mCellInfoRefreshRates
122 private static final String[] mCellInfoRefreshRateLabels = {
123 "Disabled",
124 "Immediate",
125 "Min 5s",
126 "Min 10s",
127 "Min 60s"
128 };
129
130 //Values in seconds, must match mCellInfoRefreshRateLabels
131 private static final int mCellInfoRefreshRates[] = {
132 CELL_INFO_LIST_RATE_DISABLED,
133 CELL_INFO_LIST_RATE_MAX,
134 5000,
135 10000,
136 60000
137 };
138
139 private void log(String s) {
140 Log.d(TAG, s);
141 }
142
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800143 private static final int EVENT_CFI_CHANGED = 302;
144
145 private static final int EVENT_QUERY_PREFERRED_TYPE_DONE = 1000;
146 private static final int EVENT_SET_PREFERRED_TYPE_DONE = 1001;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800147 private static final int EVENT_QUERY_SMSC_DONE = 1005;
148 private static final int EVENT_UPDATE_SMSC_DONE = 1006;
149
150 private static final int MENU_ITEM_SELECT_BAND = 0;
151 private static final int MENU_ITEM_VIEW_ADN = 1;
152 private static final int MENU_ITEM_VIEW_FDN = 2;
153 private static final int MENU_ITEM_VIEW_SDN = 3;
154 private static final int MENU_ITEM_GET_PDP_LIST = 4;
155 private static final int MENU_ITEM_TOGGLE_DATA = 5;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800156
Wink Savillec3886682009-04-02 11:00:56 -0700157 private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800158 private TextView number;
159 private TextView callState;
160 private TextView operatorName;
161 private TextView roamingState;
162 private TextView gsmState;
163 private TextView gprsState;
Nathan Harold2b77d742016-03-19 13:22:10 -0700164 private TextView voiceNetwork;
165 private TextView dataNetwork;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800166 private TextView dBm;
167 private TextView mMwi;
168 private TextView mCfi;
169 private TextView mLocation;
170 private TextView mNeighboringCids;
Wink Saville79bff2a2012-06-01 14:37:21 -0700171 private TextView mCellInfo;
Wink Saville4f0d8812014-04-15 22:05:24 -0700172 private TextView mDcRtInfoTv;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800173 private TextView sent;
174 private TextView received;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800175 private TextView mPingHostnameV4;
176 private TextView mPingHostnameV6;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800177 private TextView mHttpClientTest;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800178 private TextView dnsCheckState;
179 private EditText smsc;
Nathan Harold2b77d742016-03-19 13:22:10 -0700180 private Switch radioPowerOnSwitch;
181 private Button cellInfoRefreshRateButton;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800182 private Button dnsCheckToggleButton;
183 private Button pingTestButton;
184 private Button updateSmscButton;
185 private Button refreshSmscButton;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800186 private Button oemInfoButton;
Nathan Harold2b77d742016-03-19 13:22:10 -0700187 private Switch imsVoLteProvisionedSwitch;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800188 private Spinner preferredNetworkType;
Nathan Harold2b77d742016-03-19 13:22:10 -0700189 private Spinner cellInfoRefreshRateSpinner;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800190
191 private TelephonyManager mTelephonyManager;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800192 private ImsManager mImsManager = null;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800193 private Phone phone = null;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800194
Nathan Haroldcea413a2015-11-23 15:48:10 -0800195 private String mPingHostnameResultV4;
196 private String mPingHostnameResultV6;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800197 private String mHttpClientTestResult;
198 private boolean mMwiValue = false;
199 private boolean mCfiValue = false;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800200
201 private List<CellInfo> mCellInfoResult = null;
202 private CellLocation mCellLocationResult = null;
203 private List<NeighboringCellInfo> mNeighboringCellResult = null;
204
205 private int mPreferredNetworkTypeResult;
Nathan Harold2b77d742016-03-19 13:22:10 -0700206 private int mCellInfoRefreshRateIndex;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800207
Nathan Harold2b77d742016-03-19 13:22:10 -0700208 private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800209 @Override
210 public void onDataConnectionStateChanged(int state) {
211 updateDataState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800212 updateNetworkType();
213 }
214
215 @Override
216 public void onDataActivity(int direction) {
217 updateDataStats2();
218 }
219
220 @Override
Nathan Harold2b77d742016-03-19 13:22:10 -0700221 public void onCallStateChanged(int state, String incomingNumber) {
222 updateNetworkType();
223 updatePhoneState(state);
224 }
225
226 @Override
227 public void onPreciseCallStateChanged(PreciseCallState preciseState) {
228 updateNetworkType();
229 }
230
231 @Override
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800232 public void onCellLocationChanged(CellLocation location) {
233 updateLocation(location);
234 }
235
236 @Override
237 public void onMessageWaitingIndicatorChanged(boolean mwi) {
238 mMwiValue = mwi;
239 updateMessageWaiting();
240 }
241
242 @Override
243 public void onCallForwardingIndicatorChanged(boolean cfi) {
244 mCfiValue = cfi;
245 updateCallRedirect();
246 }
Wink Saville79bff2a2012-06-01 14:37:21 -0700247
248 @Override
249 public void onCellInfoChanged(List<CellInfo> arrayCi) {
Wink Savillebf471282013-04-05 15:04:05 -0700250 log("onCellInfoChanged: arrayCi=" + arrayCi);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800251 mCellInfoResult = arrayCi;
252 updateCellInfo(mCellInfoResult);
Wink Saville79bff2a2012-06-01 14:37:21 -0700253 }
Wink Saville4f0d8812014-04-15 22:05:24 -0700254
255 @Override
256 public void onDataConnectionRealTimeInfoChanged(DataConnectionRealTimeInfo dcRtInfo) {
257 log("onDataConnectionRealTimeInfoChanged: dcRtInfo=" + dcRtInfo);
258 updateDcRtInfoTv(dcRtInfo);
259 }
Nathan Harold2b77d742016-03-19 13:22:10 -0700260
261 @Override
262 public void onSignalStrengthsChanged(SignalStrength signalStrength) {
263 log("onSignalStrengthChanged: SignalStrength=" +signalStrength);
264 updateSignalStrength(signalStrength);
265 }
266
267 @Override
268 public void onServiceStateChanged(ServiceState serviceState) {
269 log("onServiceStateChanged: ServiceState=" + serviceState);
270 updateServiceState(serviceState);
271 updateRadioPowerState();
272 updateNetworkType();
273 updateImsVoLteProvisionedState();
274 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800275 };
276
Nathan Haroldcea413a2015-11-23 15:48:10 -0800277 private void updatePreferredNetworkType(int type) {
278 if (type >= mPreferredNetworkLabels.length || type < 0) {
279 log("EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
280 "type=" + type);
281 type = mPreferredNetworkLabels.length - 1; //set to Unknown
282 }
283 mPreferredNetworkTypeResult = type;
284
285 preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
286 }
287
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800288 private Handler mHandler = new Handler() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800289 @Override
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800290 public void handleMessage(Message msg) {
291 AsyncResult ar;
292 switch (msg.what) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800293 case EVENT_QUERY_PREFERRED_TYPE_DONE:
294 ar= (AsyncResult) msg.obj;
Nathan Haroldcea413a2015-11-23 15:48:10 -0800295 if (ar.exception == null && ar.result != null) {
296 updatePreferredNetworkType(((int[])ar.result)[0]);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800297 } else {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800298 //In case of an exception, we will set this to unknown
299 updatePreferredNetworkType(mPreferredNetworkLabels.length-1);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800300 }
301 break;
302 case EVENT_SET_PREFERRED_TYPE_DONE:
303 ar= (AsyncResult) msg.obj;
304 if (ar.exception != null) {
Nathan Harolded38afa2016-04-13 00:29:30 -0700305 log("Set preferred network type failed.");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800306 }
307 break;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800308 case EVENT_QUERY_SMSC_DONE:
309 ar= (AsyncResult) msg.obj;
310 if (ar.exception != null) {
311 smsc.setText("refresh error");
312 } else {
jsh21dd4072009-05-12 11:26:55 -0700313 smsc.setText((String)ar.result);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800314 }
315 break;
316 case EVENT_UPDATE_SMSC_DONE:
317 updateSmscButton.setEnabled(true);
318 ar= (AsyncResult) msg.obj;
319 if (ar.exception != null) {
320 smsc.setText("update error");
321 }
322 break;
323 default:
Nathan Haroldcea413a2015-11-23 15:48:10 -0800324 super.handleMessage(msg);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800325 break;
326
327 }
328 }
329 };
330
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800331 @Override
332 public void onCreate(Bundle icicle) {
333 super.onCreate(icicle);
334
335 setContentView(R.layout.radio_info);
336
Nathan Haroldcea413a2015-11-23 15:48:10 -0800337 log("Started onCreate");
338
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800339 mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
340 phone = PhoneFactory.getDefaultPhone();
341
Nathan Haroldcea413a2015-11-23 15:48:10 -0800342 //TODO: Need to update this if the default phoneId changes?
343 // Better to have an instance per phone?
344 mImsManager = ImsManager.getInstance(getApplicationContext(),
345 SubscriptionManager.getDefaultVoicePhoneId());
346
Wink Savillec3886682009-04-02 11:00:56 -0700347 mDeviceId= (TextView) findViewById(R.id.imei);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800348 number = (TextView) findViewById(R.id.number);
349 callState = (TextView) findViewById(R.id.call);
350 operatorName = (TextView) findViewById(R.id.operator);
351 roamingState = (TextView) findViewById(R.id.roaming);
352 gsmState = (TextView) findViewById(R.id.gsm);
353 gprsState = (TextView) findViewById(R.id.gprs);
Nathan Harold2b77d742016-03-19 13:22:10 -0700354 voiceNetwork = (TextView) findViewById(R.id.voice_network);
355 dataNetwork = (TextView) findViewById(R.id.data_network);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800356 dBm = (TextView) findViewById(R.id.dbm);
357 mMwi = (TextView) findViewById(R.id.mwi);
358 mCfi = (TextView) findViewById(R.id.cfi);
359 mLocation = (TextView) findViewById(R.id.location);
360 mNeighboringCids = (TextView) findViewById(R.id.neighboring);
Wink Saville79bff2a2012-06-01 14:37:21 -0700361 mCellInfo = (TextView) findViewById(R.id.cellinfo);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800362 mCellInfo.setTypeface(Typeface.MONOSPACE);
Wink Saville4f0d8812014-04-15 22:05:24 -0700363 mDcRtInfoTv = (TextView) findViewById(R.id.dcrtinfo);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800364
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800365 sent = (TextView) findViewById(R.id.sent);
366 received = (TextView) findViewById(R.id.received);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800367 smsc = (EditText) findViewById(R.id.smsc);
368 dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800369 mPingHostnameV4 = (TextView) findViewById(R.id.pingHostnameV4);
370 mPingHostnameV6 = (TextView) findViewById(R.id.pingHostnameV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800371 mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
372
373 preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
374 ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
375 android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
johnwang342101a2009-09-23 16:22:34 -0700376 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800377 preferredNetworkType.setAdapter(adapter);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800378
Nathan Harold2b77d742016-03-19 13:22:10 -0700379 cellInfoRefreshRateSpinner = (Spinner) findViewById(R.id.cell_info_rate_select);
380 ArrayAdapter<String> cellInfoAdapter = new ArrayAdapter<String>(this,
381 android.R.layout.simple_spinner_item, mCellInfoRefreshRateLabels);
382 cellInfoAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
383 cellInfoRefreshRateSpinner.setAdapter(cellInfoAdapter);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800384
Nathan Harold2b77d742016-03-19 13:22:10 -0700385 imsVoLteProvisionedSwitch = (Switch) findViewById(R.id.volte_provisioned_switch);
Wink Savillebf471282013-04-05 15:04:05 -0700386
Nathan Harold2b77d742016-03-19 13:22:10 -0700387 radioPowerOnSwitch = (Switch) findViewById(R.id.radio_power);
Wink Saville426fc662011-09-25 14:39:02 -0700388
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800389 pingTestButton = (Button) findViewById(R.id.ping_test);
390 pingTestButton.setOnClickListener(mPingButtonHandler);
391 updateSmscButton = (Button) findViewById(R.id.update_smsc);
392 updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
393 refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
394 refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
395 dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
396 dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
johnwang342101a2009-09-23 16:22:34 -0700397
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800398 oemInfoButton = (Button) findViewById(R.id.oem_info);
399 oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
400 PackageManager pm = getPackageManager();
401 Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
402 List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
403 if (oemInfoIntentList.size() == 0) {
404 oemInfoButton.setEnabled(false);
405 }
406
Nathan Harolded38afa2016-04-13 00:29:30 -0700407 mCellInfoRefreshRateIndex = 0; //disabled
Nathan Haroldcea413a2015-11-23 15:48:10 -0800408 mPreferredNetworkTypeResult = mPreferredNetworkLabels.length - 1; //Unknown
409
410 //FIXME: Replace with TelephonyManager call
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800411 phone.getPreferredNetworkType(
412 mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800413
Nathan Haroldcea413a2015-11-23 15:48:10 -0800414 restoreFromBundle(icicle);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800415 }
416
417 @Override
418 protected void onResume() {
419 super.onResume();
420
Nathan Haroldcea413a2015-11-23 15:48:10 -0800421 log("Started onResume");
422
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800423 updateMessageWaiting();
424 updateCallRedirect();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800425 updateDataState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800426 updateDataStats2();
Nathan Harold2b77d742016-03-19 13:22:10 -0700427 updateRadioPowerState();
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -0800428 updateImsVoLteProvisionedState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800429 updateProperties();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800430 updateDnsCheckState();
Nathan Harold2b77d742016-03-19 13:22:10 -0700431 updateNetworkType();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800432
Nathan Haroldcea413a2015-11-23 15:48:10 -0800433 updateNeighboringCids(mNeighboringCellResult);
434 updateLocation(mCellLocationResult);
435 updateCellInfo(mCellInfoResult);
436
437 mPingHostnameV4.setText(mPingHostnameResultV4);
438 mPingHostnameV6.setText(mPingHostnameResultV6);
439 mHttpClientTest.setText(mHttpClientTestResult);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800440
Nathan Harold2b77d742016-03-19 13:22:10 -0700441 cellInfoRefreshRateSpinner.setOnItemSelectedListener(mCellInfoRefreshRateHandler);
Nathan Harolded38afa2016-04-13 00:29:30 -0700442 //set selection after registering listener to force update
443 cellInfoRefreshRateSpinner.setSelection(mCellInfoRefreshRateIndex);
444
445 //set selection before registering to prevent update
446 preferredNetworkType.setSelection(mPreferredNetworkTypeResult, true);
Nathan Harold2b77d742016-03-19 13:22:10 -0700447 preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
Nathan Harolded38afa2016-04-13 00:29:30 -0700448
Nathan Harold2b77d742016-03-19 13:22:10 -0700449 radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
450 imsVoLteProvisionedSwitch.setOnCheckedChangeListener(mImsVoLteCheckedChangeListener);
451
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800452 mTelephonyManager.listen(mPhoneStateListener,
Nathan Harold2b77d742016-03-19 13:22:10 -0700453 PhoneStateListener.LISTEN_CALL_STATE
454 //b/27803938 - RadioInfo currently cannot read PRECISE_CALL_STATE
455 // | PhoneStateListener.LISTEN_PRECISE_CALL_STATE
456 | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800457 | PhoneStateListener.LISTEN_DATA_ACTIVITY
458 | PhoneStateListener.LISTEN_CELL_LOCATION
459 | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
Wink Saville79bff2a2012-06-01 14:37:21 -0700460 | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
Wink Saville4f0d8812014-04-15 22:05:24 -0700461 | PhoneStateListener.LISTEN_CELL_INFO
Nathan Harold2b77d742016-03-19 13:22:10 -0700462 | PhoneStateListener.LISTEN_SERVICE_STATE
463 | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
Wink Saville4f0d8812014-04-15 22:05:24 -0700464 | PhoneStateListener.LISTEN_DATA_CONNECTION_REAL_TIME_INFO);
Nathan Harolded38afa2016-04-13 00:29:30 -0700465
466 smsc.clearFocus();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800467 }
468
469 @Override
Nathan Haroldcea413a2015-11-23 15:48:10 -0800470 protected void onPause() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800471 super.onPause();
472
Wink Savillebf471282013-04-05 15:04:05 -0700473 log("onPause: unregister phone & data intents");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800474
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800475 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
Nathan Harolded38afa2016-04-13 00:29:30 -0700476 phone.setCellInfoListRate(CELL_INFO_LIST_RATE_DISABLED);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800477 }
478
Nathan Haroldcea413a2015-11-23 15:48:10 -0800479 private void restoreFromBundle(Bundle b) {
480 if( b == null) {
481 return;
482 }
483
484 mPingHostnameResultV4 = b.getString("mPingHostnameResultV4","");
485 mPingHostnameResultV6 = b.getString("mPingHostnameResultV6","");
486 mHttpClientTestResult = b.getString("mHttpClientTestResult","");
487
488 mPingHostnameV4.setText(mPingHostnameResultV4);
489 mPingHostnameV6.setText(mPingHostnameResultV6);
490 mHttpClientTest.setText(mHttpClientTestResult);
491
Nathan Harold2b77d742016-03-19 13:22:10 -0700492 mPreferredNetworkTypeResult = b.getInt("mPreferredNetworkTypeResult",
493 mPreferredNetworkLabels.length - 1);
494
495 mCellInfoRefreshRateIndex = b.getInt("mCellInfoRefreshRateIndex", 0);
Nathan Haroldcea413a2015-11-23 15:48:10 -0800496 }
497
498 @Override
499 protected void onSaveInstanceState(Bundle outState) {
500 outState.putString("mPingHostnameResultV4", mPingHostnameResultV4);
501 outState.putString("mPingHostnameResultV6", mPingHostnameResultV6);
502 outState.putString("mHttpClientTestResult", mHttpClientTestResult);
Nathan Harold2b77d742016-03-19 13:22:10 -0700503
Nathan Haroldcea413a2015-11-23 15:48:10 -0800504 outState.putInt("mPreferredNetworkTypeResult", mPreferredNetworkTypeResult);
Nathan Harold2b77d742016-03-19 13:22:10 -0700505 outState.putInt("mCellInfoRefreshRateIndex", mCellInfoRefreshRateIndex);
506
Nathan Haroldcea413a2015-11-23 15:48:10 -0800507 }
508
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800509 @Override
510 public boolean onCreateOptionsMenu(Menu menu) {
Wink Savillec3886682009-04-02 11:00:56 -0700511 menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label)
512 .setOnMenuItemClickListener(mSelectBandCallback)
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800513 .setAlphabeticShortcut('b');
514 menu.add(1, MENU_ITEM_VIEW_ADN, 0,
515 R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
516 menu.add(1, MENU_ITEM_VIEW_FDN, 0,
517 R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
518 menu.add(1, MENU_ITEM_VIEW_SDN, 0,
519 R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
520 menu.add(1, MENU_ITEM_GET_PDP_LIST,
521 0, R.string.radioInfo_menu_getPDP).setOnMenuItemClickListener(mGetPdpList);
522 menu.add(1, MENU_ITEM_TOGGLE_DATA,
Nathan Harold2b77d742016-03-19 13:22:10 -0700523 0, R.string.radio_info_data_connection_disable).setOnMenuItemClickListener(mToggleData);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800524 return true;
525 }
526
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800527 @Override
Wink Savillec3886682009-04-02 11:00:56 -0700528 public boolean onPrepareOptionsMenu(Menu menu) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800529 // Get the TOGGLE DATA menu item in the right state.
530 MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
531 int state = mTelephonyManager.getDataState();
532 boolean visible = true;
533
534 switch (state) {
535 case TelephonyManager.DATA_CONNECTED:
536 case TelephonyManager.DATA_SUSPENDED:
Nathan Harold2b77d742016-03-19 13:22:10 -0700537 item.setTitle(R.string.radio_info_data_connection_disable);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800538 break;
539 case TelephonyManager.DATA_DISCONNECTED:
Nathan Harold2b77d742016-03-19 13:22:10 -0700540 item.setTitle(R.string.radio_info_data_connection_enable);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800541 break;
542 default:
543 visible = false;
544 break;
545 }
546 item.setVisible(visible);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800547 return true;
548 }
549
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800550 private void updateDnsCheckState() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800551 //FIXME: Replace with a TelephonyManager call
Mike Lockwood5304c7e2009-04-05 11:37:45 -0700552 dnsCheckState.setText(phone.isDnsCheckDisabled() ?
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800553 "0.0.0.0 allowed" :"0.0.0.0 not allowed");
554 }
Wink Savillee2a14e32009-05-29 14:06:30 -0700555
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800556 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700557 updateSignalStrength(SignalStrength signalStrength) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800558 Resources r = getResources();
559
Nathan Harold2b77d742016-03-19 13:22:10 -0700560 int signalDbm = signalStrength.getDbm();
Wink Savillee2a14e32009-05-29 14:06:30 -0700561
Nathan Harold2b77d742016-03-19 13:22:10 -0700562 int signalAsu = signalStrength.getAsuLevel();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800563
564 if (-1 == signalAsu) signalAsu = 0;
565
566 dBm.setText(String.valueOf(signalDbm) + " "
567 + r.getString(R.string.radioInfo_display_dbm) + " "
568 + String.valueOf(signalAsu) + " "
569 + r.getString(R.string.radioInfo_display_asu));
570 }
571
572 private final void updateLocation(CellLocation location) {
jsh534f5ae2009-09-24 09:19:22 -0700573 Resources r = getResources();
Wink Savillec3886682009-04-02 11:00:56 -0700574 if (location instanceof GsmCellLocation) {
575 GsmCellLocation loc = (GsmCellLocation)location;
jsh534f5ae2009-09-24 09:19:22 -0700576 int lac = loc.getLac();
577 int cid = loc.getCid();
578 mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
579 + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
580 + " "
581 + r.getString(R.string.radioInfo_cid) + " = "
582 + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
583 } else if (location instanceof CdmaCellLocation) {
584 CdmaCellLocation loc = (CdmaCellLocation)location;
585 int bid = loc.getBaseStationId();
586 int sid = loc.getSystemId();
587 int nid = loc.getNetworkId();
588 int lat = loc.getBaseStationLatitude();
589 int lon = loc.getBaseStationLongitude();
590 mLocation.setText("BID = "
591 + ((bid == -1) ? "unknown" : Integer.toHexString(bid))
592 + " "
593 + "SID = "
594 + ((sid == -1) ? "unknown" : Integer.toHexString(sid))
595 + " "
596 + "NID = "
597 + ((nid == -1) ? "unknown" : Integer.toHexString(nid))
598 + "\n"
599 + "LAT = "
600 + ((lat == -1) ? "unknown" : Integer.toHexString(lat))
601 + " "
602 + "LONG = "
603 + ((lon == -1) ? "unknown" : Integer.toHexString(lon)));
604 } else {
605 mLocation.setText("unknown");
Wink Savillec3886682009-04-02 11:00:56 -0700606 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800607
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800608
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800609 }
610
Nathan Haroldcea413a2015-11-23 15:48:10 -0800611 private final void updateNeighboringCids(List<NeighboringCellInfo> cids) {
johnwangf02c65f2009-09-25 17:26:54 -0700612 StringBuilder sb = new StringBuilder();
613
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800614 if (cids != null) {
615 if ( cids.isEmpty() ) {
johnwangf02c65f2009-09-25 17:26:54 -0700616 sb.append("no neighboring cells");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800617 } else {
618 for (NeighboringCellInfo cell : cids) {
johnwangf02c65f2009-09-25 17:26:54 -0700619 sb.append(cell.toString()).append(" ");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800620 }
621 }
622 } else {
johnwangf02c65f2009-09-25 17:26:54 -0700623 sb.append("unknown");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800624 }
johnwangf02c65f2009-09-25 17:26:54 -0700625 mNeighboringCids.setText(sb.toString());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800626 }
627
Nathan Haroldcea413a2015-11-23 15:48:10 -0800628 private final String getCellInfoDisplayString(int i) {
629 return (i != Integer.MAX_VALUE) ? Integer.toString(i) : "";
630 }
631
632 private final String getCellInfoDisplayString(long i) {
633 return (i != Long.MAX_VALUE) ? Long.toString(i) : "";
634 }
635
636 private final String buildCdmaInfoString(CellInfoCdma ci) {
637 CellIdentityCdma cidCdma = ci.getCellIdentity();
638 CellSignalStrengthCdma ssCdma = ci.getCellSignalStrength();
639
640 return String.format("%-3.3s %-5.5s %-5.5s %-5.5s %-6.6s %-6.6s %-6.6s %-6.6s %-5.5s",
641 ci.isRegistered() ? "S " : " ",
642 getCellInfoDisplayString(cidCdma.getSystemId()),
643 getCellInfoDisplayString(cidCdma.getNetworkId()),
644 getCellInfoDisplayString(cidCdma.getBasestationId()),
645 getCellInfoDisplayString(ssCdma.getCdmaDbm()),
646 getCellInfoDisplayString(ssCdma.getCdmaEcio()),
647 getCellInfoDisplayString(ssCdma.getEvdoDbm()),
648 getCellInfoDisplayString(ssCdma.getEvdoEcio()),
649 getCellInfoDisplayString(ssCdma.getEvdoSnr()));
650 }
651
652 private final String buildGsmInfoString(CellInfoGsm ci) {
653 CellIdentityGsm cidGsm = ci.getCellIdentity();
654 CellSignalStrengthGsm ssGsm = ci.getCellSignalStrength();
655
Nathan Harold2b77d742016-03-19 13:22:10 -0700656 return String.format("%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-4.4s %-4.4s\n",
Nathan Haroldcea413a2015-11-23 15:48:10 -0800657 ci.isRegistered() ? "S " : " ",
658 getCellInfoDisplayString(cidGsm.getMcc()),
659 getCellInfoDisplayString(cidGsm.getMnc()),
660 getCellInfoDisplayString(cidGsm.getLac()),
661 getCellInfoDisplayString(cidGsm.getCid()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700662 getCellInfoDisplayString(cidGsm.getArfcn()),
663 getCellInfoDisplayString(cidGsm.getBsic()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800664 getCellInfoDisplayString(ssGsm.getDbm()));
665 }
666
667 private final String buildLteInfoString(CellInfoLte ci) {
668 CellIdentityLte cidLte = ci.getCellIdentity();
669 CellSignalStrengthLte ssLte = ci.getCellSignalStrength();
670
671 return String.format(
Nathan Harold2b77d742016-03-19 13:22:10 -0700672 "%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-3.3s %-6.6s %-4.4s %-4.4s %-2.2s\n",
Nathan Haroldcea413a2015-11-23 15:48:10 -0800673 ci.isRegistered() ? "S " : " ",
674 getCellInfoDisplayString(cidLte.getMcc()),
675 getCellInfoDisplayString(cidLte.getMnc()),
676 getCellInfoDisplayString(cidLte.getTac()),
677 getCellInfoDisplayString(cidLte.getCi()),
678 getCellInfoDisplayString(cidLte.getPci()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700679 getCellInfoDisplayString(cidLte.getEarfcn()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800680 getCellInfoDisplayString(ssLte.getDbm()),
681 getCellInfoDisplayString(ssLte.getRsrq()),
682 getCellInfoDisplayString(ssLte.getTimingAdvance()));
683 }
684
685 private final String buildWcdmaInfoString(CellInfoWcdma ci) {
686 CellIdentityWcdma cidWcdma = ci.getCellIdentity();
687 CellSignalStrengthWcdma ssWcdma = ci.getCellSignalStrength();
688
Nathan Harold2b77d742016-03-19 13:22:10 -0700689 return String.format("%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-3.3s %-4.4s\n",
Nathan Haroldcea413a2015-11-23 15:48:10 -0800690 ci.isRegistered() ? "S " : " ",
691 getCellInfoDisplayString(cidWcdma.getMcc()),
692 getCellInfoDisplayString(cidWcdma.getMnc()),
693 getCellInfoDisplayString(cidWcdma.getLac()),
694 getCellInfoDisplayString(cidWcdma.getCid()),
Nathan Harold2b77d742016-03-19 13:22:10 -0700695 getCellInfoDisplayString(cidWcdma.getUarfcn()),
Nathan Haroldcea413a2015-11-23 15:48:10 -0800696 getCellInfoDisplayString(cidWcdma.getPsc()),
697 getCellInfoDisplayString(ssWcdma.getDbm()));
698 }
699
700 private final String buildCellInfoString(List<CellInfo> arrayCi) {
701 String value = new String();
702 StringBuilder cdmaCells = new StringBuilder(),
703 gsmCells = new StringBuilder(),
704 lteCells = new StringBuilder(),
705 wcdmaCells = new StringBuilder();
706
707 if (arrayCi != null) {
708 for (CellInfo ci : arrayCi) {
709
710 if (ci instanceof CellInfoLte) {
711 lteCells.append(buildLteInfoString((CellInfoLte) ci));
712 } else if (ci instanceof CellInfoWcdma) {
713 wcdmaCells.append(buildWcdmaInfoString((CellInfoWcdma) ci));
714 } else if (ci instanceof CellInfoGsm) {
715 gsmCells.append(buildGsmInfoString((CellInfoGsm) ci));
716 } else if (ci instanceof CellInfoCdma) {
717 cdmaCells.append(buildCdmaInfoString((CellInfoCdma) ci));
Wink Saville79bff2a2012-06-01 14:37:21 -0700718 }
719 }
Nathan Haroldcea413a2015-11-23 15:48:10 -0800720 if (lteCells.length() != 0) {
721 value += String.format(
Nathan Harold2b77d742016-03-19 13:22:10 -0700722 "LTE\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-3.3s %-6.6s %-4.4s %-4.4s %-2.2s\n",
723 "SRV", "MCC", "MNC", "TAC", "CID", "PCI", "EARFCN", "RSRP", "RSRQ", "TA");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800724 value += lteCells.toString();
725 }
726 if (wcdmaCells.length() != 0) {
Nathan Harold2b77d742016-03-19 13:22:10 -0700727 value += String.format("WCDMA\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-3.3s %-4.4s\n",
728 "SRV", "MCC", "MNC", "LAC", "CID", "UARFCN", "PSC", "RSCP");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800729 value += wcdmaCells.toString();
730 }
731 if (gsmCells.length() != 0) {
Nathan Harold2b77d742016-03-19 13:22:10 -0700732 value += String.format("GSM\n%-3.3s %-3.3s %-3.3s %-5.5s %-5.5s %-6.6s %-4.4s %-4.4s\n",
733 "SRV", "MCC", "MNC", "LAC", "CID", "ARFCN", "BSIC", "RSSI");
Nathan Haroldcea413a2015-11-23 15:48:10 -0800734 value += gsmCells.toString();
735 }
736 if (cdmaCells.length() != 0) {
737 value += String.format(
738 "CDMA/EVDO\n%-3.3s %-5.5s %-5.5s %-5.5s %-6.6s %-6.6s %-6.6s %-6.6s %-5.5s\n",
739 "SRV", "SID", "NID", "BSID", "C-RSSI", "C-ECIO", "E-RSSI", "E-ECIO", "E-SNR");
740 value += cdmaCells.toString();
741 }
742 } else {
743 value ="unknown";
Wink Saville79bff2a2012-06-01 14:37:21 -0700744 }
Nathan Haroldcea413a2015-11-23 15:48:10 -0800745
746 return value.toString();
747 }
748
749 private final void updateCellInfo(List<CellInfo> arrayCi) {
750 mCellInfo.setText(buildCellInfoString(arrayCi));
Wink Saville79bff2a2012-06-01 14:37:21 -0700751 }
752
Wink Saville4f0d8812014-04-15 22:05:24 -0700753 private final void updateDcRtInfoTv(DataConnectionRealTimeInfo dcRtInfo) {
754 mDcRtInfoTv.setText(dcRtInfo.toString());
755 }
756
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800757 private final void
758 updateMessageWaiting() {
759 mMwi.setText(String.valueOf(mMwiValue));
760 }
761
762 private final void
763 updateCallRedirect() {
764 mCfi.setText(String.valueOf(mCfiValue));
765 }
766
767
768 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700769 updateServiceState(ServiceState serviceState) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800770 int state = serviceState.getState();
771 Resources r = getResources();
772 String display = r.getString(R.string.radioInfo_unknown);
johnwang342101a2009-09-23 16:22:34 -0700773
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800774 switch (state) {
775 case ServiceState.STATE_IN_SERVICE:
776 display = r.getString(R.string.radioInfo_service_in);
777 break;
778 case ServiceState.STATE_OUT_OF_SERVICE:
779 case ServiceState.STATE_EMERGENCY_ONLY:
780 display = r.getString(R.string.radioInfo_service_emergency);
781 break;
782 case ServiceState.STATE_POWER_OFF:
783 display = r.getString(R.string.radioInfo_service_off);
784 break;
785 }
johnwang342101a2009-09-23 16:22:34 -0700786
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800787 gsmState.setText(display);
johnwang342101a2009-09-23 16:22:34 -0700788
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800789 if (serviceState.getRoaming()) {
790 roamingState.setText(R.string.radioInfo_roaming_in);
791 } else {
792 roamingState.setText(R.string.radioInfo_roaming_not);
793 }
794
795 operatorName.setText(serviceState.getOperatorAlphaLong());
796 }
797
798 private final void
Nathan Harold2b77d742016-03-19 13:22:10 -0700799 updatePhoneState(int state) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800800 Resources r = getResources();
801 String display = r.getString(R.string.radioInfo_unknown);
802
803 switch (state) {
Nathan Harold2b77d742016-03-19 13:22:10 -0700804 case TelephonyManager.CALL_STATE_IDLE:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800805 display = r.getString(R.string.radioInfo_phone_idle);
806 break;
Nathan Harold2b77d742016-03-19 13:22:10 -0700807 case TelephonyManager.CALL_STATE_RINGING:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800808 display = r.getString(R.string.radioInfo_phone_ringing);
809 break;
Nathan Harold2b77d742016-03-19 13:22:10 -0700810 case TelephonyManager.CALL_STATE_OFFHOOK:
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800811 display = r.getString(R.string.radioInfo_phone_offhook);
812 break;
813 }
814
815 callState.setText(display);
816 }
817
818 private final void
819 updateDataState() {
820 int state = mTelephonyManager.getDataState();
821 Resources r = getResources();
822 String display = r.getString(R.string.radioInfo_unknown);
823
824 switch (state) {
825 case TelephonyManager.DATA_CONNECTED:
826 display = r.getString(R.string.radioInfo_data_connected);
827 break;
828 case TelephonyManager.DATA_CONNECTING:
829 display = r.getString(R.string.radioInfo_data_connecting);
830 break;
831 case TelephonyManager.DATA_DISCONNECTED:
832 display = r.getString(R.string.radioInfo_data_disconnected);
833 break;
834 case TelephonyManager.DATA_SUSPENDED:
835 display = r.getString(R.string.radioInfo_data_suspended);
836 break;
837 }
johnwang342101a2009-09-23 16:22:34 -0700838
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800839 gprsState.setText(display);
840 }
841
842 private final void updateNetworkType() {
Nathan Harold2b77d742016-03-19 13:22:10 -0700843 if( phone != null ) {
844 ServiceState ss = phone.getServiceState();
845 dataNetwork.setText(ServiceState.rilRadioTechnologyToString(
846 phone.getServiceState().getRilDataRadioTechnology()));
847 voiceNetwork.setText(ServiceState.rilRadioTechnologyToString(
848 phone.getServiceState().getRilVoiceRadioTechnology()));
849 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800850 }
851
852 private final void
853 updateProperties() {
854 String s;
855 Resources r = getResources();
856
857 s = phone.getDeviceId();
johnwang342101a2009-09-23 16:22:34 -0700858 if (s == null) s = r.getString(R.string.radioInfo_unknown);
Wink Savillec3886682009-04-02 11:00:56 -0700859 mDeviceId.setText(s);
johnwang342101a2009-09-23 16:22:34 -0700860
Nathan Haroldcea413a2015-11-23 15:48:10 -0800861 //FIXME: Replace with a TelephonyManager call
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800862 s = phone.getLine1Number();
johnwang342101a2009-09-23 16:22:34 -0700863 if (s == null) s = r.getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800864 number.setText(s);
865 }
866
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800867 private final void updateDataStats2() {
868 Resources r = getResources();
869
Jeff Sharkey93029862011-05-27 18:26:15 -0700870 long txPackets = TrafficStats.getMobileTxPackets();
871 long rxPackets = TrafficStats.getMobileRxPackets();
872 long txBytes = TrafficStats.getMobileTxBytes();
873 long rxBytes = TrafficStats.getMobileRxBytes();
johnwang342101a2009-09-23 16:22:34 -0700874
Jeff Sharkey93029862011-05-27 18:26:15 -0700875 String packets = r.getString(R.string.radioInfo_display_packets);
876 String bytes = r.getString(R.string.radioInfo_display_bytes);
johnwang342101a2009-09-23 16:22:34 -0700877
Jeff Sharkey93029862011-05-27 18:26:15 -0700878 sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
879 received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800880 }
881
882 /**
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800883 * Ping a host name
884 */
885 private final void pingHostname() {
886 try {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800887 try {
888 Process p4 = Runtime.getRuntime().exec("ping -c 1 www.google.com");
889 int status4 = p4.waitFor();
890 if (status4 == 0) {
891 mPingHostnameResultV4 = "Pass";
892 } else {
893 mPingHostnameResultV4 = String.format("Fail(%d)", status4);
894 }
895 } catch (IOException e) {
896 mPingHostnameResultV4 = "Fail: IOException";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800897 }
Nathan Haroldcea413a2015-11-23 15:48:10 -0800898 try {
899 Process p6 = Runtime.getRuntime().exec("ping6 -c 1 www.google.com");
900 int status6 = p6.waitFor();
901 if (status6 == 0) {
902 mPingHostnameResultV6 = "Pass";
903 } else {
904 mPingHostnameResultV6 = String.format("Fail(%d)", status6);
905 }
906 } catch (IOException e) {
907 mPingHostnameResultV6 = "Fail: IOException";
908 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800909 } catch (InterruptedException e) {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800910 mPingHostnameResultV4 = mPingHostnameResultV6 = "Fail: InterruptedException";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800911 }
912 }
913
914 /**
915 * This function checks for basic functionality of HTTP Client.
916 */
917 private void httpClientTest() {
Narayan Kamathf25627c2014-12-12 13:53:28 +0000918 HttpURLConnection urlConnection = null;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800919 try {
Narayan Kamathf25627c2014-12-12 13:53:28 +0000920 // TODO: Hardcoded for now, make it UI configurable
Alex Klyubinb0090232015-04-02 11:08:51 -0700921 URL url = new URL("https://www.google.com");
Narayan Kamathf25627c2014-12-12 13:53:28 +0000922 urlConnection = (HttpURLConnection) url.openConnection();
923 if (urlConnection.getResponseCode() == 200) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800924 mHttpClientTestResult = "Pass";
925 } else {
Narayan Kamathf25627c2014-12-12 13:53:28 +0000926 mHttpClientTestResult = "Fail: Code: " + urlConnection.getResponseMessage();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800927 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800928 } catch (IOException e) {
929 mHttpClientTestResult = "Fail: IOException";
Narayan Kamathf25627c2014-12-12 13:53:28 +0000930 } finally {
931 if (urlConnection != null) {
932 urlConnection.disconnect();
933 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800934 }
935 }
936
937 private void refreshSmsc() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800938 //FIXME: Replace with a TelephonyManager call
jsh21dd4072009-05-12 11:26:55 -0700939 phone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800940 }
941
Nathan Haroldcea413a2015-11-23 15:48:10 -0800942 private final void updateAllCellInfo() {
943
944 mCellInfo.setText("");
945 mNeighboringCids.setText("");
946 mLocation.setText("");
947
948 final Runnable updateAllCellInfoResults = new Runnable() {
949 public void run() {
950 updateNeighboringCids(mNeighboringCellResult);
951 updateLocation(mCellLocationResult);
952 updateCellInfo(mCellInfoResult);
953 }
954 };
955
956 Thread locThread = new Thread() {
957 @Override
958 public void run() {
959 mCellInfoResult = mTelephonyManager.getAllCellInfo();
960 mCellLocationResult = mTelephonyManager.getCellLocation();
961 mNeighboringCellResult = mTelephonyManager.getNeighboringCellInfo();
962
963 mHandler.post(updateAllCellInfoResults);
964 }
965 };
966 locThread.start();
967 }
968
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800969 private final void updatePingState() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800970 // Set all to unknown since the threads will take a few secs to update.
Nathan Haroldcea413a2015-11-23 15:48:10 -0800971 mPingHostnameResultV4 = getResources().getString(R.string.radioInfo_unknown);
972 mPingHostnameResultV6 = getResources().getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800973 mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
974
Nathan Haroldcea413a2015-11-23 15:48:10 -0800975 mPingHostnameV4.setText(mPingHostnameResultV4);
976 mPingHostnameV6.setText(mPingHostnameResultV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800977 mHttpClientTest.setText(mHttpClientTestResult);
978
979 final Runnable updatePingResults = new Runnable() {
980 public void run() {
Nathan Haroldcea413a2015-11-23 15:48:10 -0800981 mPingHostnameV4.setText(mPingHostnameResultV4);
982 mPingHostnameV6.setText(mPingHostnameResultV6);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800983 mHttpClientTest.setText(mHttpClientTestResult);
984 }
985 };
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800986
987 Thread hostname = new Thread() {
988 @Override
989 public void run() {
990 pingHostname();
Nathan Haroldcea413a2015-11-23 15:48:10 -0800991 mHandler.post(updatePingResults);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800992 }
993 };
994 hostname.start();
995
996 Thread httpClient = new Thread() {
997 @Override
998 public void run() {
999 httpClientTest();
Nathan Haroldcea413a2015-11-23 15:48:10 -08001000 mHandler.post(updatePingResults);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001001 }
1002 };
1003 httpClient.start();
1004 }
1005
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001006 private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
1007 public boolean onMenuItemClick(MenuItem item) {
1008 Intent intent = new Intent(Intent.ACTION_VIEW);
1009 // XXX We need to specify the component here because if we don't
1010 // the activity manager will try to resolve the type by calling
1011 // the content provider, which causes it to be loaded in a process
1012 // other than the Dialer process, which causes a lot of stuff to
1013 // break.
1014 intent.setClassName("com.android.phone",
1015 "com.android.phone.SimContacts");
1016 startActivity(intent);
1017 return true;
1018 }
1019 };
1020
1021 private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
1022 public boolean onMenuItemClick(MenuItem item) {
1023 Intent intent = new Intent(Intent.ACTION_VIEW);
1024 // XXX We need to specify the component here because if we don't
1025 // the activity manager will try to resolve the type by calling
1026 // the content provider, which causes it to be loaded in a process
1027 // other than the Dialer process, which causes a lot of stuff to
1028 // break.
1029 intent.setClassName("com.android.phone",
Andrew Leeda90d682014-10-31 13:12:20 -07001030 "com.android.phone.settings.fdn.FdnList");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001031 startActivity(intent);
1032 return true;
1033 }
1034 };
1035
1036 private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
1037 public boolean onMenuItemClick(MenuItem item) {
1038 Intent intent = new Intent(
Wink Savillec3886682009-04-02 11:00:56 -07001039 Intent.ACTION_VIEW, Uri.parse("content://icc/sdn"));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001040 // XXX We need to specify the component here because if we don't
1041 // the activity manager will try to resolve the type by calling
1042 // the content provider, which causes it to be loaded in a process
1043 // other than the Dialer process, which causes a lot of stuff to
1044 // break.
1045 intent.setClassName("com.android.phone",
1046 "com.android.phone.ADNList");
1047 startActivity(intent);
1048 return true;
1049 }
1050 };
1051
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001052 private MenuItem.OnMenuItemClickListener mGetPdpList = new MenuItem.OnMenuItemClickListener() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001053 public boolean onMenuItemClick(MenuItem item) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001054 //FIXME: Replace with a TelephonyManager call
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001055 phone.getDataCallList(null);
1056 return true;
1057 }
1058 };
1059
1060 private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
1061 public boolean onMenuItemClick(MenuItem item) {
1062 Intent intent = new Intent();
1063 intent.setClass(RadioInfo.this, BandMode.class);
1064 startActivity(intent);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001065 return true;
1066 }
1067 };
johnwang342101a2009-09-23 16:22:34 -07001068
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001069 private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
1070 public boolean onMenuItemClick(MenuItem item) {
1071 int state = mTelephonyManager.getDataState();
1072 switch (state) {
1073 case TelephonyManager.DATA_CONNECTED:
Nathan Haroldcea413a2015-11-23 15:48:10 -08001074 //FIXME: Replace with a TelephonyManager call
Robert Greenwalt0d4c5002014-05-21 20:02:32 -07001075 phone.setDataEnabled(false);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001076 break;
1077 case TelephonyManager.DATA_DISCONNECTED:
Nathan Haroldcea413a2015-11-23 15:48:10 -08001078 //FIXME: Replace with a TelephonyManager call
Robert Greenwalt0d4c5002014-05-21 20:02:32 -07001079 phone.setDataEnabled(true);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001080 break;
1081 default:
1082 // do nothing
1083 break;
1084 }
1085 return true;
1086 }
1087 };
1088
Nathan Harold2b77d742016-03-19 13:22:10 -07001089 private boolean isRadioOn() {
1090 //FIXME: Replace with a TelephonyManager call
1091 return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
1092 }
1093
1094 private void updateRadioPowerState() {
1095 //delightful hack to prevent on-checked-changed calls from
1096 //actually forcing the radio preference to its transient/current value.
1097 radioPowerOnSwitch.setOnCheckedChangeListener(null);
1098 radioPowerOnSwitch.setChecked(isRadioOn());
1099 radioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
1100 }
1101
1102 OnCheckedChangeListener mRadioPowerOnChangeListener = new OnCheckedChangeListener() {
1103 @Override
1104 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1105 log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
1106 phone.setRadioPower(isChecked);
1107 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001108 };
1109
Nathan Harold2b77d742016-03-19 13:22:10 -07001110 void setImsVoLteProvisionedState( boolean state ) {
1111 log(String.format("toggle VoLTE provisioned: %s", ((state) ? "on":"off")));
Wink Savillebf471282013-04-05 15:04:05 -07001112
Nathan Harold2b77d742016-03-19 13:22:10 -07001113 if (phone != null && mImsManager != null) {
1114 QueuedWork.singleThreadExecutor().submit(new Runnable() {
1115 public void run() {
1116 try {
1117 mImsManager.getConfigInterface().setProvisionedValue(
1118 ImsConfig.ConfigConstants.VLT_SETTING_ENABLED,
1119 state? 1 : 0);
1120 } catch (ImsException e) {
1121 Log.e(TAG, "setImsVoLteProvisioned() exception:", e);
1122 }
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -08001123 }
Nathan Harold2b77d742016-03-19 13:22:10 -07001124 });
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -08001125 }
Nathan Harold2b77d742016-03-19 13:22:10 -07001126 }
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -08001127
1128 private boolean isImsVoLteProvisioned() {
Nathan Harold2b77d742016-03-19 13:22:10 -07001129 if (phone != null && mImsManager != null) {
1130 return mImsManager.isVolteEnabledByPlatform(phone.getContext())
1131 && mImsManager.isVolteProvisionedOnDevice(phone.getContext());
Pavel Zhamaitsiakcb267a62015-01-21 18:25:14 -08001132 }
1133 return false;
1134 }
1135
Nathan Harold2b77d742016-03-19 13:22:10 -07001136 OnCheckedChangeListener mImsVoLteCheckedChangeListener = new OnCheckedChangeListener() {
Wink Saville426fc662011-09-25 14:39:02 -07001137 @Override
Nathan Harold2b77d742016-03-19 13:22:10 -07001138 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
1139 setImsVoLteProvisionedState(isChecked);
1140 }
Wink Saville426fc662011-09-25 14:39:02 -07001141 };
1142
Nathan Harold2b77d742016-03-19 13:22:10 -07001143 private void updateImsVoLteProvisionedState() {
1144 log("updateImsVoLteProvisionedState isImsVoLteProvisioned()=" + isImsVoLteProvisioned());
1145 //delightful hack to prevent on-checked-changed calls from
1146 //actually forcing the ims provisioning to its transient/current value.
1147 imsVoLteProvisionedSwitch.setOnCheckedChangeListener(null);
1148 imsVoLteProvisionedSwitch.setChecked(isImsVoLteProvisioned());
1149 imsVoLteProvisionedSwitch.setOnCheckedChangeListener(mImsVoLteCheckedChangeListener);
Wink Saville426fc662011-09-25 14:39:02 -07001150 }
1151
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001152 OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
1153 public void onClick(View v) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001154 //FIXME: Replace with a TelephonyManager call
Wink Savillec3886682009-04-02 11:00:56 -07001155 phone.disableDnsCheck(!phone.isDnsCheckDisabled());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001156 updateDnsCheckState();
1157 }
1158 };
johnwang342101a2009-09-23 16:22:34 -07001159
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001160 OnClickListener mOemInfoButtonHandler = new OnClickListener() {
1161 public void onClick(View v) {
1162 Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
1163 try {
1164 startActivity(intent);
1165 } catch (android.content.ActivityNotFoundException ex) {
Wink Savillebf471282013-04-05 15:04:05 -07001166 log("OEM-specific Info/Settings Activity Not Found : " + ex);
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001167 // If the activity does not exist, there are no OEM
1168 // settings, and so we can just do nothing...
1169 }
1170 }
1171 };
1172
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001173 OnClickListener mPingButtonHandler = new OnClickListener() {
1174 public void onClick(View v) {
1175 updatePingState();
1176 }
1177 };
1178
1179 OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
1180 public void onClick(View v) {
1181 updateSmscButton.setEnabled(false);
jsh21dd4072009-05-12 11:26:55 -07001182 phone.setSmscAddress(smsc.getText().toString(),
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001183 mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
1184 }
1185 };
1186
1187 OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
1188 public void onClick(View v) {
1189 refreshSmsc();
1190 }
1191 };
1192
Nathan Haroldcea413a2015-11-23 15:48:10 -08001193 AdapterView.OnItemSelectedListener mPreferredNetworkHandler =
1194 new AdapterView.OnItemSelectedListener() {
1195
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001196 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
Nathan Haroldcea413a2015-11-23 15:48:10 -08001197 if (mPreferredNetworkTypeResult != pos && pos >= 0
1198 && pos <= mPreferredNetworkLabels.length - 2) {
1199 mPreferredNetworkTypeResult = pos;
1200 Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
1201 phone.setPreferredNetworkType(mPreferredNetworkTypeResult, msg);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001202 }
1203 }
1204
1205 public void onNothingSelected(AdapterView parent) {
1206 }
1207 };
1208
Nathan Harold2b77d742016-03-19 13:22:10 -07001209 AdapterView.OnItemSelectedListener mCellInfoRefreshRateHandler =
1210 new AdapterView.OnItemSelectedListener() {
Wink Savillebf471282013-04-05 15:04:05 -07001211
Nathan Harold2b77d742016-03-19 13:22:10 -07001212 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1213 mCellInfoRefreshRateIndex = pos;
1214 phone.setCellInfoListRate(mCellInfoRefreshRates[pos]);
1215 updateAllCellInfo();
1216 }
1217
1218 public void onNothingSelected(AdapterView parent) {
1219 }
1220 };
1221
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001222}