blob: 0940e44509dac9e2874b9661a0c6f830efcd04c0 [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;
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;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080034import android.telephony.CellLocation;
35import android.telephony.PhoneStateListener;
36import android.telephony.ServiceState;
37import android.telephony.TelephonyManager;
38import android.telephony.NeighboringCellInfo;
jsh534f5ae2009-09-24 09:19:22 -070039import android.telephony.cdma.CdmaCellLocation;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080040import android.telephony.gsm.GsmCellLocation;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080041import android.util.Log;
42import android.view.Menu;
43import android.view.MenuItem;
44import android.view.View;
45import android.view.View.OnClickListener;
46import android.widget.AdapterView;
47import android.widget.ArrayAdapter;
48import android.widget.Button;
49import android.widget.Spinner;
50import android.widget.TextView;
51import android.widget.EditText;
52
53import com.android.internal.telephony.Phone;
Wink Saville55434042012-06-14 12:33:43 -070054import com.android.internal.telephony.PhoneConstants;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080055import com.android.internal.telephony.PhoneFactory;
56import com.android.internal.telephony.PhoneStateIntentReceiver;
57import com.android.internal.telephony.TelephonyProperties;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080058import org.apache.http.HttpResponse;
59import org.apache.http.client.HttpClient;
60import org.apache.http.client.methods.HttpGet;
61import org.apache.http.impl.client.DefaultHttpClient;
62
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080063import java.io.IOException;
64import java.net.UnknownHostException;
65import java.util.ArrayList;
66import java.util.List;
67
68public class RadioInfo extends Activity {
69 private final String TAG = "phone";
johnwang342101a2009-09-23 16:22:34 -070070
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080071 private static final int EVENT_PHONE_STATE_CHANGED = 100;
72 private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 200;
73 private static final int EVENT_SERVICE_STATE_CHANGED = 300;
74 private static final int EVENT_CFI_CHANGED = 302;
75
76 private static final int EVENT_QUERY_PREFERRED_TYPE_DONE = 1000;
77 private static final int EVENT_SET_PREFERRED_TYPE_DONE = 1001;
78 private static final int EVENT_QUERY_NEIGHBORING_CIDS_DONE = 1002;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080079 private static final int EVENT_QUERY_SMSC_DONE = 1005;
80 private static final int EVENT_UPDATE_SMSC_DONE = 1006;
81
82 private static final int MENU_ITEM_SELECT_BAND = 0;
83 private static final int MENU_ITEM_VIEW_ADN = 1;
84 private static final int MENU_ITEM_VIEW_FDN = 2;
85 private static final int MENU_ITEM_VIEW_SDN = 3;
86 private static final int MENU_ITEM_GET_PDP_LIST = 4;
87 private static final int MENU_ITEM_TOGGLE_DATA = 5;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +080088
89 static final String ENABLE_DATA_STR = "Enable data connection";
90 static final String DISABLE_DATA_STR = "Disable data connection";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080091
Wink Savillec3886682009-04-02 11:00:56 -070092 private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080093 private TextView number;
94 private TextView callState;
95 private TextView operatorName;
96 private TextView roamingState;
97 private TextView gsmState;
98 private TextView gprsState;
99 private TextView network;
100 private TextView dBm;
101 private TextView mMwi;
102 private TextView mCfi;
103 private TextView mLocation;
104 private TextView mNeighboringCids;
Wink Saville79bff2a2012-06-01 14:37:21 -0700105 private TextView mCellInfo;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800106 private TextView resets;
107 private TextView attempts;
108 private TextView successes;
109 private TextView disconnects;
110 private TextView sentSinceReceived;
111 private TextView sent;
112 private TextView received;
113 private TextView mPingIpAddr;
114 private TextView mPingHostname;
115 private TextView mHttpClientTest;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800116 private TextView dnsCheckState;
117 private EditText smsc;
118 private Button radioPowerButton;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800119 private Button dnsCheckToggleButton;
120 private Button pingTestButton;
121 private Button updateSmscButton;
122 private Button refreshSmscButton;
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800123 private Button oemInfoButton;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800124 private Spinner preferredNetworkType;
125
126 private TelephonyManager mTelephonyManager;
127 private Phone phone = null;
128 private PhoneStateIntentReceiver mPhoneStateReceiver;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800129
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800130 private String mPingIpAddrResult;
131 private String mPingHostnameResult;
132 private String mHttpClientTestResult;
133 private boolean mMwiValue = false;
134 private boolean mCfiValue = false;
Wink Saville79bff2a2012-06-01 14:37:21 -0700135 private List<CellInfo> mCellInfoValue;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800136
137 private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
138 @Override
139 public void onDataConnectionStateChanged(int state) {
140 updateDataState();
141 updateDataStats();
142 updatePdpList();
143 updateNetworkType();
144 }
145
146 @Override
147 public void onDataActivity(int direction) {
148 updateDataStats2();
149 }
150
151 @Override
152 public void onCellLocationChanged(CellLocation location) {
153 updateLocation(location);
154 }
155
156 @Override
157 public void onMessageWaitingIndicatorChanged(boolean mwi) {
158 mMwiValue = mwi;
159 updateMessageWaiting();
160 }
161
162 @Override
163 public void onCallForwardingIndicatorChanged(boolean cfi) {
164 mCfiValue = cfi;
165 updateCallRedirect();
166 }
Wink Saville79bff2a2012-06-01 14:37:21 -0700167
168 @Override
169 public void onCellInfoChanged(List<CellInfo> arrayCi) {
170 Log.d(TAG, "[RadioInfo] onCellInfoChanged: arrayCi=" + arrayCi);
171 mCellInfoValue = arrayCi;
172 updateCellInfoTv();
173 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800174 };
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);
Wink Saville79bff2a2012-06-01 14:37:21 -0700266 mCellInfo = (TextView) findViewById(R.id.cellinfo);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800267
268 resets = (TextView) findViewById(R.id.resets);
269 attempts = (TextView) findViewById(R.id.attempts);
270 successes = (TextView) findViewById(R.id.successes);
271 disconnects = (TextView) findViewById(R.id.disconnects);
272 sentSinceReceived = (TextView) findViewById(R.id.sentSinceReceived);
273 sent = (TextView) findViewById(R.id.sent);
274 received = (TextView) findViewById(R.id.received);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800275 smsc = (EditText) findViewById(R.id.smsc);
276 dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
277
278 mPingIpAddr = (TextView) findViewById(R.id.pingIpAddr);
279 mPingHostname = (TextView) findViewById(R.id.pingHostname);
280 mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
281
282 preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
283 ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
284 android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
johnwang342101a2009-09-23 16:22:34 -0700285 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800286 preferredNetworkType.setAdapter(adapter);
287 preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
288
289 radioPowerButton = (Button) findViewById(R.id.radio_power);
290 radioPowerButton.setOnClickListener(mPowerButtonHandler);
291
Wink Saville1e596f32011-09-19 14:24:39 -0700292 imsRegRequiredButton = (Button) findViewById(R.id.ims_reg_required);
293 imsRegRequiredButton.setOnClickListener(mImsRegRequiredHandler);
294
Wink Saville382a75b2011-09-22 15:17:00 -0700295 smsOverImsButton = (Button) findViewById(R.id.sms_over_ims);
296 smsOverImsButton.setOnClickListener(mSmsOverImsHandler);
297
Wink Saville426fc662011-09-25 14:39:02 -0700298 lteRamDumpButton = (Button) findViewById(R.id.lte_ram_dump);
299 lteRamDumpButton.setOnClickListener(mLteRamDumpHandler);
300
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800301 pingTestButton = (Button) findViewById(R.id.ping_test);
302 pingTestButton.setOnClickListener(mPingButtonHandler);
303 updateSmscButton = (Button) findViewById(R.id.update_smsc);
304 updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
305 refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
306 refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
307 dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
308 dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
johnwang342101a2009-09-23 16:22:34 -0700309
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800310 oemInfoButton = (Button) findViewById(R.id.oem_info);
311 oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
312 PackageManager pm = getPackageManager();
313 Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
314 List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
315 if (oemInfoIntentList.size() == 0) {
316 oemInfoButton.setEnabled(false);
317 }
318
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800319 mPhoneStateReceiver = new PhoneStateIntentReceiver(this, mHandler);
320 mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED);
321 mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED);
322 mPhoneStateReceiver.notifyPhoneCallState(EVENT_PHONE_STATE_CHANGED);
johnwang342101a2009-09-23 16:22:34 -0700323
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800324 phone.getPreferredNetworkType(
325 mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
326 phone.getNeighboringCids(
327 mHandler.obtainMessage(EVENT_QUERY_NEIGHBORING_CIDS_DONE));
328
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800329 CellLocation.requestLocationUpdate();
Wink Saville79bff2a2012-06-01 14:37:21 -0700330
331 // Get current cell info
332 mCellInfoValue = mTelephonyManager.getAllCellInfo();
333 Log.d(TAG, "[RadioInfo] onCreate: mCellInfoValue=" + mCellInfoValue);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800334 }
335
336 @Override
337 protected void onResume() {
338 super.onResume();
339
340 updatePhoneState();
341 updateSignalStrength();
342 updateMessageWaiting();
343 updateCallRedirect();
344 updateServiceState();
345 updateLocation(mTelephonyManager.getCellLocation());
346 updateDataState();
347 updateDataStats();
348 updateDataStats2();
349 updatePowerState();
Wink Saville1e596f32011-09-19 14:24:39 -0700350 updateImsRegRequiredState();
Wink Saville382a75b2011-09-22 15:17:00 -0700351 updateSmsOverImsState();
Wink Saville426fc662011-09-25 14:39:02 -0700352 updateLteRamDumpState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800353 updateProperties();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800354 updateDnsCheckState();
355
356 Log.i(TAG, "[RadioInfo] onResume: register phone & data intents");
357
358 mPhoneStateReceiver.registerIntent();
359 mTelephonyManager.listen(mPhoneStateListener,
360 PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
361 | PhoneStateListener.LISTEN_DATA_ACTIVITY
362 | PhoneStateListener.LISTEN_CELL_LOCATION
363 | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
Wink Saville79bff2a2012-06-01 14:37:21 -0700364 | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
365 | PhoneStateListener.LISTEN_CELL_INFO);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800366 }
367
368 @Override
369 public void onPause() {
370 super.onPause();
371
372 Log.i(TAG, "[RadioInfo] onPause: unregister phone & data intents");
373
374 mPhoneStateReceiver.unregisterIntent();
375 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
376 }
377
378 @Override
379 public boolean onCreateOptionsMenu(Menu menu) {
Wink Savillec3886682009-04-02 11:00:56 -0700380 menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label)
381 .setOnMenuItemClickListener(mSelectBandCallback)
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800382 .setAlphabeticShortcut('b');
383 menu.add(1, MENU_ITEM_VIEW_ADN, 0,
384 R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
385 menu.add(1, MENU_ITEM_VIEW_FDN, 0,
386 R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
387 menu.add(1, MENU_ITEM_VIEW_SDN, 0,
388 R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
389 menu.add(1, MENU_ITEM_GET_PDP_LIST,
390 0, R.string.radioInfo_menu_getPDP).setOnMenuItemClickListener(mGetPdpList);
391 menu.add(1, MENU_ITEM_TOGGLE_DATA,
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800392 0, DISABLE_DATA_STR).setOnMenuItemClickListener(mToggleData);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800393 return true;
394 }
395
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800396 @Override
Wink Savillec3886682009-04-02 11:00:56 -0700397 public boolean onPrepareOptionsMenu(Menu menu) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800398 // Get the TOGGLE DATA menu item in the right state.
399 MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
400 int state = mTelephonyManager.getDataState();
401 boolean visible = true;
402
403 switch (state) {
404 case TelephonyManager.DATA_CONNECTED:
405 case TelephonyManager.DATA_SUSPENDED:
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800406 item.setTitle(DISABLE_DATA_STR);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800407 break;
408 case TelephonyManager.DATA_DISCONNECTED:
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800409 item.setTitle(ENABLE_DATA_STR);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800410 break;
411 default:
412 visible = false;
413 break;
414 }
415 item.setVisible(visible);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800416 return true;
417 }
418
419 private boolean isRadioOn() {
420 return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
421 }
johnwang342101a2009-09-23 16:22:34 -0700422
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800423 private void updatePowerState() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800424 String buttonText = isRadioOn() ?
425 getString(R.string.turn_off_radio) :
426 getString(R.string.turn_on_radio);
Wink Savillec3886682009-04-02 11:00:56 -0700427 radioPowerButton.setText(buttonText);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800428 }
429
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800430 private void updateDnsCheckState() {
Mike Lockwood5304c7e2009-04-05 11:37:45 -0700431 dnsCheckState.setText(phone.isDnsCheckDisabled() ?
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800432 "0.0.0.0 allowed" :"0.0.0.0 not allowed");
433 }
Wink Savillee2a14e32009-05-29 14:06:30 -0700434
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800435 private final void
436 updateSignalStrength() {
Wink Savillee2a14e32009-05-29 14:06:30 -0700437 // TODO PhoneStateIntentReceiver is deprecated and PhoneStateListener
438 // should probably used instead.
439 int state = mPhoneStateReceiver.getServiceState().getState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800440 Resources r = getResources();
441
442 if ((ServiceState.STATE_OUT_OF_SERVICE == state) ||
443 (ServiceState.STATE_POWER_OFF == state)) {
444 dBm.setText("0");
445 }
Wink Savillee2a14e32009-05-29 14:06:30 -0700446
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800447 int signalDbm = mPhoneStateReceiver.getSignalStrengthDbm();
Wink Savillee2a14e32009-05-29 14:06:30 -0700448
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800449 if (-1 == signalDbm) signalDbm = 0;
450
Wink Saville882c74a2011-02-17 12:00:03 -0800451 int signalAsu = mPhoneStateReceiver.getSignalStrengthLevelAsu();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800452
453 if (-1 == signalAsu) signalAsu = 0;
454
455 dBm.setText(String.valueOf(signalDbm) + " "
456 + r.getString(R.string.radioInfo_display_dbm) + " "
457 + String.valueOf(signalAsu) + " "
458 + r.getString(R.string.radioInfo_display_asu));
459 }
460
461 private final void updateLocation(CellLocation location) {
jsh534f5ae2009-09-24 09:19:22 -0700462 Resources r = getResources();
Wink Savillec3886682009-04-02 11:00:56 -0700463 if (location instanceof GsmCellLocation) {
464 GsmCellLocation loc = (GsmCellLocation)location;
jsh534f5ae2009-09-24 09:19:22 -0700465 int lac = loc.getLac();
466 int cid = loc.getCid();
467 mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
468 + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
469 + " "
470 + r.getString(R.string.radioInfo_cid) + " = "
471 + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
472 } else if (location instanceof CdmaCellLocation) {
473 CdmaCellLocation loc = (CdmaCellLocation)location;
474 int bid = loc.getBaseStationId();
475 int sid = loc.getSystemId();
476 int nid = loc.getNetworkId();
477 int lat = loc.getBaseStationLatitude();
478 int lon = loc.getBaseStationLongitude();
479 mLocation.setText("BID = "
480 + ((bid == -1) ? "unknown" : Integer.toHexString(bid))
481 + " "
482 + "SID = "
483 + ((sid == -1) ? "unknown" : Integer.toHexString(sid))
484 + " "
485 + "NID = "
486 + ((nid == -1) ? "unknown" : Integer.toHexString(nid))
487 + "\n"
488 + "LAT = "
489 + ((lat == -1) ? "unknown" : Integer.toHexString(lat))
490 + " "
491 + "LONG = "
492 + ((lon == -1) ? "unknown" : Integer.toHexString(lon)));
493 } else {
494 mLocation.setText("unknown");
Wink Savillec3886682009-04-02 11:00:56 -0700495 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800496
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800497
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800498 }
499
500 private final void updateNeighboringCids(ArrayList<NeighboringCellInfo> cids) {
johnwangf02c65f2009-09-25 17:26:54 -0700501 StringBuilder sb = new StringBuilder();
502
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800503 if (cids != null) {
504 if ( cids.isEmpty() ) {
johnwangf02c65f2009-09-25 17:26:54 -0700505 sb.append("no neighboring cells");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800506 } else {
507 for (NeighboringCellInfo cell : cids) {
johnwangf02c65f2009-09-25 17:26:54 -0700508 sb.append(cell.toString()).append(" ");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800509 }
510 }
511 } else {
johnwangf02c65f2009-09-25 17:26:54 -0700512 sb.append("unknown");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800513 }
johnwangf02c65f2009-09-25 17:26:54 -0700514 mNeighboringCids.setText(sb.toString());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800515 }
516
Wink Saville79bff2a2012-06-01 14:37:21 -0700517 private final void updateCellInfoTv() {
518 StringBuilder value = new StringBuilder();
519 if (mCellInfoValue != null) {
520 int index = 0;
521 for (CellInfo ci : mCellInfoValue) {
522 value.append('[');
523 value.append(index);
524 value.append("]=");
525 value.append(ci.toString());
526 if (++index < mCellInfoValue.size()) {
527 value.append("\n");
528 }
529 }
530 }
531 mCellInfo.setText(value.toString());
532 }
533
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800534 private final void
535 updateMessageWaiting() {
536 mMwi.setText(String.valueOf(mMwiValue));
537 }
538
539 private final void
540 updateCallRedirect() {
541 mCfi.setText(String.valueOf(mCfiValue));
542 }
543
544
545 private final void
546 updateServiceState() {
547 ServiceState serviceState = mPhoneStateReceiver.getServiceState();
548 int state = serviceState.getState();
549 Resources r = getResources();
550 String display = r.getString(R.string.radioInfo_unknown);
johnwang342101a2009-09-23 16:22:34 -0700551
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800552 switch (state) {
553 case ServiceState.STATE_IN_SERVICE:
554 display = r.getString(R.string.radioInfo_service_in);
555 break;
556 case ServiceState.STATE_OUT_OF_SERVICE:
557 case ServiceState.STATE_EMERGENCY_ONLY:
558 display = r.getString(R.string.radioInfo_service_emergency);
559 break;
560 case ServiceState.STATE_POWER_OFF:
561 display = r.getString(R.string.radioInfo_service_off);
562 break;
563 }
johnwang342101a2009-09-23 16:22:34 -0700564
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800565 gsmState.setText(display);
johnwang342101a2009-09-23 16:22:34 -0700566
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800567 if (serviceState.getRoaming()) {
568 roamingState.setText(R.string.radioInfo_roaming_in);
569 } else {
570 roamingState.setText(R.string.radioInfo_roaming_not);
571 }
572
573 operatorName.setText(serviceState.getOperatorAlphaLong());
574 }
575
576 private final void
577 updatePhoneState() {
Wink Saville55434042012-06-14 12:33:43 -0700578 PhoneConstants.State state = mPhoneStateReceiver.getPhoneState();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800579 Resources r = getResources();
580 String display = r.getString(R.string.radioInfo_unknown);
581
582 switch (state) {
583 case IDLE:
584 display = r.getString(R.string.radioInfo_phone_idle);
585 break;
586 case RINGING:
587 display = r.getString(R.string.radioInfo_phone_ringing);
588 break;
589 case OFFHOOK:
590 display = r.getString(R.string.radioInfo_phone_offhook);
591 break;
592 }
593
594 callState.setText(display);
595 }
596
597 private final void
598 updateDataState() {
599 int state = mTelephonyManager.getDataState();
600 Resources r = getResources();
601 String display = r.getString(R.string.radioInfo_unknown);
602
603 switch (state) {
604 case TelephonyManager.DATA_CONNECTED:
605 display = r.getString(R.string.radioInfo_data_connected);
606 break;
607 case TelephonyManager.DATA_CONNECTING:
608 display = r.getString(R.string.radioInfo_data_connecting);
609 break;
610 case TelephonyManager.DATA_DISCONNECTED:
611 display = r.getString(R.string.radioInfo_data_disconnected);
612 break;
613 case TelephonyManager.DATA_SUSPENDED:
614 display = r.getString(R.string.radioInfo_data_suspended);
615 break;
616 }
johnwang342101a2009-09-23 16:22:34 -0700617
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800618 gprsState.setText(display);
619 }
620
621 private final void updateNetworkType() {
622 Resources r = getResources();
623 String display = SystemProperties.get(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
624 r.getString(R.string.radioInfo_unknown));
625
626 network.setText(display);
627 }
628
629 private final void
630 updateProperties() {
631 String s;
632 Resources r = getResources();
633
634 s = phone.getDeviceId();
johnwang342101a2009-09-23 16:22:34 -0700635 if (s == null) s = r.getString(R.string.radioInfo_unknown);
Wink Savillec3886682009-04-02 11:00:56 -0700636 mDeviceId.setText(s);
johnwang342101a2009-09-23 16:22:34 -0700637
Wink Savillec3886682009-04-02 11:00:56 -0700638
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800639 s = phone.getLine1Number();
johnwang342101a2009-09-23 16:22:34 -0700640 if (s == null) s = r.getString(R.string.radioInfo_unknown);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800641 number.setText(s);
642 }
643
644 private final void updateDataStats() {
645 String s;
646
647 s = SystemProperties.get("net.gsm.radio-reset", "0");
648 resets.setText(s);
649
650 s = SystemProperties.get("net.gsm.attempt-gprs", "0");
651 attempts.setText(s);
652
653 s = SystemProperties.get("net.gsm.succeed-gprs", "0");
654 successes.setText(s);
655
656 //s = SystemProperties.get("net.gsm.disconnect", "0");
657 //disconnects.setText(s);
658
659 s = SystemProperties.get("net.ppp.reset-by-timeout", "0");
660 sentSinceReceived.setText(s);
661 }
662
663 private final void updateDataStats2() {
664 Resources r = getResources();
665
Jeff Sharkey93029862011-05-27 18:26:15 -0700666 long txPackets = TrafficStats.getMobileTxPackets();
667 long rxPackets = TrafficStats.getMobileRxPackets();
668 long txBytes = TrafficStats.getMobileTxBytes();
669 long rxBytes = TrafficStats.getMobileRxBytes();
johnwang342101a2009-09-23 16:22:34 -0700670
Jeff Sharkey93029862011-05-27 18:26:15 -0700671 String packets = r.getString(R.string.radioInfo_display_packets);
672 String bytes = r.getString(R.string.radioInfo_display_bytes);
johnwang342101a2009-09-23 16:22:34 -0700673
Jeff Sharkey93029862011-05-27 18:26:15 -0700674 sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
675 received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800676 }
677
678 /**
679 * Ping a IP address.
680 */
681 private final void pingIpAddr() {
682 try {
683 // This is hardcoded IP addr. This is for testing purposes.
684 // We would need to get rid of this before release.
685 String ipAddress = "74.125.47.104";
686 Process p = Runtime.getRuntime().exec("ping -c 1 " + ipAddress);
687 int status = p.waitFor();
688 if (status == 0) {
689 mPingIpAddrResult = "Pass";
690 } else {
691 mPingIpAddrResult = "Fail: IP addr not reachable";
692 }
693 } catch (IOException e) {
694 mPingIpAddrResult = "Fail: IOException";
695 } catch (InterruptedException e) {
696 mPingIpAddrResult = "Fail: InterruptedException";
697 }
698 }
699
700 /**
701 * Ping a host name
702 */
703 private final void pingHostname() {
704 try {
johnwang342101a2009-09-23 16:22:34 -0700705 Process p = Runtime.getRuntime().exec("ping -c 1 www.google.com");
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800706 int status = p.waitFor();
707 if (status == 0) {
708 mPingHostnameResult = "Pass";
709 } else {
710 mPingHostnameResult = "Fail: Host unreachable";
711 }
712 } catch (UnknownHostException e) {
713 mPingHostnameResult = "Fail: Unknown Host";
714 } catch (IOException e) {
715 mPingHostnameResult= "Fail: IOException";
716 } catch (InterruptedException e) {
717 mPingHostnameResult = "Fail: InterruptedException";
718 }
719 }
720
721 /**
722 * This function checks for basic functionality of HTTP Client.
723 */
724 private void httpClientTest() {
725 HttpClient client = new DefaultHttpClient();
726 try {
727 HttpGet request = new HttpGet("http://www.google.com");
728 HttpResponse response = client.execute(request);
729 if (response.getStatusLine().getStatusCode() == 200) {
730 mHttpClientTestResult = "Pass";
731 } else {
732 mHttpClientTestResult = "Fail: Code: " + String.valueOf(response);
733 }
734 request.abort();
735 } catch (IOException e) {
736 mHttpClientTestResult = "Fail: IOException";
737 }
738 }
739
740 private void refreshSmsc() {
jsh21dd4072009-05-12 11:26:55 -0700741 phone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800742 }
743
744 private final void updatePingState() {
745 final Handler handler = new Handler();
746 // Set all to unknown since the threads will take a few secs to update.
747 mPingIpAddrResult = getResources().getString(R.string.radioInfo_unknown);
748 mPingHostnameResult = getResources().getString(R.string.radioInfo_unknown);
749 mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
750
751 mPingIpAddr.setText(mPingIpAddrResult);
752 mPingHostname.setText(mPingHostnameResult);
753 mHttpClientTest.setText(mHttpClientTestResult);
754
755 final Runnable updatePingResults = new Runnable() {
756 public void run() {
757 mPingIpAddr.setText(mPingIpAddrResult);
758 mPingHostname.setText(mPingHostnameResult);
759 mHttpClientTest.setText(mHttpClientTestResult);
760 }
761 };
762 Thread ipAddr = new Thread() {
763 @Override
764 public void run() {
765 pingIpAddr();
766 handler.post(updatePingResults);
767 }
768 };
769 ipAddr.start();
770
771 Thread hostname = new Thread() {
772 @Override
773 public void run() {
774 pingHostname();
775 handler.post(updatePingResults);
776 }
777 };
778 hostname.start();
779
780 Thread httpClient = new Thread() {
781 @Override
782 public void run() {
783 httpClientTest();
784 handler.post(updatePingResults);
785 }
786 };
787 httpClient.start();
788 }
789
790 private final void updatePdpList() {
791 StringBuilder sb = new StringBuilder("========DATA=======\n");
792
Wink Saville2c3ec092011-04-20 10:24:36 -0700793// List<DataConnection> dcs = phone.getCurrentDataConnectionList();
794//
795// for (DataConnection dc : dcs) {
796// sb.append(" State=").append(dc.getStateAsString()).append("\n");
797// if (dc.isActive()) {
798// long timeElapsed =
799// (System.currentTimeMillis() - dc.getConnectionTime())/1000;
800// sb.append(" connected at ")
801// .append(DateUtils.timeString(dc.getConnectionTime()))
802// .append(" and elapsed ")
803// .append(DateUtils.formatElapsedTime(timeElapsed));
804//
805// if (dc instanceof GsmDataConnection) {
806// GsmDataConnection pdp = (GsmDataConnection)dc;
807// sb.append("\n to ")
808// .append(pdp.getApn().toString());
809// }
810// sb.append("\nLinkProperties: ");
811// sb.append(phone.getLinkProperties(phone.getActiveApnTypes()[0]).toString());
812// } else if (dc.isInactive()) {
813// sb.append(" disconnected with last try at ")
814// .append(DateUtils.timeString(dc.getLastFailTime()))
815// .append("\n fail because ")
816// .append(dc.getLastFailCause().toString());
817// } else {
818// if (dc instanceof GsmDataConnection) {
819// GsmDataConnection pdp = (GsmDataConnection)dc;
820// sb.append(" is connecting to ")
821// .append(pdp.getApn().toString());
822// } else {
823// sb.append(" is connecting");
824// }
825// }
826// sb.append("\n===================");
827// }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800828
829 disconnects.setText(sb.toString());
830 }
831
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800832 private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
833 public boolean onMenuItemClick(MenuItem item) {
834 Intent intent = new Intent(Intent.ACTION_VIEW);
835 // XXX We need to specify the component here because if we don't
836 // the activity manager will try to resolve the type by calling
837 // the content provider, which causes it to be loaded in a process
838 // other than the Dialer process, which causes a lot of stuff to
839 // break.
840 intent.setClassName("com.android.phone",
841 "com.android.phone.SimContacts");
842 startActivity(intent);
843 return true;
844 }
845 };
846
847 private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
848 public boolean onMenuItemClick(MenuItem item) {
849 Intent intent = new Intent(Intent.ACTION_VIEW);
850 // XXX We need to specify the component here because if we don't
851 // the activity manager will try to resolve the type by calling
852 // the content provider, which causes it to be loaded in a process
853 // other than the Dialer process, which causes a lot of stuff to
854 // break.
855 intent.setClassName("com.android.phone",
856 "com.android.phone.FdnList");
857 startActivity(intent);
858 return true;
859 }
860 };
861
862 private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
863 public boolean onMenuItemClick(MenuItem item) {
864 Intent intent = new Intent(
Wink Savillec3886682009-04-02 11:00:56 -0700865 Intent.ACTION_VIEW, Uri.parse("content://icc/sdn"));
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800866 // XXX We need to specify the component here because if we don't
867 // the activity manager will try to resolve the type by calling
868 // the content provider, which causes it to be loaded in a process
869 // other than the Dialer process, which causes a lot of stuff to
870 // break.
871 intent.setClassName("com.android.phone",
872 "com.android.phone.ADNList");
873 startActivity(intent);
874 return true;
875 }
876 };
877
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800878 private MenuItem.OnMenuItemClickListener mGetPdpList = new MenuItem.OnMenuItemClickListener() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800879 public boolean onMenuItemClick(MenuItem item) {
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +0800880 phone.getDataCallList(null);
881 return true;
882 }
883 };
884
885 private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
886 public boolean onMenuItemClick(MenuItem item) {
887 Intent intent = new Intent();
888 intent.setClass(RadioInfo.this, BandMode.class);
889 startActivity(intent);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800890 return true;
891 }
892 };
johnwang342101a2009-09-23 16:22:34 -0700893
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800894 private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
895 public boolean onMenuItemClick(MenuItem item) {
Robert Greenwalt99be5002010-11-24 17:20:59 -0800896 ConnectivityManager cm =
897 (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800898 int state = mTelephonyManager.getDataState();
899 switch (state) {
900 case TelephonyManager.DATA_CONNECTED:
Robert Greenwalt99be5002010-11-24 17:20:59 -0800901 cm.setMobileDataEnabled(false);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800902 break;
903 case TelephonyManager.DATA_DISCONNECTED:
Robert Greenwalt99be5002010-11-24 17:20:59 -0800904 cm.setMobileDataEnabled(true);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800905 break;
906 default:
907 // do nothing
908 break;
909 }
910 return true;
911 }
912 };
913
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800914 OnClickListener mPowerButtonHandler = new OnClickListener() {
915 public void onClick(View v) {
916 //log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
917 phone.setRadioPower(!isRadioOn());
918 }
919 };
920
Wink Saville426fc662011-09-25 14:39:02 -0700921 private Button imsRegRequiredButton;
922 static final String PROPERTY_IMS_REG_REQUIRED = "persist.radio.imsregrequired";
Wink Saville1e596f32011-09-19 14:24:39 -0700923 OnClickListener mImsRegRequiredHandler = new OnClickListener() {
924 @Override
925 public void onClick(View v) {
926 Log.d(TAG, String.format("toggle %s: currently %s",
Wink Saville426fc662011-09-25 14:39:02 -0700927 PROPERTY_IMS_REG_REQUIRED, (isImsRegRequired() ? "on":"off")));
Wink Saville1e596f32011-09-19 14:24:39 -0700928 boolean newValue = !isImsRegRequired();
Wink Saville426fc662011-09-25 14:39:02 -0700929 SystemProperties.set(PROPERTY_IMS_REG_REQUIRED,
Wink Saville1e596f32011-09-19 14:24:39 -0700930 newValue ? "1":"0");
931 updateImsRegRequiredState();
932 }
933 };
934
Wink Saville426fc662011-09-25 14:39:02 -0700935 private boolean isImsRegRequired() {
936 return SystemProperties.getBoolean(PROPERTY_IMS_REG_REQUIRED, false);
937 }
938
939 private void updateImsRegRequiredState() {
940 Log.d(TAG, "updateImsRegRequiredState isImsRegRequired()=" + isImsRegRequired());
941 String buttonText = isImsRegRequired() ?
942 getString(R.string.ims_reg_required_off) :
943 getString(R.string.ims_reg_required_on);
944 imsRegRequiredButton.setText(buttonText);
945 }
946
947 private Button smsOverImsButton;
Wink Saville382a75b2011-09-22 15:17:00 -0700948 static final String PROPERTY_SMS_OVER_IMS = "persist.radio.imsallowmtsms";
949 OnClickListener mSmsOverImsHandler = new OnClickListener() {
950 @Override
951 public void onClick(View v) {
952 Log.d(TAG, String.format("toggle %s: currently %s",
953 PROPERTY_SMS_OVER_IMS, (isSmsOverImsEnabled() ? "on":"off")));
954 boolean newValue = !isSmsOverImsEnabled();
955 SystemProperties.set(PROPERTY_SMS_OVER_IMS, newValue ? "1":"0");
956 updateSmsOverImsState();
957 }
958 };
959
Wink Saville426fc662011-09-25 14:39:02 -0700960 private boolean isSmsOverImsEnabled() {
961 return SystemProperties.getBoolean(PROPERTY_SMS_OVER_IMS, false);
962 }
963
964 private void updateSmsOverImsState() {
965 Log.d(TAG, "updateSmsOverImsState isSmsOverImsEnabled()=" + isSmsOverImsEnabled());
966 String buttonText = isSmsOverImsEnabled() ?
967 getString(R.string.sms_over_ims_off) :
968 getString(R.string.sms_over_ims_on);
969 smsOverImsButton.setText(buttonText);
970 }
971
972 private Button lteRamDumpButton;
973 static final String PROPERTY_LTE_RAM_DUMP = "persist.radio.ramdump";
974 OnClickListener mLteRamDumpHandler = new OnClickListener() {
975 @Override
976 public void onClick(View v) {
977 Log.d(TAG, String.format("toggle %s: currently %s",
978 PROPERTY_LTE_RAM_DUMP, (isSmsOverImsEnabled() ? "on":"off")));
979 boolean newValue = !isLteRamDumpEnabled();
980 SystemProperties.set(PROPERTY_LTE_RAM_DUMP, newValue ? "1":"0");
981 updateLteRamDumpState();
982 }
983 };
984
985 private boolean isLteRamDumpEnabled() {
986 return SystemProperties.getBoolean(PROPERTY_LTE_RAM_DUMP, false);
987 }
988
989 private void updateLteRamDumpState() {
990 Log.d(TAG, "updateLteRamDumpState isLteRamDumpEnabled()=" + isLteRamDumpEnabled());
991 String buttonText = isLteRamDumpEnabled() ?
992 getString(R.string.lte_ram_dump_off) :
993 getString(R.string.lte_ram_dump_on);
994 lteRamDumpButton.setText(buttonText);
995 }
996
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800997 OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
998 public void onClick(View v) {
Wink Savillec3886682009-04-02 11:00:56 -0700999 phone.disableDnsCheck(!phone.isDnsCheckDisabled());
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001000 updateDnsCheckState();
1001 }
1002 };
johnwang342101a2009-09-23 16:22:34 -07001003
Tammo Spalinka5f4c8f2009-10-15 20:08:58 +08001004 OnClickListener mOemInfoButtonHandler = new OnClickListener() {
1005 public void onClick(View v) {
1006 Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
1007 try {
1008 startActivity(intent);
1009 } catch (android.content.ActivityNotFoundException ex) {
1010 Log.d(TAG, "OEM-specific Info/Settings Activity Not Found : " + ex);
1011 // If the activity does not exist, there are no OEM
1012 // settings, and so we can just do nothing...
1013 }
1014 }
1015 };
1016
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001017 OnClickListener mPingButtonHandler = new OnClickListener() {
1018 public void onClick(View v) {
1019 updatePingState();
1020 }
1021 };
1022
1023 OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
1024 public void onClick(View v) {
1025 updateSmscButton.setEnabled(false);
jsh21dd4072009-05-12 11:26:55 -07001026 phone.setSmscAddress(smsc.getText().toString(),
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001027 mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
1028 }
1029 };
1030
1031 OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
1032 public void onClick(View v) {
1033 refreshSmsc();
1034 }
1035 };
1036
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001037 AdapterView.OnItemSelectedListener
1038 mPreferredNetworkHandler = new AdapterView.OnItemSelectedListener() {
1039 public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1040 Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
Ricardo Cerqueira32310ee2012-04-12 23:34:38 +01001041 if (pos>=0 && pos<=(mPreferredNetworkLabels.length - 2)) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001042 phone.setPreferredNetworkType(pos, msg);
1043 }
1044 }
1045
1046 public void onNothingSelected(AdapterView parent) {
1047 }
1048 };
1049
1050 private String[] mPreferredNetworkLabels = {
jsh87fa11b2009-08-18 18:00:15 -07001051 "WCDMA preferred",
1052 "GSM only",
1053 "WCDMA only",
1054 "GSM auto (PRL)",
1055 "CDMA auto (PRL)",
1056 "CDMA only",
1057 "EvDo only",
1058 "GSM/CDMA auto (PRL)",
Ricardo Cerqueira32310ee2012-04-12 23:34:38 +01001059 "LTE/CDMA auto (PRL)",
1060 "LTE/GSM auto (PRL)",
1061 "LTE/GSM/CDMA auto (PRL)",
1062 "LTE only",
jsh87fa11b2009-08-18 18:00:15 -07001063 "Unknown"};
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001064}