1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License.
6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at
7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and
14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License.
15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings;
18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
19afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.Activity;
20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.AlertDialog;
21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.DialogInterface;
22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent;
23a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalinkimport android.content.pm.PackageManager;
24a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalinkimport android.content.pm.ResolveInfo;
25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.SharedPreferences;
26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.res.Resources;
27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.Uri;
28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.AsyncResult;
29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Handler;
31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.INetStatService;
32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Message;
33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.RemoteException;
34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.ServiceManager;
35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.SystemProperties;
36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceManager;
37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.CellLocation;
38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.PhoneStateListener;
39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.ServiceState;
40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.TelephonyManager;
41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.NeighboringCellInfo;
42534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jshimport android.telephony.cdma.CdmaCellLocation;
43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.telephony.gsm.GsmCellLocation;
44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.format.DateUtils;
45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log;
46afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.Menu;
47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.MenuItem;
48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.View;
49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.View.OnClickListener;
50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.AdapterView;
51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.ArrayAdapter;
52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.Button;
53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.Spinner;
54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.TextView;
55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.EditText;
56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
5787fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jshimport com.android.internal.telephony.DataConnection;
58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.Phone;
59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.PhoneFactory;
60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.PhoneStateIntentReceiver;
61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.TelephonyProperties;
620d93697d3a52f7b9db37b403715c3a27678df4ffWink Savilleimport com.android.internal.telephony.gsm.GsmDataConnection;
63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport org.apache.http.HttpResponse;
65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport org.apache.http.client.HttpClient;
66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport org.apache.http.client.methods.HttpGet;
67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport org.apache.http.impl.client.DefaultHttpClient;
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.io.ByteArrayOutputStream;
70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.io.DataOutputStream;
71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.io.IOException;
72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.net.UnknownHostException;
73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.ArrayList;
74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.List;
75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
76a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalinkimport android.util.Log;
77a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink
78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class RadioInfo extends Activity {
79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final String TAG = "phone";
80342101a0729a30587dc4fa79b5f017634bd985c0johnwang
81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_PHONE_STATE_CHANGED = 100;
82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 200;
83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_SERVICE_STATE_CHANGED = 300;
84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_CFI_CHANGED = 302;
85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_QUERY_PREFERRED_TYPE_DONE = 1000;
87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_SET_PREFERRED_TYPE_DONE = 1001;
88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_QUERY_NEIGHBORING_CIDS_DONE = 1002;
89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_QUERY_SMSC_DONE = 1005;
90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int EVENT_UPDATE_SMSC_DONE = 1006;
91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_SELECT_BAND  = 0;
93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_VIEW_ADN     = 1;
94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_VIEW_FDN     = 2;
95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_VIEW_SDN     = 3;
96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_GET_PDP_LIST = 4;
97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_ITEM_TOGGLE_DATA  = 5;
98a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink
99a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    static final String ENABLE_DATA_STR = "Enable data connection";
100a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    static final String DISABLE_DATA_STR = "Disable data connection";
101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
102c38866843e966622346dc8f7b028749cac9c2198Wink Saville    private TextView mDeviceId; //DeviceId is the IMEI in GSM and the MEID in CDMA
103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView number;
104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView callState;
105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView operatorName;
106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView roamingState;
107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView gsmState;
108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView gprsState;
109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView network;
110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView dBm;
111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mMwi;
112afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mCfi;
113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mLocation;
114afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mNeighboringCids;
115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView resets;
116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView attempts;
117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView successes;
118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView disconnects;
119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView sentSinceReceived;
120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView sent;
121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView received;
122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mPingIpAddr;
123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mPingHostname;
124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mHttpClientTest;
125afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView dnsCheckState;
126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditText smsc;
127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button radioPowerButton;
128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button dnsCheckToggleButton;
129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button pingTestButton;
130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button updateSmscButton;
131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button refreshSmscButton;
132a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    private Button oemInfoButton;
133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Spinner preferredNetworkType;
134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TelephonyManager mTelephonyManager;
136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Phone phone = null;
137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private PhoneStateIntentReceiver mPhoneStateReceiver;
138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private INetStatService netstat;
139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mPingIpAddrResult;
141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mPingHostnameResult;
142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mHttpClientTestResult;
143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean mMwiValue = false;
144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean mCfiValue = false;
145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onDataConnectionStateChanged(int state) {
149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateDataState();
150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateDataStats();
151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updatePdpList();
152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateNetworkType();
153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onDataActivity(int direction) {
157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateDataStats2();
158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onCellLocationChanged(CellLocation location) {
162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateLocation(location);
163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onMessageWaitingIndicatorChanged(boolean mwi) {
167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMwiValue = mwi;
168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateMessageWaiting();
169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onCallForwardingIndicatorChanged(boolean cfi) {
173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mCfiValue = cfi;
174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateCallRedirect();
175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Handler mHandler = new Handler() {
179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void handleMessage(Message msg) {
180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            AsyncResult ar;
181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            switch (msg.what) {
182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_PHONE_STATE_CHANGED:
183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updatePhoneState();
184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_SIGNAL_STRENGTH_CHANGED:
187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updateSignalStrength();
188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_SERVICE_STATE_CHANGED:
191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updateServiceState();
192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updatePowerState();
193afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
194afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_QUERY_PREFERRED_TYPE_DONE:
196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception == null) {
198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        int type = ((int[])ar.result)[0];
199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        preferredNetworkType.setSelection(type, true);
200afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    } else {
20187fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                        preferredNetworkType.setSelection(8, true);
202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
204afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_SET_PREFERRED_TYPE_DONE:
205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception != null) {
207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        phone.getPreferredNetworkType(
208afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                                obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_QUERY_NEIGHBORING_CIDS_DONE:
212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception == null) {
214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        updateNeighboringCids((ArrayList<NeighboringCellInfo>)ar.result);
215afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    } else {
216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        mNeighboringCids.setText("unknown");
217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
218afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_QUERY_SMSC_DONE:
220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception != null) {
222afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        smsc.setText("refresh error");
223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    } else {
22421dd407c10bb1bade10233e8468ea6729bcf71efjsh                        smsc.setText((String)ar.result);
225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_UPDATE_SMSC_DONE:
228afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updateSmscButton.setEnabled(true);
229afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
230afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception != null) {
231afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        smsc.setText("update error");
232afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                default:
235afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
236afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
237afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
238afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
239afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
240afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
241afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
242afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onCreate(Bundle icicle) {
243afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
244afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
245afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        setContentView(R.layout.radio_info);
246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
248afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        phone = PhoneFactory.getDefaultPhone();
249afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
250c38866843e966622346dc8f7b028749cac9c2198Wink Saville        mDeviceId= (TextView) findViewById(R.id.imei);
251afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        number = (TextView) findViewById(R.id.number);
252afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        callState = (TextView) findViewById(R.id.call);
253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        operatorName = (TextView) findViewById(R.id.operator);
254afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        roamingState = (TextView) findViewById(R.id.roaming);
255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gsmState = (TextView) findViewById(R.id.gsm);
256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gprsState = (TextView) findViewById(R.id.gprs);
257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        network = (TextView) findViewById(R.id.network);
258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dBm = (TextView) findViewById(R.id.dbm);
259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMwi = (TextView) findViewById(R.id.mwi);
260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mCfi = (TextView) findViewById(R.id.cfi);
261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mLocation = (TextView) findViewById(R.id.location);
262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mNeighboringCids = (TextView) findViewById(R.id.neighboring);
263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
264afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        resets = (TextView) findViewById(R.id.resets);
265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        attempts = (TextView) findViewById(R.id.attempts);
266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        successes = (TextView) findViewById(R.id.successes);
267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        disconnects = (TextView) findViewById(R.id.disconnects);
268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        sentSinceReceived = (TextView) findViewById(R.id.sentSinceReceived);
269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        sent = (TextView) findViewById(R.id.sent);
270afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        received = (TextView) findViewById(R.id.received);
271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        smsc = (EditText) findViewById(R.id.smsc);
272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingIpAddr = (TextView) findViewById(R.id.pingIpAddr);
275afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingHostname = (TextView) findViewById(R.id.pingHostname);
276afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
278afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
280afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
281342101a0729a30587dc4fa79b5f017634bd985c0johnwang        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
282afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        preferredNetworkType.setAdapter(adapter);
283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
285afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        radioPowerButton = (Button) findViewById(R.id.radio_power);
286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        radioPowerButton.setOnClickListener(mPowerButtonHandler);
287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        pingTestButton = (Button) findViewById(R.id.ping_test);
289afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        pingTestButton.setOnClickListener(mPingButtonHandler);
290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateSmscButton = (Button) findViewById(R.id.update_smsc);
291afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
293afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
294afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
295afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
296342101a0729a30587dc4fa79b5f017634bd985c0johnwang
297a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        oemInfoButton = (Button) findViewById(R.id.oem_info);
298a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
299a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        PackageManager pm = getPackageManager();
300a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
301a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
302a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        if (oemInfoIntentList.size() == 0) {
303a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            oemInfoButton.setEnabled(false);
304a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        }
305a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink
306afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver = new PhoneStateIntentReceiver(this, mHandler);
307afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED);
308afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED);
309afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver.notifyPhoneCallState(EVENT_PHONE_STATE_CHANGED);
310342101a0729a30587dc4fa79b5f017634bd985c0johnwang
311afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        phone.getPreferredNetworkType(
312afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
313afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        phone.getNeighboringCids(
314afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHandler.obtainMessage(EVENT_QUERY_NEIGHBORING_CIDS_DONE));
315afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
316afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        netstat = INetStatService.Stub.asInterface(ServiceManager.getService("netstat"));
317afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
318afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        CellLocation.requestLocationUpdate();
319afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
320afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
321afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
322afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onResume() {
323afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
324afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
325afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updatePhoneState();
326afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateSignalStrength();
327afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateMessageWaiting();
328afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateCallRedirect();
329afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateServiceState();
330afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateLocation(mTelephonyManager.getCellLocation());
331afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDataState();
332afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDataStats();
333afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDataStats2();
334afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updatePowerState();
335afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateProperties();
336afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDnsCheckState();
337afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
338afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Log.i(TAG, "[RadioInfo] onResume: register phone & data intents");
339afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
340afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver.registerIntent();
341afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTelephonyManager.listen(mPhoneStateListener,
342afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                  PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
343afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                | PhoneStateListener.LISTEN_DATA_ACTIVITY
344afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                | PhoneStateListener.LISTEN_CELL_LOCATION
345afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
346afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR);
347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
348afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
350afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onPause() {
351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onPause();
352afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
353afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Log.i(TAG, "[RadioInfo] onPause: unregister phone & data intents");
354afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
355afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver.unregisterIntent();
356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
357afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
358afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
359afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
360afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onCreateOptionsMenu(Menu menu) {
361c38866843e966622346dc8f7b028749cac9c2198Wink Saville        menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label)
362c38866843e966622346dc8f7b028749cac9c2198Wink Saville                .setOnMenuItemClickListener(mSelectBandCallback)
363afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                .setAlphabeticShortcut('b');
364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_VIEW_ADN, 0,
365afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
366afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_VIEW_FDN, 0,
367afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
368afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_VIEW_SDN, 0,
369afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
370afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_GET_PDP_LIST,
371afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                0, R.string.radioInfo_menu_getPDP).setOnMenuItemClickListener(mGetPdpList);
372afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_TOGGLE_DATA,
373a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                0, DISABLE_DATA_STR).setOnMenuItemClickListener(mToggleData);
374afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return true;
375afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
376afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
377afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
378c38866843e966622346dc8f7b028749cac9c2198Wink Saville    public boolean onPrepareOptionsMenu(Menu menu) {
379afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Get the TOGGLE DATA menu item in the right state.
380afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
381afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int state = mTelephonyManager.getDataState();
382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        boolean visible = true;
383afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
384afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
385afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_CONNECTED:
386afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_SUSPENDED:
387a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                item.setTitle(DISABLE_DATA_STR);
388afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
389afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_DISCONNECTED:
390a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                item.setTitle(ENABLE_DATA_STR);
391afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
392afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            default:
393afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                visible = false;
394afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
395afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
396afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        item.setVisible(visible);
397afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return true;
398afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
399afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
400afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean isRadioOn() {
401afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
402afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
403342101a0729a30587dc4fa79b5f017634bd985c0johnwang
404afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void updatePowerState() {
405afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String buttonText = isRadioOn() ?
406afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                            getString(R.string.turn_off_radio) :
407afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                            getString(R.string.turn_on_radio);
408c38866843e966622346dc8f7b028749cac9c2198Wink Saville        radioPowerButton.setText(buttonText);
409afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
410afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
411afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void updateDnsCheckState() {
4125304c7e38f89f7616bd4c834a14b4d764356d19bMike Lockwood        dnsCheckState.setText(phone.isDnsCheckDisabled() ?
413afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                "0.0.0.0 allowed" :"0.0.0.0 not allowed");
414afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
415e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville
416afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
417afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateSignalStrength() {
418e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville        // TODO PhoneStateIntentReceiver is deprecated and PhoneStateListener
419e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville        // should probably used instead.
420e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville        int state = mPhoneStateReceiver.getServiceState().getState();
421afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
422afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
423afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if ((ServiceState.STATE_OUT_OF_SERVICE == state) ||
424afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                (ServiceState.STATE_POWER_OFF == state)) {
425afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            dBm.setText("0");
426afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
427e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville
428afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int signalDbm = mPhoneStateReceiver.getSignalStrengthDbm();
429e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville
430afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (-1 == signalDbm) signalDbm = 0;
431afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
432afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int signalAsu = mPhoneStateReceiver.getSignalStrength();
433afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
434afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (-1 == signalAsu) signalAsu = 0;
435afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
436afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dBm.setText(String.valueOf(signalDbm) + " "
437afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            + r.getString(R.string.radioInfo_display_dbm) + "   "
438afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            + String.valueOf(signalAsu) + " "
439afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            + r.getString(R.string.radioInfo_display_asu));
440afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
441afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
442afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateLocation(CellLocation location) {
443534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh        Resources r = getResources();
444c38866843e966622346dc8f7b028749cac9c2198Wink Saville        if (location instanceof GsmCellLocation) {
445c38866843e966622346dc8f7b028749cac9c2198Wink Saville            GsmCellLocation loc = (GsmCellLocation)location;
446534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int lac = loc.getLac();
447534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int cid = loc.getCid();
448534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
449534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
450534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
451534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + r.getString(R.string.radioInfo_cid) + " = "
452534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
453534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh        } else if (location instanceof CdmaCellLocation) {
454534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            CdmaCellLocation loc = (CdmaCellLocation)location;
455534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int bid = loc.getBaseStationId();
456534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int sid = loc.getSystemId();
457534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int nid = loc.getNetworkId();
458534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int lat = loc.getBaseStationLatitude();
459534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int lon = loc.getBaseStationLongitude();
460534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            mLocation.setText("BID = "
461534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((bid == -1) ? "unknown" : Integer.toHexString(bid))
462534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
463534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "SID = "
464534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((sid == -1) ? "unknown" : Integer.toHexString(sid))
465534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
466534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "NID = "
467534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((nid == -1) ? "unknown" : Integer.toHexString(nid))
468534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "\n"
469534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "LAT = "
470534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((lat == -1) ? "unknown" : Integer.toHexString(lat))
471534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
472534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "LONG = "
473534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((lon == -1) ? "unknown" : Integer.toHexString(lon)));
474534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh        } else {
475534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            mLocation.setText("unknown");
476c38866843e966622346dc8f7b028749cac9c2198Wink Saville        }
477afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
478afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
479afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
480afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
481afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateNeighboringCids(ArrayList<NeighboringCellInfo> cids) {
482f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang        StringBuilder sb = new StringBuilder();
483f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang
484afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (cids != null) {
485afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if ( cids.isEmpty() ) {
486f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang                sb.append("no neighboring cells");
487afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
488afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                for (NeighboringCellInfo cell : cids) {
489f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang                    sb.append(cell.toString()).append(" ");
490afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                }
491afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
492afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
493f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang            sb.append("unknown");
494afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
495f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang        mNeighboringCids.setText(sb.toString());
496afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
497afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
498afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
499afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateMessageWaiting() {
500afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMwi.setText(String.valueOf(mMwiValue));
501afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
502afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
503afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
504afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateCallRedirect() {
505afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mCfi.setText(String.valueOf(mCfiValue));
506afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
507afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
508afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
509afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
510afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateServiceState() {
511afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        ServiceState serviceState = mPhoneStateReceiver.getServiceState();
512afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int state = serviceState.getState();
513afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
514afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = r.getString(R.string.radioInfo_unknown);
515342101a0729a30587dc4fa79b5f017634bd985c0johnwang
516afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
517afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_IN_SERVICE:
518afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_service_in);
519afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
520afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_OUT_OF_SERVICE:
521afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_EMERGENCY_ONLY:
522afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_service_emergency);
523afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
524afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_POWER_OFF:
525afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_service_off);
526afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
527afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
528342101a0729a30587dc4fa79b5f017634bd985c0johnwang
529afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gsmState.setText(display);
530342101a0729a30587dc4fa79b5f017634bd985c0johnwang
531afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (serviceState.getRoaming()) {
532afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            roamingState.setText(R.string.radioInfo_roaming_in);
533afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
534afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            roamingState.setText(R.string.radioInfo_roaming_not);
535afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
536afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
537afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        operatorName.setText(serviceState.getOperatorAlphaLong());
538afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
539afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
540afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
541afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updatePhoneState() {
542afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Phone.State state = mPhoneStateReceiver.getPhoneState();
543afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
544afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = r.getString(R.string.radioInfo_unknown);
545afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
546afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
547afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case IDLE:
548afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_phone_idle);
549afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
550afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case RINGING:
551afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_phone_ringing);
552afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
553afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case OFFHOOK:
554afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_phone_offhook);
555afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
556afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
557afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
558afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        callState.setText(display);
559afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
560afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
561afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
562afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateDataState() {
563afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int state = mTelephonyManager.getDataState();
564afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
565afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = r.getString(R.string.radioInfo_unknown);
566afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
567afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
568afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_CONNECTED:
569afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_connected);
570afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
571afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_CONNECTING:
572afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_connecting);
573afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
574afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_DISCONNECTED:
575afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_disconnected);
576afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
577afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_SUSPENDED:
578afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_suspended);
579afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
580afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
581342101a0729a30587dc4fa79b5f017634bd985c0johnwang
582afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gprsState.setText(display);
583afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
584afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
585afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateNetworkType() {
586afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
587afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = SystemProperties.get(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
588afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                r.getString(R.string.radioInfo_unknown));
589afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
590afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        network.setText(display);
591afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
592afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
593afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
594afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateProperties() {
595afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String s;
596afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
597afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
598afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = phone.getDeviceId();
599342101a0729a30587dc4fa79b5f017634bd985c0johnwang        if (s == null) s = r.getString(R.string.radioInfo_unknown);
600c38866843e966622346dc8f7b028749cac9c2198Wink Saville        mDeviceId.setText(s);
601342101a0729a30587dc4fa79b5f017634bd985c0johnwang
602c38866843e966622346dc8f7b028749cac9c2198Wink Saville
603afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = phone.getLine1Number();
604342101a0729a30587dc4fa79b5f017634bd985c0johnwang        if (s == null) s = r.getString(R.string.radioInfo_unknown);
605afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        number.setText(s);
606afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
607afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
608afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateDataStats() {
609afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String s;
610afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
611afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = SystemProperties.get("net.gsm.radio-reset", "0");
612afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        resets.setText(s);
613afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
614afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = SystemProperties.get("net.gsm.attempt-gprs", "0");
615afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        attempts.setText(s);
616afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
617afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = SystemProperties.get("net.gsm.succeed-gprs", "0");
618afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        successes.setText(s);
619afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
620afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        //s = SystemProperties.get("net.gsm.disconnect", "0");
621afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        //disconnects.setText(s);
622afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
623afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = SystemProperties.get("net.ppp.reset-by-timeout", "0");
624afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        sentSinceReceived.setText(s);
625afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
626afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
627afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateDataStats2() {
628afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
629afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
630afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        try {
631afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            long txPackets = netstat.getMobileTxPackets();
632afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            long rxPackets = netstat.getMobileRxPackets();
633afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            long txBytes   = netstat.getMobileTxBytes();
634afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            long rxBytes   = netstat.getMobileRxBytes();
635342101a0729a30587dc4fa79b5f017634bd985c0johnwang
636afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            String packets = r.getString(R.string.radioInfo_display_packets);
637afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            String bytes   = r.getString(R.string.radioInfo_display_bytes);
638342101a0729a30587dc4fa79b5f017634bd985c0johnwang
639afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
640afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
641afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (RemoteException e) {
642afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
643afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
644afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
645afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
646afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * Ping a IP address.
647afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
648afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void pingIpAddr() {
649afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        try {
650afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // This is hardcoded IP addr. This is for testing purposes.
651afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // We would need to get rid of this before release.
652afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            String ipAddress = "74.125.47.104";
653afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Process p = Runtime.getRuntime().exec("ping -c 1 " + ipAddress);
654afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            int status = p.waitFor();
655afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (status == 0) {
656afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingIpAddrResult = "Pass";
657afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
658afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingIpAddrResult = "Fail: IP addr not reachable";
659afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
660afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (IOException e) {
661afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPingIpAddrResult = "Fail: IOException";
662afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (InterruptedException e) {
663afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPingIpAddrResult = "Fail: InterruptedException";
664afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
665afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
666afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
667afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
668afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     *  Ping a host name
669afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
670afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void pingHostname() {
671afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        try {
672342101a0729a30587dc4fa79b5f017634bd985c0johnwang            Process p = Runtime.getRuntime().exec("ping -c 1 www.google.com");
673afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            int status = p.waitFor();
674afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (status == 0) {
675afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingHostnameResult = "Pass";
676afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
677afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingHostnameResult = "Fail: Host unreachable";
678afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
679afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (UnknownHostException e) {
680afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPingHostnameResult = "Fail: Unknown Host";
681afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (IOException e) {
682afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPingHostnameResult= "Fail: IOException";
683afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (InterruptedException e) {
684afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPingHostnameResult = "Fail: InterruptedException";
685afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
686afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
687afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
688afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
689afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * This function checks for basic functionality of HTTP Client.
690afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
691afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void httpClientTest() {
692afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        HttpClient client = new DefaultHttpClient();
693afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        try {
694afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            HttpGet request = new HttpGet("http://www.google.com");
695afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            HttpResponse response = client.execute(request);
696afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (response.getStatusLine().getStatusCode() == 200) {
697afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHttpClientTestResult = "Pass";
698afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
699afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHttpClientTestResult = "Fail: Code: " + String.valueOf(response);
700afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
701afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            request.abort();
702afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (IOException e) {
703afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mHttpClientTestResult = "Fail: IOException";
704afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
705afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
706afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
707afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void refreshSmsc() {
70821dd407c10bb1bade10233e8468ea6729bcf71efjsh        phone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
709afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
710afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
711afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updatePingState() {
712afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        final Handler handler = new Handler();
713afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Set all to unknown since the threads will take a few secs to update.
714afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingIpAddrResult = getResources().getString(R.string.radioInfo_unknown);
715afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingHostnameResult = getResources().getString(R.string.radioInfo_unknown);
716afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
717afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
718afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingIpAddr.setText(mPingIpAddrResult);
719afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingHostname.setText(mPingHostnameResult);
720afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mHttpClientTest.setText(mHttpClientTestResult);
721afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
722afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        final Runnable updatePingResults = new Runnable() {
723afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
724afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingIpAddr.setText(mPingIpAddrResult);
725afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingHostname.setText(mPingHostnameResult);
726afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHttpClientTest.setText(mHttpClientTestResult);
727afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
728afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
729afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Thread ipAddr = new Thread() {
730afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            @Override
731afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
732afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                pingIpAddr();
733afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                handler.post(updatePingResults);
734afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
735afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
736afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        ipAddr.start();
737afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
738afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Thread hostname = new Thread() {
739afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            @Override
740afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
741afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                pingHostname();
742afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                handler.post(updatePingResults);
743afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
744afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
745afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        hostname.start();
746afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
747afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Thread httpClient = new Thread() {
748afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            @Override
749afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
750afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                httpClientTest();
751afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                handler.post(updatePingResults);
752afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
753afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
754afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        httpClient.start();
755afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
756afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
757afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updatePdpList() {
758afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        StringBuilder sb = new StringBuilder("========DATA=======\n");
759afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
76087fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh        List<DataConnection> dcs = phone.getCurrentDataConnectionList();
761afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
76287fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh        for (DataConnection dc : dcs) {
7630d93697d3a52f7b9db37b403715c3a27678df4ffWink Saville            sb.append("    State: ").append(dc.getStateAsString()).append("\n");
7640d93697d3a52f7b9db37b403715c3a27678df4ffWink Saville            if (dc.isActive()) {
765afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                long timeElapsed =
76687fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                    (System.currentTimeMillis() - dc.getConnectionTime())/1000;
767afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                sb.append("    connected at ")
76887fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                  .append(DateUtils.timeString(dc.getConnectionTime()))
769afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                  .append(" and elapsed ")
77087fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                  .append(DateUtils.formatElapsedTime(timeElapsed));
77187fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh
7720d93697d3a52f7b9db37b403715c3a27678df4ffWink Saville                if (dc instanceof GsmDataConnection) {
7730d93697d3a52f7b9db37b403715c3a27678df4ffWink Saville                    GsmDataConnection pdp = (GsmDataConnection)dc;
77487fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                    sb.append("\n    to ")
77587fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                      .append(pdp.getApn().toString());
77687fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                }
77787fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                sb.append("\ninterface: ")
778afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                  .append(phone.getInterfaceName(phone.getActiveApnTypes()[0]))
779afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                  .append("\naddress: ")
780afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                  .append(phone.getIpAddress(phone.getActiveApnTypes()[0]))
781afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                  .append("\ngateway: ")
782afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                  .append(phone.getGateway(phone.getActiveApnTypes()[0]));
783afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                String[] dns = phone.getDnsServers(phone.getActiveApnTypes()[0]);
784afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                if (dns != null) {
785afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    sb.append("\ndns: ").append(dns[0]).append(", ").append(dns[1]);
786afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                }
7870d93697d3a52f7b9db37b403715c3a27678df4ffWink Saville            } else if (dc.isInactive()) {
788afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                sb.append("    disconnected with last try at ")
78987fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                  .append(DateUtils.timeString(dc.getLastFailTime()))
790afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                  .append("\n    fail because ")
79187fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                  .append(dc.getLastFailCause().toString());
792afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
7930d93697d3a52f7b9db37b403715c3a27678df4ffWink Saville                if (dc instanceof GsmDataConnection) {
7940d93697d3a52f7b9db37b403715c3a27678df4ffWink Saville                    GsmDataConnection pdp = (GsmDataConnection)dc;
79587fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                    sb.append("    is connecting to ")
79687fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                      .append(pdp.getApn().toString());
79787fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                } else {
79887fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                    sb.append("    is connecting");
79987fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh                }
800afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
801afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            sb.append("\n===================");
802afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
803afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
804afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
805afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        disconnects.setText(sb.toString());
806afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
807afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
808afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
809afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
810afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Intent intent = new Intent(Intent.ACTION_VIEW);
811afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // XXX We need to specify the component here because if we don't
812afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the activity manager will try to resolve the type by calling
813afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the content provider, which causes it to be loaded in a process
814afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // other than the Dialer process, which causes a lot of stuff to
815afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // break.
816afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            intent.setClassName("com.android.phone",
817afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    "com.android.phone.SimContacts");
818afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            startActivity(intent);
819afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
820afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
821afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
822afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
823afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
824afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
825afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Intent intent = new Intent(Intent.ACTION_VIEW);
826afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // XXX We need to specify the component here because if we don't
827afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the activity manager will try to resolve the type by calling
828afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the content provider, which causes it to be loaded in a process
829afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // other than the Dialer process, which causes a lot of stuff to
830afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // break.
831afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            intent.setClassName("com.android.phone",
832afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    "com.android.phone.FdnList");
833afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            startActivity(intent);
834afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
835afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
836afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
837afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
838afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
839afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
840afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Intent intent = new Intent(
841c38866843e966622346dc8f7b028749cac9c2198Wink Saville                    Intent.ACTION_VIEW, Uri.parse("content://icc/sdn"));
842afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // XXX We need to specify the component here because if we don't
843afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the activity manager will try to resolve the type by calling
844afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the content provider, which causes it to be loaded in a process
845afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // other than the Dialer process, which causes a lot of stuff to
846afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // break.
847afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            intent.setClassName("com.android.phone",
848afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    "com.android.phone.ADNList");
849afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            startActivity(intent);
850afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
851afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
852afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
853afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
854a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    private MenuItem.OnMenuItemClickListener mGetPdpList = new MenuItem.OnMenuItemClickListener() {
855a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        public boolean onMenuItemClick(MenuItem item) {
856a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            phone.getDataCallList(null);
857a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            return true;
858afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
859a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    };
860afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
861a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
862afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
863a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            Intent intent = new Intent();
864a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            intent.setClass(RadioInfo.this, BandMode.class);
865a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            startActivity(intent);
866afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
867afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
868afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
869342101a0729a30587dc4fa79b5f017634bd985c0johnwang
870afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
871afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
872afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            int state = mTelephonyManager.getDataState();
873afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            switch (state) {
874afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case TelephonyManager.DATA_CONNECTED:
875afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    phone.disableDataConnectivity();
876afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
877afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case TelephonyManager.DATA_DISCONNECTED:
878afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    phone.enableDataConnectivity();
879afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
880afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                default:
881afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    // do nothing
882afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
883afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
884afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
885afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
886afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
887afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
888afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mPowerButtonHandler = new OnClickListener() {
889afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
890afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            //log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
891afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            phone.setRadioPower(!isRadioOn());
892afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
893afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
894afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
895a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
896afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
897a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            phone.disableDnsCheck(!phone.isDnsCheckDisabled());
898a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            updateDnsCheckState();
899afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
900afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
901342101a0729a30587dc4fa79b5f017634bd985c0johnwang
902a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    OnClickListener mOemInfoButtonHandler = new OnClickListener() {
903afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
904a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
905a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            try {
906a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                startActivity(intent);
907a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            } catch (android.content.ActivityNotFoundException ex) {
908a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                Log.d(TAG, "OEM-specific Info/Settings Activity Not Found : " + ex);
909a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                // If the activity does not exist, there are no OEM
910a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                // settings, and so we can just do nothing...
911a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            }
912afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
913afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
914342101a0729a30587dc4fa79b5f017634bd985c0johnwang
915afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mPingButtonHandler = new OnClickListener() {
916afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
917afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updatePingState();
918afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
919afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
920afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
921afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
922afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
923afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateSmscButton.setEnabled(false);
92421dd407c10bb1bade10233e8468ea6729bcf71efjsh            phone.setSmscAddress(smsc.getText().toString(),
925afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
926afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
927afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
928afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
929afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
930afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
931afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            refreshSmsc();
932afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
933afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
934afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
935afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    AdapterView.OnItemSelectedListener
936afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPreferredNetworkHandler = new AdapterView.OnItemSelectedListener() {
937afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onItemSelected(AdapterView parent, View v, int pos, long id) {
938afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
939ead6928894c5f63ba8751962d93987b412b4b209Wink Saville            if (pos>=0 && pos<=7) { //IS THIS NEEDED to extend to the entire range of values
940afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                phone.setPreferredNetworkType(pos, msg);
941afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
942afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
943afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
944afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onNothingSelected(AdapterView parent) {
945afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
946afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
947afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
948afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String[] mPreferredNetworkLabels = {
94987fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "WCDMA preferred",
95087fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "GSM only",
95187fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "WCDMA only",
95287fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "GSM auto (PRL)",
95387fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "CDMA auto (PRL)",
95487fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "CDMA only",
95587fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "EvDo only",
95687fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "GSM/CDMA auto (PRL)",
95787fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "Unknown"};
958afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
959