blob: 2055af01ef1c12be1c7e42bb4c19462118e9da73 [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;
Robert Greenwalt99be5002010-11-24 17:20:59 -080020import android.content.Context;
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;
Robert Greenwalt99be5002010-11-24 17:20:59 -080025import android.net.ConnectivityManager;
Robert Greenwaltae04c1a2010-08-30 15:33:28 -070026import android.net.LinkProperties;
Jeff Sharkey93029862011-05-27 18:26:15 -070027import android.net.TrafficStats;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080028import android.net.Uri;
29import android.os.AsyncResult;
30import android.os.Bundle;
31import android.os.Handler;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080032import android.os.Message;
33import android.os.RemoteException;
34import android.os.ServiceManager;
35import android.os.SystemProperties;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080036import android.telephony.CellLocation;
37import android.telephony.PhoneStateListener;
38import android.telephony.ServiceState;
39import android.telephony.TelephonyManager;
40import android.telephony.NeighboringCellInfo;
jsh534f5ae2009-09-24 09:19:22 -070041import android.telephony.cdma.CdmaCellLocation;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080042import android.telephony.gsm.GsmCellLocation;
43import android.text.format.DateUtils;
44import android.util.Log;
45import android.view.Menu;
46import android.view.MenuItem;
47import android.view.View;
48import android.view.View.OnClickListener;
49import android.widget.AdapterView;
50import android.widget.ArrayAdapter;
51import android.widget.Button;
52import android.widget.Spinner;
53import android.widget.TextView;
54import android.widget.EditText;
55
jsh87fa11b2009-08-18 18:00:15 -070056import com.android.internal.telephony.DataConnection;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080057import com.android.internal.telephony.Phone;
58import com.android.internal.telephony.PhoneFactory;
59import com.android.internal.telephony.PhoneStateIntentReceiver;
60import com.android.internal.telephony.TelephonyProperties;
Wink Saville0d936972009-12-22 14:36:47 -080061import com.android.internal.telephony.gsm.GsmDataConnection;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080062
63import org.apache.http.HttpResponse;
64import org.apache.http.client.HttpClient;
65import org.apache.http.client.methods.HttpGet;
66import org.apache.http.impl.client.DefaultHttpClient;
67
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080068import java.io.IOException;
Wink Savillea9f16372010-08-27 13:53:26 -070069import java.net.InetAddress;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080070import java.net.UnknownHostException;
71import java.util.ArrayList;
72import java.util.List;
73
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +080074import android.util.Log;
75
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080076public class RadioInfo extends Activity {
77 private final String TAG = "phone";
johnwang342101a2009-09-23 16:22:34 -070078
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080079 private static final int EVENT_PHONE_STATE_CHANGED = 100;
80 private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 200;
81 private static final int EVENT_SERVICE_STATE_CHANGED = 300;
82 private static final int EVENT_CFI_CHANGED = 302;
83
84 private static final int EVENT_QUERY_PREFERRED_TYPE_DONE = 1000;
85 private static final int EVENT_SET_PREFERRED_TYPE_DONE = 1001;
86 private static final int EVENT_QUERY_NEIGHBORING_CIDS_DONE = 1002;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080087 private static final int EVENT_QUERY_SMSC_DONE = 1005;
88 private static final int EVENT_UPDATE_SMSC_DONE = 1006;
89
90 private static final int MENU_ITEM_SELECT_BAND = 0;
91 private static final int MENU_ITEM_VIEW_ADN = 1;
92 private static final int MENU_ITEM_VIEW_FDN = 2;
93 private static final int MENU_ITEM_VIEW_SDN = 3;
94 private static final int MENU_ITEM_GET_PDP_LIST = 4;
95 private static final int MENU_ITEM_TOGGLE_DATA = 5;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +080096
97 static final String ENABLE_DATA_STR = "Enable data connection";
98 static final String DISABLE_DATA_STR = "Disable data connection";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080099
Wink Savillec3886682009-04-02 11:00:56 -0700100 private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800101 private TextView number;
102 private TextView callState;
103 private TextView operatorName;
104 private TextView roamingState;
105 private TextView gsmState;
106 private TextView gprsState;
107 private TextView network;
108 private TextView dBm;
109 private TextView mMwi;
110 private TextView mCfi;
111 private TextView mLocation;
112 private TextView mNeighboringCids;
113 private TextView resets;
114 private TextView attempts;
115 private TextView successes;
116 private TextView disconnects;
117 private TextView sentSinceReceived;
118 private TextView sent;
119 private TextView received;
120 private TextView mPingIpAddr;
121 private TextView mPingHostname;
122 private TextView mHttpClientTest;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800123 private TextView dnsCheckState;
124 private EditText smsc;
125 private Button radioPowerButton;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800126 private Button dnsCheckToggleButton;
127 private Button pingTestButton;
128 private Button updateSmscButton;
129 private Button refreshSmscButton;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800130 private Button oemInfoButton;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800131 private Spinner preferredNetworkType;
132
133 private TelephonyManager mTelephonyManager;
134 private Phone phone = null;
135 private PhoneStateIntentReceiver mPhoneStateReceiver;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800136
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800137 private String mPingIpAddrResult;
138 private String mPingHostnameResult;
139 private String mHttpClientTestResult;
140 private boolean mMwiValue = false;
141 private boolean mCfiValue = false;
142
143 private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
144 @Override
145 public void onDataConnectionStateChanged(int state) {
146 updateDataState();
147 updateDataStats();
148 updatePdpList();
149 updateNetworkType();
150 }
151
152 @Override
153 public void onDataActivity(int direction) {
154 updateDataStats2();
155 }
156
157 @Override
158 public void onCellLocationChanged(CellLocation location) {
159 updateLocation(location);
160 }
161
162 @Override
163 public void onMessageWaitingIndicatorChanged(boolean mwi) {
164 mMwiValue = mwi;
165 updateMessageWaiting();
166 }
167
168 @Override
169 public void onCallForwardingIndicatorChanged(boolean cfi) {
170 mCfiValue = cfi;
171 updateCallRedirect();
172 }
173 };
174
175 private Handler mHandler = new Handler() {
176 public void handleMessage(Message msg) {
177 AsyncResult ar;
178 switch (msg.what) {
179 case EVENT_PHONE_STATE_CHANGED:
180 updatePhoneState();
181 break;
182
183 case EVENT_SIGNAL_STRENGTH_CHANGED:
184 updateSignalStrength();
185 break;
186
187 case EVENT_SERVICE_STATE_CHANGED:
188 updateServiceState();
189 updatePowerState();
190 break;
191
192 case EVENT_QUERY_PREFERRED_TYPE_DONE:
193 ar= (AsyncResult) msg.obj;
194 if (ar.exception == null) {
195 int type = ((int[])ar.result)[0];
Ricardo Cerqueira32310ee2012-04-12 23:34:38 +0100196 if (type >= mPreferredNetworkLabels.length) {
197 Log.e(TAG, "[RadioInfo] EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
198 "type=" + type);
199 type = mPreferredNetworkLabels.length - 1;
200 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800201 preferredNetworkType.setSelection(type, true);
202 } else {
Ricardo Cerqueira32310ee2012-04-12 23:34:38 +0100203 preferredNetworkType.setSelection(mPreferredNetworkLabels.length - 1, true);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800204 }
205 break;
206 case EVENT_SET_PREFERRED_TYPE_DONE:
207 ar= (AsyncResult) msg.obj;
208 if (ar.exception != null) {
209 phone.getPreferredNetworkType(
210 obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
211 }
212 break;
213 case EVENT_QUERY_NEIGHBORING_CIDS_DONE:
214 ar= (AsyncResult) msg.obj;
215 if (ar.exception == null) {
216 updateNeighboringCids((ArrayList<NeighboringCellInfo>)ar.result);
217 } else {
218 mNeighboringCids.setText("unknown");
219 }
220 break;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800221 case EVENT_QUERY_SMSC_DONE:
222 ar= (AsyncResult) msg.obj;
223 if (ar.exception != null) {
224 smsc.setText("refresh error");
225 } else {
jsh21dd4072009-05-12 11:26:55 -0700226 smsc.setText((String)ar.result);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800227 }
228 break;
229 case EVENT_UPDATE_SMSC_DONE:
230 updateSmscButton.setEnabled(true);
231 ar= (AsyncResult) msg.obj;
232 if (ar.exception != null) {
233 smsc.setText("update error");
234 }
235 break;
236 default:
237 break;
238
239 }
240 }
241 };
242
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800243 @Override
244 public void onCreate(Bundle icicle) {
245 super.onCreate(icicle);
246
247 setContentView(R.layout.radio_info);
248
249 mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
250 phone = PhoneFactory.getDefaultPhone();
251
Wink Savillec3886682009-04-02 11:00:56 -0700252 mDeviceId= (TextView) findViewById(R.id.imei);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800253 number = (TextView) findViewById(R.id.number);
254 callState = (TextView) findViewById(R.id.call);
255 operatorName = (TextView) findViewById(R.id.operator);
256 roamingState = (TextView) findViewById(R.id.roaming);
257 gsmState = (TextView) findViewById(R.id.gsm);
258 gprsState = (TextView) findViewById(R.id.gprs);
259 network = (TextView) findViewById(R.id.network);
260 dBm = (TextView) findViewById(R.id.dbm);
261 mMwi = (TextView) findViewById(R.id.mwi);
262 mCfi = (TextView) findViewById(R.id.cfi);
263 mLocation = (TextView) findViewById(R.id.location);
264 mNeighboringCids = (TextView) findViewById(R.id.neighboring);
265
266 resets = (TextView) findViewById(R.id.resets);
267 attempts = (TextView) findViewById(R.id.attempts);
268 successes = (TextView) findViewById(R.id.successes);
269 disconnects = (TextView) findViewById(R.id.disconnects);
270 sentSinceReceived = (TextView) findViewById(R.id.sentSinceReceived);
271 sent = (TextView) findViewById(R.id.sent);
272 received = (TextView) findViewById(R.id.received);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800273 smsc = (EditText) findViewById(R.id.smsc);
274 dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
275
276 mPingIpAddr = (TextView) findViewById(R.id.pingIpAddr);
277 mPingHostname = (TextView) findViewById(R.id.pingHostname);
278 mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
279
280 preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
281 ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
282 android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
johnwang342101a2009-09-23 16:22:34 -0700283 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800284 preferredNetworkType.setAdapter(adapter);
285 preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
286
287 radioPowerButton = (Button) findViewById(R.id.radio_power);
288 radioPowerButton.setOnClickListener(mPowerButtonHandler);
289
Wink Saville1e596f32011-09-19 14:24:39 -0700290 imsRegRequiredButton = (Button) findViewById(R.id.ims_reg_required);
291 imsRegRequiredButton.setOnClickListener(mImsRegRequiredHandler);
292
Wink Saville382a75b2011-09-22 15:17:00 -0700293 smsOverImsButton = (Button) findViewById(R.id.sms_over_ims);
294 smsOverImsButton.setOnClickListener(mSmsOverImsHandler);
295
Wink Saville426fc662011-09-25 14:39:02 -0700296 lteRamDumpButton = (Button) findViewById(R.id.lte_ram_dump);
297 lteRamDumpButton.setOnClickListener(mLteRamDumpHandler);
298
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800299 pingTestButton = (Button) findViewById(R.id.ping_test);
300 pingTestButton.setOnClickListener(mPingButtonHandler);
301 updateSmscButton = (Button) findViewById(R.id.update_smsc);
302 updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
303 refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
304 refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
305 dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
306 dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
johnwang342101a2009-09-23 16:22:34 -0700307
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800308 oemInfoButton = (Button) findViewById(R.id.oem_info);
309 oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
310 PackageManager pm = getPackageManager();
311 Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
312 List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
313 if (oemInfoIntentList.size() == 0) {
314 oemInfoButton.setEnabled(false);
315 }
316
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800317 mPhoneStateReceiver = new PhoneStateIntentReceiver(this, mHandler);
318 mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED);
319 mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED);
320 mPhoneStateReceiver.notifyPhoneCallState(EVENT_PHONE_STATE_CHANGED);
johnwang342101a2009-09-23 16:22:34 -0700321
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800322 phone.getPreferredNetworkType(
323 mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
324 phone.getNeighboringCids(
325 mHandler.obtainMessage(EVENT_QUERY_NEIGHBORING_CIDS_DONE));
326
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800327 CellLocation.requestLocationUpdate();
328 }
329
330 @Override
331 protected void onResume() {
332 super.onResume();
333
334 updatePhoneState();
335 updateSignalStrength();
336 updateMessageWaiting();
337 updateCallRedirect();
338 updateServiceState();
339 updateLocation(mTelephonyManager.getCellLocation());
340 updateDataState();
341 updateDataStats();
342 updateDataStats2();
343 updatePowerState();
Wink Saville1e596f32011-09-19 14:24:39 -0700344 updateImsRegRequiredState();
Wink Saville382a75b2011-09-22 15:17:00 -0700345 updateSmsOverImsState();
Wink Saville426fc662011-09-25 14:39:02 -0700346 updateLteRamDumpState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800347 updateProperties();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800348 updateDnsCheckState();
349
350 Log.i(TAG, "[RadioInfo] onResume: register phone & data intents");
351
352 mPhoneStateReceiver.registerIntent();
353 mTelephonyManager.listen(mPhoneStateListener,
354 PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
355 | PhoneStateListener.LISTEN_DATA_ACTIVITY
356 | PhoneStateListener.LISTEN_CELL_LOCATION
357 | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
358 | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR);
359 }
360
361 @Override
362 public void onPause() {
363 super.onPause();
364
365 Log.i(TAG, "[RadioInfo] onPause: unregister phone & data intents");
366
367 mPhoneStateReceiver.unregisterIntent();
368 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
369 }
370
371 @Override
372 public boolean onCreateOptionsMenu(Menu menu) {
Wink Savillec3886682009-04-02 11:00:56 -0700373 menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label)
374 .setOnMenuItemClickListener(mSelectBandCallback)
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800375 .setAlphabeticShortcut('b');
376 menu.add(1, MENU_ITEM_VIEW_ADN, 0,
377 R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
378 menu.add(1, MENU_ITEM_VIEW_FDN, 0,
379 R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
380 menu.add(1, MENU_ITEM_VIEW_SDN, 0,
381 R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
382 menu.add(1, MENU_ITEM_GET_PDP_LIST,
383 0, R.string.radioInfo_menu_getPDP).setOnMenuItemClickListener(mGetPdpList);
384 menu.add(1, MENU_ITEM_TOGGLE_DATA,
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800385 0, DISABLE_DATA_STR).setOnMenuItemClickListener(mToggleData);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800386 return true;
387 }
388
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800389 @Override
Wink Savillec3886682009-04-02 11:00:56 -0700390 public boolean onPrepareOptionsMenu(Menu menu) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800391 // Get the TOGGLE DATA menu item in the right state.
392 MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
393 int state = mTelephonyManager.getDataState();
394 boolean visible = true;
395
396 switch (state) {
397 case TelephonyManager.DATA_CONNECTED:
398 case TelephonyManager.DATA_SUSPENDED:
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800399 item.setTitle(DISABLE_DATA_STR);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800400 break;
401 case TelephonyManager.DATA_DISCONNECTED:
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800402 item.setTitle(ENABLE_DATA_STR);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800403 break;
404 default:
405 visible = false;
406 break;
407 }
408 item.setVisible(visible);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800409 return true;
410 }
411
412 private boolean isRadioOn() {
413 return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
414 }
johnwang342101a2009-09-23 16:22:34 -0700415
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800416 private void updatePowerState() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800417 String buttonText = isRadioOn() ?
418 getString(R.string.turn_off_radio) :
419 getString(R.string.turn_on_radio);
Wink Savillec3886682009-04-02 11:00:56 -0700420 radioPowerButton.setText(buttonText);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800421 }
422
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800423 private void updateDnsCheckState() {
Mike Lockwood5304c7e2009-04-05 11:37:45 -0700424 dnsCheckState.setText(phone.isDnsCheckDisabled() ?
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800425 "0.0.0.0 allowed" :"0.0.0.0 not allowed");
426 }
Wink Savillee2a14e32009-05-29 14:06:30 -0700427
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800428 private final void
429 updateSignalStrength() {
Wink Savillee2a14e32009-05-29 14:06:30 -0700430 // TODO PhoneStateIntentReceiver is deprecated and PhoneStateListener
431 // should probably used instead.
432 int state = mPhoneStateReceiver.getServiceState().getState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800433 Resources r = getResources();
434
435 if ((ServiceState.STATE_OUT_OF_SERVICE == state) ||
436 (ServiceState.STATE_POWER_OFF == state)) {
437 dBm.setText("0");
438 }
Wink Savillee2a14e32009-05-29 14:06:30 -0700439
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800440 int signalDbm = mPhoneStateReceiver.getSignalStrengthDbm();
Wink Savillee2a14e32009-05-29 14:06:30 -0700441
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800442 if (-1 == signalDbm) signalDbm = 0;
443
Wink Saville882c74a2011-02-17 12:00:03 -0800444 int signalAsu = mPhoneStateReceiver.getSignalStrengthLevelAsu();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800445
446 if (-1 == signalAsu) signalAsu = 0;
447
448 dBm.setText(String.valueOf(signalDbm) + " "
449 + r.getString(R.string.radioInfo_display_dbm) + " "
450 + String.valueOf(signalAsu) + " "
451 + r.getString(R.string.radioInfo_display_asu));
452 }
453
454 private final void updateLocation(CellLocation location) {
jsh534f5ae2009-09-24 09:19:22 -0700455 Resources r = getResources();
Wink Savillec3886682009-04-02 11:00:56 -0700456 if (location instanceof GsmCellLocation) {
457 GsmCellLocation loc = (GsmCellLocation)location;
jsh534f5ae2009-09-24 09:19:22 -0700458 int lac = loc.getLac();
459 int cid = loc.getCid();
460 mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
461 + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
462 + " "
463 + r.getString(R.string.radioInfo_cid) + " = "
464 + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
465 } else if (location instanceof CdmaCellLocation) {
466 CdmaCellLocation loc = (CdmaCellLocation)location;
467 int bid = loc.getBaseStationId();
468 int sid = loc.getSystemId();
469 int nid = loc.getNetworkId();
470 int lat = loc.getBaseStationLatitude();
471 int lon = loc.getBaseStationLongitude();
472 mLocation.setText("BID = "
473 + ((bid == -1) ? "unknown" : Integer.toHexString(bid))
474 + " "
475 + "SID = "
476 + ((sid == -1) ? "unknown" : Integer.toHexString(sid))
477 + " "
478 + "NID = "
479 + ((nid == -1) ? "unknown" : Integer.toHexString(nid))
480 + "\n"
481 + "LAT = "
482 + ((lat == -1) ? "unknown" : Integer.toHexString(lat))
483 + " "
484 + "LONG = "
485 + ((lon == -1) ? "unknown" : Integer.toHexString(lon)));
486 } else {
487 mLocation.setText("unknown");
Wink Savillec3886682009-04-02 11:00:56 -0700488 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800489
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800490
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800491 }
492
493 private final void updateNeighboringCids(ArrayList<NeighboringCellInfo> cids) {
johnwangf02c65f2009-09-25 17:26:54 -0700494 StringBuilder sb = new StringBuilder();
495
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800496 if (cids != null) {
497 if ( cids.isEmpty() ) {
johnwangf02c65f2009-09-25 17:26:54 -0700498 sb.append("no neighboring cells");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800499 } else {
500 for (NeighboringCellInfo cell : cids) {
johnwangf02c65f2009-09-25 17:26:54 -0700501 sb.append(cell.toString()).append(" ");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800502 }
503 }
504 } else {
johnwangf02c65f2009-09-25 17:26:54 -0700505 sb.append("unknown");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800506 }
johnwangf02c65f2009-09-25 17:26:54 -0700507 mNeighboringCids.setText(sb.toString());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800508 }
509
510 private final void
511 updateMessageWaiting() {
512 mMwi.setText(String.valueOf(mMwiValue));
513 }
514
515 private final void
516 updateCallRedirect() {
517 mCfi.setText(String.valueOf(mCfiValue));
518 }
519
520
521 private final void
522 updateServiceState() {
523 ServiceState serviceState = mPhoneStateReceiver.getServiceState();
524 int state = serviceState.getState();
525 Resources r = getResources();
526 String display = r.getString(R.string.radioInfo_unknown);
johnwang342101a2009-09-23 16:22:34 -0700527
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800528 switch (state) {
529 case ServiceState.STATE_IN_SERVICE:
530 display = r.getString(R.string.radioInfo_service_in);
531 break;
532 case ServiceState.STATE_OUT_OF_SERVICE:
533 case ServiceState.STATE_EMERGENCY_ONLY:
534 display = r.getString(R.string.radioInfo_service_emergency);
535 break;
536 case ServiceState.STATE_POWER_OFF:
537 display = r.getString(R.string.radioInfo_service_off);
538 break;
539 }
johnwang342101a2009-09-23 16:22:34 -0700540
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800541 gsmState.setText(display);
johnwang342101a2009-09-23 16:22:34 -0700542
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800543 if (serviceState.getRoaming()) {
544 roamingState.setText(R.string.radioInfo_roaming_in);
545 } else {
546 roamingState.setText(R.string.radioInfo_roaming_not);
547 }
548
549 operatorName.setText(serviceState.getOperatorAlphaLong());
550 }
551
552 private final void
553 updatePhoneState() {
554 Phone.State state = mPhoneStateReceiver.getPhoneState();
555 Resources r = getResources();
556 String display = r.getString(R.string.radioInfo_unknown);
557
558 switch (state) {
559 case IDLE:
560 display = r.getString(R.string.radioInfo_phone_idle);
561 break;
562 case RINGING:
563 display = r.getString(R.string.radioInfo_phone_ringing);
564 break;
565 case OFFHOOK:
566 display = r.getString(R.string.radioInfo_phone_offhook);
567 break;
568 }
569
570 callState.setText(display);
571 }
572
573 private final void
574 updateDataState() {
575 int state = mTelephonyManager.getDataState();
576 Resources r = getResources();
577 String display = r.getString(R.string.radioInfo_unknown);
578
579 switch (state) {
580 case TelephonyManager.DATA_CONNECTED:
581 display = r.getString(R.string.radioInfo_data_connected);
582 break;
583 case TelephonyManager.DATA_CONNECTING:
584 display = r.getString(R.string.radioInfo_data_connecting);
585 break;
586 case TelephonyManager.DATA_DISCONNECTED:
587 display = r.getString(R.string.radioInfo_data_disconnected);
588 break;
589 case TelephonyManager.DATA_SUSPENDED:
590 display = r.getString(R.string.radioInfo_data_suspended);
591 break;
592 }
johnwang342101a2009-09-23 16:22:34 -0700593
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800594 gprsState.setText(display);
595 }
596
597 private final void updateNetworkType() {
598 Resources r = getResources();
599 String display = SystemProperties.get(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
600 r.getString(R.string.radioInfo_unknown));
601
602 network.setText(display);
603 }
604
605 private final void
606 updateProperties() {
607 String s;
608 Resources r = getResources();
609
610 s = phone.getDeviceId();
johnwang342101a2009-09-23 16:22:34 -0700611 if (s == null) s = r.getString(R.string.radioInfo_unknown);
Wink Savillec3886682009-04-02 11:00:56 -0700612 mDeviceId.setText(s);
johnwang342101a2009-09-23 16:22:34 -0700613
Wink Savillec3886682009-04-02 11:00:56 -0700614
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800615 s = phone.getLine1Number();
johnwang342101a2009-09-23 16:22:34 -0700616 if (s == null) s = r.getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800617 number.setText(s);
618 }
619
620 private final void updateDataStats() {
621 String s;
622
623 s = SystemProperties.get("net.gsm.radio-reset", "0");
624 resets.setText(s);
625
626 s = SystemProperties.get("net.gsm.attempt-gprs", "0");
627 attempts.setText(s);
628
629 s = SystemProperties.get("net.gsm.succeed-gprs", "0");
630 successes.setText(s);
631
632 //s = SystemProperties.get("net.gsm.disconnect", "0");
633 //disconnects.setText(s);
634
635 s = SystemProperties.get("net.ppp.reset-by-timeout", "0");
636 sentSinceReceived.setText(s);
637 }
638
639 private final void updateDataStats2() {
640 Resources r = getResources();
641
Jeff Sharkey93029862011-05-27 18:26:15 -0700642 long txPackets = TrafficStats.getMobileTxPackets();
643 long rxPackets = TrafficStats.getMobileRxPackets();
644 long txBytes = TrafficStats.getMobileTxBytes();
645 long rxBytes = TrafficStats.getMobileRxBytes();
johnwang342101a2009-09-23 16:22:34 -0700646
Jeff Sharkey93029862011-05-27 18:26:15 -0700647 String packets = r.getString(R.string.radioInfo_display_packets);
648 String bytes = r.getString(R.string.radioInfo_display_bytes);
johnwang342101a2009-09-23 16:22:34 -0700649
Jeff Sharkey93029862011-05-27 18:26:15 -0700650 sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
651 received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800652 }
653
654 /**
655 * Ping a IP address.
656 */
657 private final void pingIpAddr() {
658 try {
659 // This is hardcoded IP addr. This is for testing purposes.
660 // We would need to get rid of this before release.
661 String ipAddress = "74.125.47.104";
662 Process p = Runtime.getRuntime().exec("ping -c 1 " + ipAddress);
663 int status = p.waitFor();
664 if (status == 0) {
665 mPingIpAddrResult = "Pass";
666 } else {
667 mPingIpAddrResult = "Fail: IP addr not reachable";
668 }
669 } catch (IOException e) {
670 mPingIpAddrResult = "Fail: IOException";
671 } catch (InterruptedException e) {
672 mPingIpAddrResult = "Fail: InterruptedException";
673 }
674 }
675
676 /**
677 * Ping a host name
678 */
679 private final void pingHostname() {
680 try {
johnwang342101a2009-09-23 16:22:34 -0700681 Process p = Runtime.getRuntime().exec("ping -c 1 www.google.com");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800682 int status = p.waitFor();
683 if (status == 0) {
684 mPingHostnameResult = "Pass";
685 } else {
686 mPingHostnameResult = "Fail: Host unreachable";
687 }
688 } catch (UnknownHostException e) {
689 mPingHostnameResult = "Fail: Unknown Host";
690 } catch (IOException e) {
691 mPingHostnameResult= "Fail: IOException";
692 } catch (InterruptedException e) {
693 mPingHostnameResult = "Fail: InterruptedException";
694 }
695 }
696
697 /**
698 * This function checks for basic functionality of HTTP Client.
699 */
700 private void httpClientTest() {
701 HttpClient client = new DefaultHttpClient();
702 try {
703 HttpGet request = new HttpGet("http://www.google.com");
704 HttpResponse response = client.execute(request);
705 if (response.getStatusLine().getStatusCode() == 200) {
706 mHttpClientTestResult = "Pass";
707 } else {
708 mHttpClientTestResult = "Fail: Code: " + String.valueOf(response);
709 }
710 request.abort();
711 } catch (IOException e) {
712 mHttpClientTestResult = "Fail: IOException";
713 }
714 }
715
716 private void refreshSmsc() {
jsh21dd4072009-05-12 11:26:55 -0700717 phone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800718 }
719
720 private final void updatePingState() {
721 final Handler handler = new Handler();
722 // Set all to unknown since the threads will take a few secs to update.
723 mPingIpAddrResult = getResources().getString(R.string.radioInfo_unknown);
724 mPingHostnameResult = getResources().getString(R.string.radioInfo_unknown);
725 mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
726
727 mPingIpAddr.setText(mPingIpAddrResult);
728 mPingHostname.setText(mPingHostnameResult);
729 mHttpClientTest.setText(mHttpClientTestResult);
730
731 final Runnable updatePingResults = new Runnable() {
732 public void run() {
733 mPingIpAddr.setText(mPingIpAddrResult);
734 mPingHostname.setText(mPingHostnameResult);
735 mHttpClientTest.setText(mHttpClientTestResult);
736 }
737 };
738 Thread ipAddr = new Thread() {
739 @Override
740 public void run() {
741 pingIpAddr();
742 handler.post(updatePingResults);
743 }
744 };
745 ipAddr.start();
746
747 Thread hostname = new Thread() {
748 @Override
749 public void run() {
750 pingHostname();
751 handler.post(updatePingResults);
752 }
753 };
754 hostname.start();
755
756 Thread httpClient = new Thread() {
757 @Override
758 public void run() {
759 httpClientTest();
760 handler.post(updatePingResults);
761 }
762 };
763 httpClient.start();
764 }
765
766 private final void updatePdpList() {
767 StringBuilder sb = new StringBuilder("========DATA=======\n");
768
Wink Saville2c3ec092011-04-20 10:24:36 -0700769// List<DataConnection> dcs = phone.getCurrentDataConnectionList();
770//
771// for (DataConnection dc : dcs) {
772// sb.append(" State=").append(dc.getStateAsString()).append("\n");
773// if (dc.isActive()) {
774// long timeElapsed =
775// (System.currentTimeMillis() - dc.getConnectionTime())/1000;
776// sb.append(" connected at ")
777// .append(DateUtils.timeString(dc.getConnectionTime()))
778// .append(" and elapsed ")
779// .append(DateUtils.formatElapsedTime(timeElapsed));
780//
781// if (dc instanceof GsmDataConnection) {
782// GsmDataConnection pdp = (GsmDataConnection)dc;
783// sb.append("\n to ")
784// .append(pdp.getApn().toString());
785// }
786// sb.append("\nLinkProperties: ");
787// sb.append(phone.getLinkProperties(phone.getActiveApnTypes()[0]).toString());
788// } else if (dc.isInactive()) {
789// sb.append(" disconnected with last try at ")
790// .append(DateUtils.timeString(dc.getLastFailTime()))
791// .append("\n fail because ")
792// .append(dc.getLastFailCause().toString());
793// } else {
794// if (dc instanceof GsmDataConnection) {
795// GsmDataConnection pdp = (GsmDataConnection)dc;
796// sb.append(" is connecting to ")
797// .append(pdp.getApn().toString());
798// } else {
799// sb.append(" is connecting");
800// }
801// }
802// sb.append("\n===================");
803// }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800804
805 disconnects.setText(sb.toString());
806 }
807
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800808 private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
809 public boolean onMenuItemClick(MenuItem item) {
810 Intent intent = new Intent(Intent.ACTION_VIEW);
811 // XXX We need to specify the component here because if we don't
812 // the activity manager will try to resolve the type by calling
813 // the content provider, which causes it to be loaded in a process
814 // other than the Dialer process, which causes a lot of stuff to
815 // break.
816 intent.setClassName("com.android.phone",
817 "com.android.phone.SimContacts");
818 startActivity(intent);
819 return true;
820 }
821 };
822
823 private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
824 public boolean onMenuItemClick(MenuItem item) {
825 Intent intent = new Intent(Intent.ACTION_VIEW);
826 // XXX We need to specify the component here because if we don't
827 // the activity manager will try to resolve the type by calling
828 // the content provider, which causes it to be loaded in a process
829 // other than the Dialer process, which causes a lot of stuff to
830 // break.
831 intent.setClassName("com.android.phone",
832 "com.android.phone.FdnList");
833 startActivity(intent);
834 return true;
835 }
836 };
837
838 private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
839 public boolean onMenuItemClick(MenuItem item) {
840 Intent intent = new Intent(
Wink Savillec3886682009-04-02 11:00:56 -0700841 Intent.ACTION_VIEW, Uri.parse("content://icc/sdn"));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800842 // XXX We need to specify the component here because if we don't
843 // the activity manager will try to resolve the type by calling
844 // the content provider, which causes it to be loaded in a process
845 // other than the Dialer process, which causes a lot of stuff to
846 // break.
847 intent.setClassName("com.android.phone",
848 "com.android.phone.ADNList");
849 startActivity(intent);
850 return true;
851 }
852 };
853
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800854 private MenuItem.OnMenuItemClickListener mGetPdpList = new MenuItem.OnMenuItemClickListener() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800855 public boolean onMenuItemClick(MenuItem item) {
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800856 phone.getDataCallList(null);
857 return true;
858 }
859 };
860
861 private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
862 public boolean onMenuItemClick(MenuItem item) {
863 Intent intent = new Intent();
864 intent.setClass(RadioInfo.this, BandMode.class);
865 startActivity(intent);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800866 return true;
867 }
868 };
johnwang342101a2009-09-23 16:22:34 -0700869
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800870 private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
871 public boolean onMenuItemClick(MenuItem item) {
Robert Greenwalt99be5002010-11-24 17:20:59 -0800872 ConnectivityManager cm =
873 (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800874 int state = mTelephonyManager.getDataState();
875 switch (state) {
876 case TelephonyManager.DATA_CONNECTED:
Robert Greenwalt99be5002010-11-24 17:20:59 -0800877 cm.setMobileDataEnabled(false);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800878 break;
879 case TelephonyManager.DATA_DISCONNECTED:
Robert Greenwalt99be5002010-11-24 17:20:59 -0800880 cm.setMobileDataEnabled(true);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800881 break;
882 default:
883 // do nothing
884 break;
885 }
886 return true;
887 }
888 };
889
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800890 OnClickListener mPowerButtonHandler = new OnClickListener() {
891 public void onClick(View v) {
892 //log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
893 phone.setRadioPower(!isRadioOn());
894 }
895 };
896
Wink Saville426fc662011-09-25 14:39:02 -0700897 private Button imsRegRequiredButton;
898 static final String PROPERTY_IMS_REG_REQUIRED = "persist.radio.imsregrequired";
Wink Saville1e596f32011-09-19 14:24:39 -0700899 OnClickListener mImsRegRequiredHandler = new OnClickListener() {
900 @Override
901 public void onClick(View v) {
902 Log.d(TAG, String.format("toggle %s: currently %s",
Wink Saville426fc662011-09-25 14:39:02 -0700903 PROPERTY_IMS_REG_REQUIRED, (isImsRegRequired() ? "on":"off")));
Wink Saville1e596f32011-09-19 14:24:39 -0700904 boolean newValue = !isImsRegRequired();
Wink Saville426fc662011-09-25 14:39:02 -0700905 SystemProperties.set(PROPERTY_IMS_REG_REQUIRED,
Wink Saville1e596f32011-09-19 14:24:39 -0700906 newValue ? "1":"0");
907 updateImsRegRequiredState();
908 }
909 };
910
Wink Saville426fc662011-09-25 14:39:02 -0700911 private boolean isImsRegRequired() {
912 return SystemProperties.getBoolean(PROPERTY_IMS_REG_REQUIRED, false);
913 }
914
915 private void updateImsRegRequiredState() {
916 Log.d(TAG, "updateImsRegRequiredState isImsRegRequired()=" + isImsRegRequired());
917 String buttonText = isImsRegRequired() ?
918 getString(R.string.ims_reg_required_off) :
919 getString(R.string.ims_reg_required_on);
920 imsRegRequiredButton.setText(buttonText);
921 }
922
923 private Button smsOverImsButton;
Wink Saville382a75b2011-09-22 15:17:00 -0700924 static final String PROPERTY_SMS_OVER_IMS = "persist.radio.imsallowmtsms";
925 OnClickListener mSmsOverImsHandler = new OnClickListener() {
926 @Override
927 public void onClick(View v) {
928 Log.d(TAG, String.format("toggle %s: currently %s",
929 PROPERTY_SMS_OVER_IMS, (isSmsOverImsEnabled() ? "on":"off")));
930 boolean newValue = !isSmsOverImsEnabled();
931 SystemProperties.set(PROPERTY_SMS_OVER_IMS, newValue ? "1":"0");
932 updateSmsOverImsState();
933 }
934 };
935
Wink Saville426fc662011-09-25 14:39:02 -0700936 private boolean isSmsOverImsEnabled() {
937 return SystemProperties.getBoolean(PROPERTY_SMS_OVER_IMS, false);
938 }
939
940 private void updateSmsOverImsState() {
941 Log.d(TAG, "updateSmsOverImsState isSmsOverImsEnabled()=" + isSmsOverImsEnabled());
942 String buttonText = isSmsOverImsEnabled() ?
943 getString(R.string.sms_over_ims_off) :
944 getString(R.string.sms_over_ims_on);
945 smsOverImsButton.setText(buttonText);
946 }
947
948 private Button lteRamDumpButton;
949 static final String PROPERTY_LTE_RAM_DUMP = "persist.radio.ramdump";
950 OnClickListener mLteRamDumpHandler = new OnClickListener() {
951 @Override
952 public void onClick(View v) {
953 Log.d(TAG, String.format("toggle %s: currently %s",
954 PROPERTY_LTE_RAM_DUMP, (isSmsOverImsEnabled() ? "on":"off")));
955 boolean newValue = !isLteRamDumpEnabled();
956 SystemProperties.set(PROPERTY_LTE_RAM_DUMP, newValue ? "1":"0");
957 updateLteRamDumpState();
958 }
959 };
960
961 private boolean isLteRamDumpEnabled() {
962 return SystemProperties.getBoolean(PROPERTY_LTE_RAM_DUMP, false);
963 }
964
965 private void updateLteRamDumpState() {
966 Log.d(TAG, "updateLteRamDumpState isLteRamDumpEnabled()=" + isLteRamDumpEnabled());
967 String buttonText = isLteRamDumpEnabled() ?
968 getString(R.string.lte_ram_dump_off) :
969 getString(R.string.lte_ram_dump_on);
970 lteRamDumpButton.setText(buttonText);
971 }
972
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800973 OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
974 public void onClick(View v) {
Wink Savillec3886682009-04-02 11:00:56 -0700975 phone.disableDnsCheck(!phone.isDnsCheckDisabled());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800976 updateDnsCheckState();
977 }
978 };
johnwang342101a2009-09-23 16:22:34 -0700979
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800980 OnClickListener mOemInfoButtonHandler = new OnClickListener() {
981 public void onClick(View v) {
982 Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
983 try {
984 startActivity(intent);
985 } catch (android.content.ActivityNotFoundException ex) {
986 Log.d(TAG, "OEM-specific Info/Settings Activity Not Found : " + ex);
987 // If the activity does not exist, there are no OEM
988 // settings, and so we can just do nothing...
989 }
990 }
991 };
992
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800993 OnClickListener mPingButtonHandler = new OnClickListener() {
994 public void onClick(View v) {
995 updatePingState();
996 }
997 };
998
999 OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
1000 public void onClick(View v) {
1001 updateSmscButton.setEnabled(false);
jsh21dd4072009-05-12 11:26:55 -07001002 phone.setSmscAddress(smsc.getText().toString(),
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001003 mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
1004 }
1005 };
1006
1007 OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
1008 public void onClick(View v) {
1009 refreshSmsc();
1010 }
1011 };
1012
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001013 AdapterView.OnItemSelectedListener
1014 mPreferredNetworkHandler = new AdapterView.OnItemSelectedListener() {
1015 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1016 Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
Ricardo Cerqueira32310ee2012-04-12 23:34:38 +01001017 if (pos>=0 && pos<=(mPreferredNetworkLabels.length - 2)) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001018 phone.setPreferredNetworkType(pos, msg);
1019 }
1020 }
1021
1022 public void onNothingSelected(AdapterView parent) {
1023 }
1024 };
1025
1026 private String[] mPreferredNetworkLabels = {
jsh87fa11b2009-08-18 18:00:15 -07001027 "WCDMA preferred",
1028 "GSM only",
1029 "WCDMA only",
1030 "GSM auto (PRL)",
1031 "CDMA auto (PRL)",
1032 "CDMA only",
1033 "EvDo only",
1034 "GSM/CDMA auto (PRL)",
Ricardo Cerqueira32310ee2012-04-12 23:34:38 +01001035 "LTE/CDMA auto (PRL)",
1036 "LTE/GSM auto (PRL)",
1037 "LTE/GSM/CDMA auto (PRL)",
1038 "LTE only",
jsh87fa11b2009-08-18 18:00:15 -07001039 "Unknown"};
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001040}