blob: 5ba3837827720b9146292f41f7f8423608e8455d [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;
Wink Saville55434042012-06-14 12:33:43 -070058import com.android.internal.telephony.PhoneConstants;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080059import com.android.internal.telephony.PhoneFactory;
60import com.android.internal.telephony.PhoneStateIntentReceiver;
61import com.android.internal.telephony.TelephonyProperties;
Wink Saville0d936972009-12-22 14:36:47 -080062import com.android.internal.telephony.gsm.GsmDataConnection;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080063
64import org.apache.http.HttpResponse;
65import org.apache.http.client.HttpClient;
66import org.apache.http.client.methods.HttpGet;
67import org.apache.http.impl.client.DefaultHttpClient;
68
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080069import java.io.IOException;
Wink Savillea9f16372010-08-27 13:53:26 -070070import java.net.InetAddress;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080071import java.net.UnknownHostException;
72import java.util.ArrayList;
73import java.util.List;
74
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +080075import android.util.Log;
76
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080077public class RadioInfo extends Activity {
78 private final String TAG = "phone";
johnwang342101a2009-09-23 16:22:34 -070079
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080080 private static final int EVENT_PHONE_STATE_CHANGED = 100;
81 private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 200;
82 private static final int EVENT_SERVICE_STATE_CHANGED = 300;
83 private static final int EVENT_CFI_CHANGED = 302;
84
85 private static final int EVENT_QUERY_PREFERRED_TYPE_DONE = 1000;
86 private static final int EVENT_SET_PREFERRED_TYPE_DONE = 1001;
87 private static final int EVENT_QUERY_NEIGHBORING_CIDS_DONE = 1002;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080088 private static final int EVENT_QUERY_SMSC_DONE = 1005;
89 private static final int EVENT_UPDATE_SMSC_DONE = 1006;
90
91 private static final int MENU_ITEM_SELECT_BAND = 0;
92 private static final int MENU_ITEM_VIEW_ADN = 1;
93 private static final int MENU_ITEM_VIEW_FDN = 2;
94 private static final int MENU_ITEM_VIEW_SDN = 3;
95 private static final int MENU_ITEM_GET_PDP_LIST = 4;
96 private static final int MENU_ITEM_TOGGLE_DATA = 5;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +080097
98 static final String ENABLE_DATA_STR = "Enable data connection";
99 static final String DISABLE_DATA_STR = "Disable data connection";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800100
Wink Savillec3886682009-04-02 11:00:56 -0700101 private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800102 private TextView number;
103 private TextView callState;
104 private TextView operatorName;
105 private TextView roamingState;
106 private TextView gsmState;
107 private TextView gprsState;
108 private TextView network;
109 private TextView dBm;
110 private TextView mMwi;
111 private TextView mCfi;
112 private TextView mLocation;
113 private TextView mNeighboringCids;
114 private TextView resets;
115 private TextView attempts;
116 private TextView successes;
117 private TextView disconnects;
118 private TextView sentSinceReceived;
119 private TextView sent;
120 private TextView received;
121 private TextView mPingIpAddr;
122 private TextView mPingHostname;
123 private TextView mHttpClientTest;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800124 private TextView dnsCheckState;
125 private EditText smsc;
126 private Button radioPowerButton;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800127 private Button dnsCheckToggleButton;
128 private Button pingTestButton;
129 private Button updateSmscButton;
130 private Button refreshSmscButton;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800131 private Button oemInfoButton;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800132 private Spinner preferredNetworkType;
133
134 private TelephonyManager mTelephonyManager;
135 private Phone phone = null;
136 private PhoneStateIntentReceiver mPhoneStateReceiver;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800137
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800138 private String mPingIpAddrResult;
139 private String mPingHostnameResult;
140 private String mHttpClientTestResult;
141 private boolean mMwiValue = false;
142 private boolean mCfiValue = false;
143
144 private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
145 @Override
146 public void onDataConnectionStateChanged(int state) {
147 updateDataState();
148 updateDataStats();
149 updatePdpList();
150 updateNetworkType();
151 }
152
153 @Override
154 public void onDataActivity(int direction) {
155 updateDataStats2();
156 }
157
158 @Override
159 public void onCellLocationChanged(CellLocation location) {
160 updateLocation(location);
161 }
162
163 @Override
164 public void onMessageWaitingIndicatorChanged(boolean mwi) {
165 mMwiValue = mwi;
166 updateMessageWaiting();
167 }
168
169 @Override
170 public void onCallForwardingIndicatorChanged(boolean cfi) {
171 mCfiValue = cfi;
172 updateCallRedirect();
173 }
174 };
175
176 private Handler mHandler = new Handler() {
177 public void handleMessage(Message msg) {
178 AsyncResult ar;
179 switch (msg.what) {
180 case EVENT_PHONE_STATE_CHANGED:
181 updatePhoneState();
182 break;
183
184 case EVENT_SIGNAL_STRENGTH_CHANGED:
185 updateSignalStrength();
186 break;
187
188 case EVENT_SERVICE_STATE_CHANGED:
189 updateServiceState();
190 updatePowerState();
191 break;
192
193 case EVENT_QUERY_PREFERRED_TYPE_DONE:
194 ar= (AsyncResult) msg.obj;
195 if (ar.exception == null) {
196 int type = ((int[])ar.result)[0];
Ricardo Cerqueira32310ee2012-04-12 23:34:38 +0100197 if (type >= mPreferredNetworkLabels.length) {
198 Log.e(TAG, "[RadioInfo] EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
199 "type=" + type);
200 type = mPreferredNetworkLabels.length - 1;
201 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800202 preferredNetworkType.setSelection(type, true);
203 } else {
Ricardo Cerqueira32310ee2012-04-12 23:34:38 +0100204 preferredNetworkType.setSelection(mPreferredNetworkLabels.length - 1, true);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800205 }
206 break;
207 case EVENT_SET_PREFERRED_TYPE_DONE:
208 ar= (AsyncResult) msg.obj;
209 if (ar.exception != null) {
210 phone.getPreferredNetworkType(
211 obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
212 }
213 break;
214 case EVENT_QUERY_NEIGHBORING_CIDS_DONE:
215 ar= (AsyncResult) msg.obj;
216 if (ar.exception == null) {
217 updateNeighboringCids((ArrayList<NeighboringCellInfo>)ar.result);
218 } else {
219 mNeighboringCids.setText("unknown");
220 }
221 break;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800222 case EVENT_QUERY_SMSC_DONE:
223 ar= (AsyncResult) msg.obj;
224 if (ar.exception != null) {
225 smsc.setText("refresh error");
226 } else {
jsh21dd4072009-05-12 11:26:55 -0700227 smsc.setText((String)ar.result);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800228 }
229 break;
230 case EVENT_UPDATE_SMSC_DONE:
231 updateSmscButton.setEnabled(true);
232 ar= (AsyncResult) msg.obj;
233 if (ar.exception != null) {
234 smsc.setText("update error");
235 }
236 break;
237 default:
238 break;
239
240 }
241 }
242 };
243
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800244 @Override
245 public void onCreate(Bundle icicle) {
246 super.onCreate(icicle);
247
248 setContentView(R.layout.radio_info);
249
250 mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
251 phone = PhoneFactory.getDefaultPhone();
252
Wink Savillec3886682009-04-02 11:00:56 -0700253 mDeviceId= (TextView) findViewById(R.id.imei);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800254 number = (TextView) findViewById(R.id.number);
255 callState = (TextView) findViewById(R.id.call);
256 operatorName = (TextView) findViewById(R.id.operator);
257 roamingState = (TextView) findViewById(R.id.roaming);
258 gsmState = (TextView) findViewById(R.id.gsm);
259 gprsState = (TextView) findViewById(R.id.gprs);
260 network = (TextView) findViewById(R.id.network);
261 dBm = (TextView) findViewById(R.id.dbm);
262 mMwi = (TextView) findViewById(R.id.mwi);
263 mCfi = (TextView) findViewById(R.id.cfi);
264 mLocation = (TextView) findViewById(R.id.location);
265 mNeighboringCids = (TextView) findViewById(R.id.neighboring);
266
267 resets = (TextView) findViewById(R.id.resets);
268 attempts = (TextView) findViewById(R.id.attempts);
269 successes = (TextView) findViewById(R.id.successes);
270 disconnects = (TextView) findViewById(R.id.disconnects);
271 sentSinceReceived = (TextView) findViewById(R.id.sentSinceReceived);
272 sent = (TextView) findViewById(R.id.sent);
273 received = (TextView) findViewById(R.id.received);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800274 smsc = (EditText) findViewById(R.id.smsc);
275 dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
276
277 mPingIpAddr = (TextView) findViewById(R.id.pingIpAddr);
278 mPingHostname = (TextView) findViewById(R.id.pingHostname);
279 mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
280
281 preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
282 ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
283 android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
johnwang342101a2009-09-23 16:22:34 -0700284 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800285 preferredNetworkType.setAdapter(adapter);
286 preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
287
288 radioPowerButton = (Button) findViewById(R.id.radio_power);
289 radioPowerButton.setOnClickListener(mPowerButtonHandler);
290
Wink Saville1e596f32011-09-19 14:24:39 -0700291 imsRegRequiredButton = (Button) findViewById(R.id.ims_reg_required);
292 imsRegRequiredButton.setOnClickListener(mImsRegRequiredHandler);
293
Wink Saville382a75b2011-09-22 15:17:00 -0700294 smsOverImsButton = (Button) findViewById(R.id.sms_over_ims);
295 smsOverImsButton.setOnClickListener(mSmsOverImsHandler);
296
Wink Saville426fc662011-09-25 14:39:02 -0700297 lteRamDumpButton = (Button) findViewById(R.id.lte_ram_dump);
298 lteRamDumpButton.setOnClickListener(mLteRamDumpHandler);
299
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800300 pingTestButton = (Button) findViewById(R.id.ping_test);
301 pingTestButton.setOnClickListener(mPingButtonHandler);
302 updateSmscButton = (Button) findViewById(R.id.update_smsc);
303 updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
304 refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
305 refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
306 dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
307 dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
johnwang342101a2009-09-23 16:22:34 -0700308
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800309 oemInfoButton = (Button) findViewById(R.id.oem_info);
310 oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
311 PackageManager pm = getPackageManager();
312 Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
313 List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
314 if (oemInfoIntentList.size() == 0) {
315 oemInfoButton.setEnabled(false);
316 }
317
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800318 mPhoneStateReceiver = new PhoneStateIntentReceiver(this, mHandler);
319 mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED);
320 mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED);
321 mPhoneStateReceiver.notifyPhoneCallState(EVENT_PHONE_STATE_CHANGED);
johnwang342101a2009-09-23 16:22:34 -0700322
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800323 phone.getPreferredNetworkType(
324 mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
325 phone.getNeighboringCids(
326 mHandler.obtainMessage(EVENT_QUERY_NEIGHBORING_CIDS_DONE));
327
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800328 CellLocation.requestLocationUpdate();
329 }
330
331 @Override
332 protected void onResume() {
333 super.onResume();
334
335 updatePhoneState();
336 updateSignalStrength();
337 updateMessageWaiting();
338 updateCallRedirect();
339 updateServiceState();
340 updateLocation(mTelephonyManager.getCellLocation());
341 updateDataState();
342 updateDataStats();
343 updateDataStats2();
344 updatePowerState();
Wink Saville1e596f32011-09-19 14:24:39 -0700345 updateImsRegRequiredState();
Wink Saville382a75b2011-09-22 15:17:00 -0700346 updateSmsOverImsState();
Wink Saville426fc662011-09-25 14:39:02 -0700347 updateLteRamDumpState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800348 updateProperties();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800349 updateDnsCheckState();
350
351 Log.i(TAG, "[RadioInfo] onResume: register phone & data intents");
352
353 mPhoneStateReceiver.registerIntent();
354 mTelephonyManager.listen(mPhoneStateListener,
355 PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
356 | PhoneStateListener.LISTEN_DATA_ACTIVITY
357 | PhoneStateListener.LISTEN_CELL_LOCATION
358 | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
359 | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR);
360 }
361
362 @Override
363 public void onPause() {
364 super.onPause();
365
366 Log.i(TAG, "[RadioInfo] onPause: unregister phone & data intents");
367
368 mPhoneStateReceiver.unregisterIntent();
369 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
370 }
371
372 @Override
373 public boolean onCreateOptionsMenu(Menu menu) {
Wink Savillec3886682009-04-02 11:00:56 -0700374 menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label)
375 .setOnMenuItemClickListener(mSelectBandCallback)
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800376 .setAlphabeticShortcut('b');
377 menu.add(1, MENU_ITEM_VIEW_ADN, 0,
378 R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
379 menu.add(1, MENU_ITEM_VIEW_FDN, 0,
380 R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
381 menu.add(1, MENU_ITEM_VIEW_SDN, 0,
382 R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
383 menu.add(1, MENU_ITEM_GET_PDP_LIST,
384 0, R.string.radioInfo_menu_getPDP).setOnMenuItemClickListener(mGetPdpList);
385 menu.add(1, MENU_ITEM_TOGGLE_DATA,
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800386 0, DISABLE_DATA_STR).setOnMenuItemClickListener(mToggleData);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800387 return true;
388 }
389
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800390 @Override
Wink Savillec3886682009-04-02 11:00:56 -0700391 public boolean onPrepareOptionsMenu(Menu menu) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800392 // Get the TOGGLE DATA menu item in the right state.
393 MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
394 int state = mTelephonyManager.getDataState();
395 boolean visible = true;
396
397 switch (state) {
398 case TelephonyManager.DATA_CONNECTED:
399 case TelephonyManager.DATA_SUSPENDED:
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800400 item.setTitle(DISABLE_DATA_STR);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800401 break;
402 case TelephonyManager.DATA_DISCONNECTED:
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800403 item.setTitle(ENABLE_DATA_STR);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800404 break;
405 default:
406 visible = false;
407 break;
408 }
409 item.setVisible(visible);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800410 return true;
411 }
412
413 private boolean isRadioOn() {
414 return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
415 }
johnwang342101a2009-09-23 16:22:34 -0700416
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800417 private void updatePowerState() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800418 String buttonText = isRadioOn() ?
419 getString(R.string.turn_off_radio) :
420 getString(R.string.turn_on_radio);
Wink Savillec3886682009-04-02 11:00:56 -0700421 radioPowerButton.setText(buttonText);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800422 }
423
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800424 private void updateDnsCheckState() {
Mike Lockwood5304c7e2009-04-05 11:37:45 -0700425 dnsCheckState.setText(phone.isDnsCheckDisabled() ?
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800426 "0.0.0.0 allowed" :"0.0.0.0 not allowed");
427 }
Wink Savillee2a14e32009-05-29 14:06:30 -0700428
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800429 private final void
430 updateSignalStrength() {
Wink Savillee2a14e32009-05-29 14:06:30 -0700431 // TODO PhoneStateIntentReceiver is deprecated and PhoneStateListener
432 // should probably used instead.
433 int state = mPhoneStateReceiver.getServiceState().getState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800434 Resources r = getResources();
435
436 if ((ServiceState.STATE_OUT_OF_SERVICE == state) ||
437 (ServiceState.STATE_POWER_OFF == state)) {
438 dBm.setText("0");
439 }
Wink Savillee2a14e32009-05-29 14:06:30 -0700440
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800441 int signalDbm = mPhoneStateReceiver.getSignalStrengthDbm();
Wink Savillee2a14e32009-05-29 14:06:30 -0700442
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800443 if (-1 == signalDbm) signalDbm = 0;
444
Wink Saville882c74a2011-02-17 12:00:03 -0800445 int signalAsu = mPhoneStateReceiver.getSignalStrengthLevelAsu();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800446
447 if (-1 == signalAsu) signalAsu = 0;
448
449 dBm.setText(String.valueOf(signalDbm) + " "
450 + r.getString(R.string.radioInfo_display_dbm) + " "
451 + String.valueOf(signalAsu) + " "
452 + r.getString(R.string.radioInfo_display_asu));
453 }
454
455 private final void updateLocation(CellLocation location) {
jsh534f5ae2009-09-24 09:19:22 -0700456 Resources r = getResources();
Wink Savillec3886682009-04-02 11:00:56 -0700457 if (location instanceof GsmCellLocation) {
458 GsmCellLocation loc = (GsmCellLocation)location;
jsh534f5ae2009-09-24 09:19:22 -0700459 int lac = loc.getLac();
460 int cid = loc.getCid();
461 mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
462 + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
463 + " "
464 + r.getString(R.string.radioInfo_cid) + " = "
465 + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
466 } else if (location instanceof CdmaCellLocation) {
467 CdmaCellLocation loc = (CdmaCellLocation)location;
468 int bid = loc.getBaseStationId();
469 int sid = loc.getSystemId();
470 int nid = loc.getNetworkId();
471 int lat = loc.getBaseStationLatitude();
472 int lon = loc.getBaseStationLongitude();
473 mLocation.setText("BID = "
474 + ((bid == -1) ? "unknown" : Integer.toHexString(bid))
475 + " "
476 + "SID = "
477 + ((sid == -1) ? "unknown" : Integer.toHexString(sid))
478 + " "
479 + "NID = "
480 + ((nid == -1) ? "unknown" : Integer.toHexString(nid))
481 + "\n"
482 + "LAT = "
483 + ((lat == -1) ? "unknown" : Integer.toHexString(lat))
484 + " "
485 + "LONG = "
486 + ((lon == -1) ? "unknown" : Integer.toHexString(lon)));
487 } else {
488 mLocation.setText("unknown");
Wink Savillec3886682009-04-02 11:00:56 -0700489 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800490
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800491
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800492 }
493
494 private final void updateNeighboringCids(ArrayList<NeighboringCellInfo> cids) {
johnwangf02c65f2009-09-25 17:26:54 -0700495 StringBuilder sb = new StringBuilder();
496
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800497 if (cids != null) {
498 if ( cids.isEmpty() ) {
johnwangf02c65f2009-09-25 17:26:54 -0700499 sb.append("no neighboring cells");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800500 } else {
501 for (NeighboringCellInfo cell : cids) {
johnwangf02c65f2009-09-25 17:26:54 -0700502 sb.append(cell.toString()).append(" ");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800503 }
504 }
505 } else {
johnwangf02c65f2009-09-25 17:26:54 -0700506 sb.append("unknown");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800507 }
johnwangf02c65f2009-09-25 17:26:54 -0700508 mNeighboringCids.setText(sb.toString());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800509 }
510
511 private final void
512 updateMessageWaiting() {
513 mMwi.setText(String.valueOf(mMwiValue));
514 }
515
516 private final void
517 updateCallRedirect() {
518 mCfi.setText(String.valueOf(mCfiValue));
519 }
520
521
522 private final void
523 updateServiceState() {
524 ServiceState serviceState = mPhoneStateReceiver.getServiceState();
525 int state = serviceState.getState();
526 Resources r = getResources();
527 String display = r.getString(R.string.radioInfo_unknown);
johnwang342101a2009-09-23 16:22:34 -0700528
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800529 switch (state) {
530 case ServiceState.STATE_IN_SERVICE:
531 display = r.getString(R.string.radioInfo_service_in);
532 break;
533 case ServiceState.STATE_OUT_OF_SERVICE:
534 case ServiceState.STATE_EMERGENCY_ONLY:
535 display = r.getString(R.string.radioInfo_service_emergency);
536 break;
537 case ServiceState.STATE_POWER_OFF:
538 display = r.getString(R.string.radioInfo_service_off);
539 break;
540 }
johnwang342101a2009-09-23 16:22:34 -0700541
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800542 gsmState.setText(display);
johnwang342101a2009-09-23 16:22:34 -0700543
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800544 if (serviceState.getRoaming()) {
545 roamingState.setText(R.string.radioInfo_roaming_in);
546 } else {
547 roamingState.setText(R.string.radioInfo_roaming_not);
548 }
549
550 operatorName.setText(serviceState.getOperatorAlphaLong());
551 }
552
553 private final void
554 updatePhoneState() {
Wink Saville55434042012-06-14 12:33:43 -0700555 PhoneConstants.State state = mPhoneStateReceiver.getPhoneState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800556 Resources r = getResources();
557 String display = r.getString(R.string.radioInfo_unknown);
558
559 switch (state) {
560 case IDLE:
561 display = r.getString(R.string.radioInfo_phone_idle);
562 break;
563 case RINGING:
564 display = r.getString(R.string.radioInfo_phone_ringing);
565 break;
566 case OFFHOOK:
567 display = r.getString(R.string.radioInfo_phone_offhook);
568 break;
569 }
570
571 callState.setText(display);
572 }
573
574 private final void
575 updateDataState() {
576 int state = mTelephonyManager.getDataState();
577 Resources r = getResources();
578 String display = r.getString(R.string.radioInfo_unknown);
579
580 switch (state) {
581 case TelephonyManager.DATA_CONNECTED:
582 display = r.getString(R.string.radioInfo_data_connected);
583 break;
584 case TelephonyManager.DATA_CONNECTING:
585 display = r.getString(R.string.radioInfo_data_connecting);
586 break;
587 case TelephonyManager.DATA_DISCONNECTED:
588 display = r.getString(R.string.radioInfo_data_disconnected);
589 break;
590 case TelephonyManager.DATA_SUSPENDED:
591 display = r.getString(R.string.radioInfo_data_suspended);
592 break;
593 }
johnwang342101a2009-09-23 16:22:34 -0700594
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800595 gprsState.setText(display);
596 }
597
598 private final void updateNetworkType() {
599 Resources r = getResources();
600 String display = SystemProperties.get(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
601 r.getString(R.string.radioInfo_unknown));
602
603 network.setText(display);
604 }
605
606 private final void
607 updateProperties() {
608 String s;
609 Resources r = getResources();
610
611 s = phone.getDeviceId();
johnwang342101a2009-09-23 16:22:34 -0700612 if (s == null) s = r.getString(R.string.radioInfo_unknown);
Wink Savillec3886682009-04-02 11:00:56 -0700613 mDeviceId.setText(s);
johnwang342101a2009-09-23 16:22:34 -0700614
Wink Savillec3886682009-04-02 11:00:56 -0700615
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800616 s = phone.getLine1Number();
johnwang342101a2009-09-23 16:22:34 -0700617 if (s == null) s = r.getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800618 number.setText(s);
619 }
620
621 private final void updateDataStats() {
622 String s;
623
624 s = SystemProperties.get("net.gsm.radio-reset", "0");
625 resets.setText(s);
626
627 s = SystemProperties.get("net.gsm.attempt-gprs", "0");
628 attempts.setText(s);
629
630 s = SystemProperties.get("net.gsm.succeed-gprs", "0");
631 successes.setText(s);
632
633 //s = SystemProperties.get("net.gsm.disconnect", "0");
634 //disconnects.setText(s);
635
636 s = SystemProperties.get("net.ppp.reset-by-timeout", "0");
637 sentSinceReceived.setText(s);
638 }
639
640 private final void updateDataStats2() {
641 Resources r = getResources();
642
Jeff Sharkey93029862011-05-27 18:26:15 -0700643 long txPackets = TrafficStats.getMobileTxPackets();
644 long rxPackets = TrafficStats.getMobileRxPackets();
645 long txBytes = TrafficStats.getMobileTxBytes();
646 long rxBytes = TrafficStats.getMobileRxBytes();
johnwang342101a2009-09-23 16:22:34 -0700647
Jeff Sharkey93029862011-05-27 18:26:15 -0700648 String packets = r.getString(R.string.radioInfo_display_packets);
649 String bytes = r.getString(R.string.radioInfo_display_bytes);
johnwang342101a2009-09-23 16:22:34 -0700650
Jeff Sharkey93029862011-05-27 18:26:15 -0700651 sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
652 received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800653 }
654
655 /**
656 * Ping a IP address.
657 */
658 private final void pingIpAddr() {
659 try {
660 // This is hardcoded IP addr. This is for testing purposes.
661 // We would need to get rid of this before release.
662 String ipAddress = "74.125.47.104";
663 Process p = Runtime.getRuntime().exec("ping -c 1 " + ipAddress);
664 int status = p.waitFor();
665 if (status == 0) {
666 mPingIpAddrResult = "Pass";
667 } else {
668 mPingIpAddrResult = "Fail: IP addr not reachable";
669 }
670 } catch (IOException e) {
671 mPingIpAddrResult = "Fail: IOException";
672 } catch (InterruptedException e) {
673 mPingIpAddrResult = "Fail: InterruptedException";
674 }
675 }
676
677 /**
678 * Ping a host name
679 */
680 private final void pingHostname() {
681 try {
johnwang342101a2009-09-23 16:22:34 -0700682 Process p = Runtime.getRuntime().exec("ping -c 1 www.google.com");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800683 int status = p.waitFor();
684 if (status == 0) {
685 mPingHostnameResult = "Pass";
686 } else {
687 mPingHostnameResult = "Fail: Host unreachable";
688 }
689 } catch (UnknownHostException e) {
690 mPingHostnameResult = "Fail: Unknown Host";
691 } catch (IOException e) {
692 mPingHostnameResult= "Fail: IOException";
693 } catch (InterruptedException e) {
694 mPingHostnameResult = "Fail: InterruptedException";
695 }
696 }
697
698 /**
699 * This function checks for basic functionality of HTTP Client.
700 */
701 private void httpClientTest() {
702 HttpClient client = new DefaultHttpClient();
703 try {
704 HttpGet request = new HttpGet("http://www.google.com");
705 HttpResponse response = client.execute(request);
706 if (response.getStatusLine().getStatusCode() == 200) {
707 mHttpClientTestResult = "Pass";
708 } else {
709 mHttpClientTestResult = "Fail: Code: " + String.valueOf(response);
710 }
711 request.abort();
712 } catch (IOException e) {
713 mHttpClientTestResult = "Fail: IOException";
714 }
715 }
716
717 private void refreshSmsc() {
jsh21dd4072009-05-12 11:26:55 -0700718 phone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800719 }
720
721 private final void updatePingState() {
722 final Handler handler = new Handler();
723 // Set all to unknown since the threads will take a few secs to update.
724 mPingIpAddrResult = getResources().getString(R.string.radioInfo_unknown);
725 mPingHostnameResult = getResources().getString(R.string.radioInfo_unknown);
726 mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
727
728 mPingIpAddr.setText(mPingIpAddrResult);
729 mPingHostname.setText(mPingHostnameResult);
730 mHttpClientTest.setText(mHttpClientTestResult);
731
732 final Runnable updatePingResults = new Runnable() {
733 public void run() {
734 mPingIpAddr.setText(mPingIpAddrResult);
735 mPingHostname.setText(mPingHostnameResult);
736 mHttpClientTest.setText(mHttpClientTestResult);
737 }
738 };
739 Thread ipAddr = new Thread() {
740 @Override
741 public void run() {
742 pingIpAddr();
743 handler.post(updatePingResults);
744 }
745 };
746 ipAddr.start();
747
748 Thread hostname = new Thread() {
749 @Override
750 public void run() {
751 pingHostname();
752 handler.post(updatePingResults);
753 }
754 };
755 hostname.start();
756
757 Thread httpClient = new Thread() {
758 @Override
759 public void run() {
760 httpClientTest();
761 handler.post(updatePingResults);
762 }
763 };
764 httpClient.start();
765 }
766
767 private final void updatePdpList() {
768 StringBuilder sb = new StringBuilder("========DATA=======\n");
769
Wink Saville2c3ec092011-04-20 10:24:36 -0700770// List<DataConnection> dcs = phone.getCurrentDataConnectionList();
771//
772// for (DataConnection dc : dcs) {
773// sb.append(" State=").append(dc.getStateAsString()).append("\n");
774// if (dc.isActive()) {
775// long timeElapsed =
776// (System.currentTimeMillis() - dc.getConnectionTime())/1000;
777// sb.append(" connected at ")
778// .append(DateUtils.timeString(dc.getConnectionTime()))
779// .append(" and elapsed ")
780// .append(DateUtils.formatElapsedTime(timeElapsed));
781//
782// if (dc instanceof GsmDataConnection) {
783// GsmDataConnection pdp = (GsmDataConnection)dc;
784// sb.append("\n to ")
785// .append(pdp.getApn().toString());
786// }
787// sb.append("\nLinkProperties: ");
788// sb.append(phone.getLinkProperties(phone.getActiveApnTypes()[0]).toString());
789// } else if (dc.isInactive()) {
790// sb.append(" disconnected with last try at ")
791// .append(DateUtils.timeString(dc.getLastFailTime()))
792// .append("\n fail because ")
793// .append(dc.getLastFailCause().toString());
794// } else {
795// if (dc instanceof GsmDataConnection) {
796// GsmDataConnection pdp = (GsmDataConnection)dc;
797// sb.append(" is connecting to ")
798// .append(pdp.getApn().toString());
799// } else {
800// sb.append(" is connecting");
801// }
802// }
803// sb.append("\n===================");
804// }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800805
806 disconnects.setText(sb.toString());
807 }
808
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800809 private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
810 public boolean onMenuItemClick(MenuItem item) {
811 Intent intent = new Intent(Intent.ACTION_VIEW);
812 // XXX We need to specify the component here because if we don't
813 // the activity manager will try to resolve the type by calling
814 // the content provider, which causes it to be loaded in a process
815 // other than the Dialer process, which causes a lot of stuff to
816 // break.
817 intent.setClassName("com.android.phone",
818 "com.android.phone.SimContacts");
819 startActivity(intent);
820 return true;
821 }
822 };
823
824 private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
825 public boolean onMenuItemClick(MenuItem item) {
826 Intent intent = new Intent(Intent.ACTION_VIEW);
827 // XXX We need to specify the component here because if we don't
828 // the activity manager will try to resolve the type by calling
829 // the content provider, which causes it to be loaded in a process
830 // other than the Dialer process, which causes a lot of stuff to
831 // break.
832 intent.setClassName("com.android.phone",
833 "com.android.phone.FdnList");
834 startActivity(intent);
835 return true;
836 }
837 };
838
839 private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
840 public boolean onMenuItemClick(MenuItem item) {
841 Intent intent = new Intent(
Wink Savillec3886682009-04-02 11:00:56 -0700842 Intent.ACTION_VIEW, Uri.parse("content://icc/sdn"));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800843 // XXX We need to specify the component here because if we don't
844 // the activity manager will try to resolve the type by calling
845 // the content provider, which causes it to be loaded in a process
846 // other than the Dialer process, which causes a lot of stuff to
847 // break.
848 intent.setClassName("com.android.phone",
849 "com.android.phone.ADNList");
850 startActivity(intent);
851 return true;
852 }
853 };
854
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800855 private MenuItem.OnMenuItemClickListener mGetPdpList = new MenuItem.OnMenuItemClickListener() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800856 public boolean onMenuItemClick(MenuItem item) {
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800857 phone.getDataCallList(null);
858 return true;
859 }
860 };
861
862 private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
863 public boolean onMenuItemClick(MenuItem item) {
864 Intent intent = new Intent();
865 intent.setClass(RadioInfo.this, BandMode.class);
866 startActivity(intent);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800867 return true;
868 }
869 };
johnwang342101a2009-09-23 16:22:34 -0700870
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800871 private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
872 public boolean onMenuItemClick(MenuItem item) {
Robert Greenwalt99be5002010-11-24 17:20:59 -0800873 ConnectivityManager cm =
874 (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800875 int state = mTelephonyManager.getDataState();
876 switch (state) {
877 case TelephonyManager.DATA_CONNECTED:
Robert Greenwalt99be5002010-11-24 17:20:59 -0800878 cm.setMobileDataEnabled(false);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800879 break;
880 case TelephonyManager.DATA_DISCONNECTED:
Robert Greenwalt99be5002010-11-24 17:20:59 -0800881 cm.setMobileDataEnabled(true);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800882 break;
883 default:
884 // do nothing
885 break;
886 }
887 return true;
888 }
889 };
890
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800891 OnClickListener mPowerButtonHandler = new OnClickListener() {
892 public void onClick(View v) {
893 //log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
894 phone.setRadioPower(!isRadioOn());
895 }
896 };
897
Wink Saville426fc662011-09-25 14:39:02 -0700898 private Button imsRegRequiredButton;
899 static final String PROPERTY_IMS_REG_REQUIRED = "persist.radio.imsregrequired";
Wink Saville1e596f32011-09-19 14:24:39 -0700900 OnClickListener mImsRegRequiredHandler = new OnClickListener() {
901 @Override
902 public void onClick(View v) {
903 Log.d(TAG, String.format("toggle %s: currently %s",
Wink Saville426fc662011-09-25 14:39:02 -0700904 PROPERTY_IMS_REG_REQUIRED, (isImsRegRequired() ? "on":"off")));
Wink Saville1e596f32011-09-19 14:24:39 -0700905 boolean newValue = !isImsRegRequired();
Wink Saville426fc662011-09-25 14:39:02 -0700906 SystemProperties.set(PROPERTY_IMS_REG_REQUIRED,
Wink Saville1e596f32011-09-19 14:24:39 -0700907 newValue ? "1":"0");
908 updateImsRegRequiredState();
909 }
910 };
911
Wink Saville426fc662011-09-25 14:39:02 -0700912 private boolean isImsRegRequired() {
913 return SystemProperties.getBoolean(PROPERTY_IMS_REG_REQUIRED, false);
914 }
915
916 private void updateImsRegRequiredState() {
917 Log.d(TAG, "updateImsRegRequiredState isImsRegRequired()=" + isImsRegRequired());
918 String buttonText = isImsRegRequired() ?
919 getString(R.string.ims_reg_required_off) :
920 getString(R.string.ims_reg_required_on);
921 imsRegRequiredButton.setText(buttonText);
922 }
923
924 private Button smsOverImsButton;
Wink Saville382a75b2011-09-22 15:17:00 -0700925 static final String PROPERTY_SMS_OVER_IMS = "persist.radio.imsallowmtsms";
926 OnClickListener mSmsOverImsHandler = new OnClickListener() {
927 @Override
928 public void onClick(View v) {
929 Log.d(TAG, String.format("toggle %s: currently %s",
930 PROPERTY_SMS_OVER_IMS, (isSmsOverImsEnabled() ? "on":"off")));
931 boolean newValue = !isSmsOverImsEnabled();
932 SystemProperties.set(PROPERTY_SMS_OVER_IMS, newValue ? "1":"0");
933 updateSmsOverImsState();
934 }
935 };
936
Wink Saville426fc662011-09-25 14:39:02 -0700937 private boolean isSmsOverImsEnabled() {
938 return SystemProperties.getBoolean(PROPERTY_SMS_OVER_IMS, false);
939 }
940
941 private void updateSmsOverImsState() {
942 Log.d(TAG, "updateSmsOverImsState isSmsOverImsEnabled()=" + isSmsOverImsEnabled());
943 String buttonText = isSmsOverImsEnabled() ?
944 getString(R.string.sms_over_ims_off) :
945 getString(R.string.sms_over_ims_on);
946 smsOverImsButton.setText(buttonText);
947 }
948
949 private Button lteRamDumpButton;
950 static final String PROPERTY_LTE_RAM_DUMP = "persist.radio.ramdump";
951 OnClickListener mLteRamDumpHandler = new OnClickListener() {
952 @Override
953 public void onClick(View v) {
954 Log.d(TAG, String.format("toggle %s: currently %s",
955 PROPERTY_LTE_RAM_DUMP, (isSmsOverImsEnabled() ? "on":"off")));
956 boolean newValue = !isLteRamDumpEnabled();
957 SystemProperties.set(PROPERTY_LTE_RAM_DUMP, newValue ? "1":"0");
958 updateLteRamDumpState();
959 }
960 };
961
962 private boolean isLteRamDumpEnabled() {
963 return SystemProperties.getBoolean(PROPERTY_LTE_RAM_DUMP, false);
964 }
965
966 private void updateLteRamDumpState() {
967 Log.d(TAG, "updateLteRamDumpState isLteRamDumpEnabled()=" + isLteRamDumpEnabled());
968 String buttonText = isLteRamDumpEnabled() ?
969 getString(R.string.lte_ram_dump_off) :
970 getString(R.string.lte_ram_dump_on);
971 lteRamDumpButton.setText(buttonText);
972 }
973
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800974 OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
975 public void onClick(View v) {
Wink Savillec3886682009-04-02 11:00:56 -0700976 phone.disableDnsCheck(!phone.isDnsCheckDisabled());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800977 updateDnsCheckState();
978 }
979 };
johnwang342101a2009-09-23 16:22:34 -0700980
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800981 OnClickListener mOemInfoButtonHandler = new OnClickListener() {
982 public void onClick(View v) {
983 Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
984 try {
985 startActivity(intent);
986 } catch (android.content.ActivityNotFoundException ex) {
987 Log.d(TAG, "OEM-specific Info/Settings Activity Not Found : " + ex);
988 // If the activity does not exist, there are no OEM
989 // settings, and so we can just do nothing...
990 }
991 }
992 };
993
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800994 OnClickListener mPingButtonHandler = new OnClickListener() {
995 public void onClick(View v) {
996 updatePingState();
997 }
998 };
999
1000 OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
1001 public void onClick(View v) {
1002 updateSmscButton.setEnabled(false);
jsh21dd4072009-05-12 11:26:55 -07001003 phone.setSmscAddress(smsc.getText().toString(),
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001004 mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
1005 }
1006 };
1007
1008 OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
1009 public void onClick(View v) {
1010 refreshSmsc();
1011 }
1012 };
1013
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001014 AdapterView.OnItemSelectedListener
1015 mPreferredNetworkHandler = new AdapterView.OnItemSelectedListener() {
1016 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1017 Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
Ricardo Cerqueira32310ee2012-04-12 23:34:38 +01001018 if (pos>=0 && pos<=(mPreferredNetworkLabels.length - 2)) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001019 phone.setPreferredNetworkType(pos, msg);
1020 }
1021 }
1022
1023 public void onNothingSelected(AdapterView parent) {
1024 }
1025 };
1026
1027 private String[] mPreferredNetworkLabels = {
jsh87fa11b2009-08-18 18:00:15 -07001028 "WCDMA preferred",
1029 "GSM only",
1030 "WCDMA only",
1031 "GSM auto (PRL)",
1032 "CDMA auto (PRL)",
1033 "CDMA only",
1034 "EvDo only",
1035 "GSM/CDMA auto (PRL)",
Ricardo Cerqueira32310ee2012-04-12 23:34:38 +01001036 "LTE/CDMA auto (PRL)",
1037 "LTE/GSM auto (PRL)",
1038 "LTE/GSM/CDMA auto (PRL)",
1039 "LTE only",
jsh87fa11b2009-08-18 18:00:15 -07001040 "Unknown"};
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001041}