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;
2099be5007ef13a403404d5455c622cdf7af96a1caRobert Greenwaltimport android.content.Context;
21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent;
22a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalinkimport android.content.pm.PackageManager;
23a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalinkimport android.content.pm.ResolveInfo;
24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.res.Resources;
2599be5007ef13a403404d5455c622cdf7af96a1caRobert Greenwaltimport android.net.ConnectivityManager;
26ae04c1a912db57708dca1431016db68c041c82f7Robert Greenwaltimport android.net.LinkProperties;
279302986035f46d2868c23db6349fd04b543eb676Jeff Sharkeyimport android.net.TrafficStats;
28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.Uri;
29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.AsyncResult;
30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Handler;
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;
3679bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Savilleimport android.telephony.CellInfo;
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;
595543404ae0ec9635b59d37fa01074ea598d539ebWink Savilleimport com.android.internal.telephony.PhoneConstants;
60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.PhoneFactory;
61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.PhoneStateIntentReceiver;
62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.TelephonyProperties;
630d93697d3a52f7b9db37b403715c3a27678df4ffWink Savilleimport com.android.internal.telephony.gsm.GsmDataConnection;
64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport org.apache.http.HttpResponse;
66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport org.apache.http.client.HttpClient;
67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport org.apache.http.client.methods.HttpGet;
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport org.apache.http.impl.client.DefaultHttpClient;
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.io.IOException;
71a9f163744a3b7beb9579df19045029032a16f6ddWink Savilleimport java.net.InetAddress;
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;
11579bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville    private TextView mCellInfo;
116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView resets;
117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView attempts;
118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView successes;
119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView disconnects;
120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView sentSinceReceived;
121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView sent;
122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView received;
123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mPingIpAddr;
124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mPingHostname;
125afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView mHttpClientTest;
126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TextView dnsCheckState;
127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditText smsc;
128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button radioPowerButton;
129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button dnsCheckToggleButton;
130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button pingTestButton;
131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button updateSmscButton;
132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Button refreshSmscButton;
133a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    private Button oemInfoButton;
134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Spinner preferredNetworkType;
135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private TelephonyManager mTelephonyManager;
137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Phone phone = null;
138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private PhoneStateIntentReceiver mPhoneStateReceiver;
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;
14579bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville    private List<CellInfo> mCellInfoValue;
146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onDataConnectionStateChanged(int state) {
150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateDataState();
151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateDataStats();
152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updatePdpList();
153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateNetworkType();
154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onDataActivity(int direction) {
158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateDataStats2();
159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onCellLocationChanged(CellLocation location) {
163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateLocation(location);
164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onMessageWaitingIndicatorChanged(boolean mwi) {
168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMwiValue = mwi;
169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateMessageWaiting();
170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onCallForwardingIndicatorChanged(boolean cfi) {
174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mCfiValue = cfi;
175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateCallRedirect();
176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
17779bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville
17879bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        @Override
17979bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        public void onCellInfoChanged(List<CellInfo> arrayCi) {
18079bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville            Log.d(TAG, "[RadioInfo] onCellInfoChanged: arrayCi=" + arrayCi);
18179bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville            mCellInfoValue = arrayCi;
18279bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville            updateCellInfoTv();
18379bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        }
184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Handler mHandler = new Handler() {
187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void handleMessage(Message msg) {
188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            AsyncResult ar;
189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            switch (msg.what) {
190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_PHONE_STATE_CHANGED:
191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updatePhoneState();
192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
193afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
194afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_SIGNAL_STRENGTH_CHANGED:
195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updateSignalStrength();
196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_SERVICE_STATE_CHANGED:
199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updateServiceState();
200afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updatePowerState();
201afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_QUERY_PREFERRED_TYPE_DONE:
204afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception == null) {
206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        int type = ((int[])ar.result)[0];
20732310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira                        if (type >= mPreferredNetworkLabels.length) {
20832310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira                            Log.e(TAG, "[RadioInfo] EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
20932310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira                                    "type=" + type);
21032310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira                            type = mPreferredNetworkLabels.length - 1;
21132310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira                        }
212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        preferredNetworkType.setSelection(type, true);
213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    } else {
21432310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira                        preferredNetworkType.setSelection(mPreferredNetworkLabels.length - 1, true);
215afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_SET_PREFERRED_TYPE_DONE:
218afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception != null) {
220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        phone.getPreferredNetworkType(
221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                                obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
222afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_QUERY_NEIGHBORING_CIDS_DONE:
225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception == null) {
227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        updateNeighboringCids((ArrayList<NeighboringCellInfo>)ar.result);
228afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    } else {
229afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        mNeighboringCids.setText("unknown");
230afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
231afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
232afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_QUERY_SMSC_DONE:
233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception != null) {
235afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        smsc.setText("refresh error");
236afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    } else {
23721dd407c10bb1bade10233e8468ea6729bcf71efjsh                        smsc.setText((String)ar.result);
238afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
239afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
240afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case EVENT_UPDATE_SMSC_DONE:
241afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    updateSmscButton.setEnabled(true);
242afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    ar= (AsyncResult) msg.obj;
243afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    if (ar.exception != null) {
244afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        smsc.setText("update error");
245afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    }
246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                default:
248afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
249afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
250afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
251afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
252afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
254afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onCreate(Bundle icicle) {
256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        setContentView(R.layout.radio_info);
259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        phone = PhoneFactory.getDefaultPhone();
262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
263c38866843e966622346dc8f7b028749cac9c2198Wink Saville        mDeviceId= (TextView) findViewById(R.id.imei);
264afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        number = (TextView) findViewById(R.id.number);
265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        callState = (TextView) findViewById(R.id.call);
266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        operatorName = (TextView) findViewById(R.id.operator);
267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        roamingState = (TextView) findViewById(R.id.roaming);
268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gsmState = (TextView) findViewById(R.id.gsm);
269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gprsState = (TextView) findViewById(R.id.gprs);
270afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        network = (TextView) findViewById(R.id.network);
271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dBm = (TextView) findViewById(R.id.dbm);
272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMwi = (TextView) findViewById(R.id.mwi);
273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mCfi = (TextView) findViewById(R.id.cfi);
274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mLocation = (TextView) findViewById(R.id.location);
275afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mNeighboringCids = (TextView) findViewById(R.id.neighboring);
27679bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        mCellInfo = (TextView) findViewById(R.id.cellinfo);
277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
278afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        resets = (TextView) findViewById(R.id.resets);
279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        attempts = (TextView) findViewById(R.id.attempts);
280afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        successes = (TextView) findViewById(R.id.successes);
281afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        disconnects = (TextView) findViewById(R.id.disconnects);
282afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        sentSinceReceived = (TextView) findViewById(R.id.sentSinceReceived);
283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        sent = (TextView) findViewById(R.id.sent);
284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        received = (TextView) findViewById(R.id.received);
285afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        smsc = (EditText) findViewById(R.id.smsc);
286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dnsCheckState = (TextView) findViewById(R.id.dnsCheckState);
287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingIpAddr = (TextView) findViewById(R.id.pingIpAddr);
289afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingHostname = (TextView) findViewById(R.id.pingHostname);
290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mHttpClientTest = (TextView) findViewById(R.id.httpClientTest);
291afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        preferredNetworkType = (Spinner) findViewById(R.id.preferredNetworkType);
293afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,
294afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                android.R.layout.simple_spinner_item, mPreferredNetworkLabels);
295342101a0729a30587dc4fa79b5f017634bd985c0johnwang        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
296afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        preferredNetworkType.setAdapter(adapter);
297afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        preferredNetworkType.setOnItemSelectedListener(mPreferredNetworkHandler);
298afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
299afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        radioPowerButton = (Button) findViewById(R.id.radio_power);
300afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        radioPowerButton.setOnClickListener(mPowerButtonHandler);
301afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
3021e596f303520d211aebc87dfc0c08108efe80921Wink Saville        imsRegRequiredButton = (Button) findViewById(R.id.ims_reg_required);
3031e596f303520d211aebc87dfc0c08108efe80921Wink Saville        imsRegRequiredButton.setOnClickListener(mImsRegRequiredHandler);
3041e596f303520d211aebc87dfc0c08108efe80921Wink Saville
305382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville        smsOverImsButton = (Button) findViewById(R.id.sms_over_ims);
306382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville        smsOverImsButton.setOnClickListener(mSmsOverImsHandler);
307382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville
308426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        lteRamDumpButton = (Button) findViewById(R.id.lte_ram_dump);
309426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        lteRamDumpButton.setOnClickListener(mLteRamDumpHandler);
310426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
311afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        pingTestButton = (Button) findViewById(R.id.ping_test);
312afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        pingTestButton.setOnClickListener(mPingButtonHandler);
313afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateSmscButton = (Button) findViewById(R.id.update_smsc);
314afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateSmscButton.setOnClickListener(mUpdateSmscButtonHandler);
315afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        refreshSmscButton = (Button) findViewById(R.id.refresh_smsc);
316afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        refreshSmscButton.setOnClickListener(mRefreshSmscButtonHandler);
317afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dnsCheckToggleButton = (Button) findViewById(R.id.dns_check_toggle);
318afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dnsCheckToggleButton.setOnClickListener(mDnsCheckButtonHandler);
319342101a0729a30587dc4fa79b5f017634bd985c0johnwang
320a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        oemInfoButton = (Button) findViewById(R.id.oem_info);
321a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        oemInfoButton.setOnClickListener(mOemInfoButtonHandler);
322a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        PackageManager pm = getPackageManager();
323a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        Intent oemInfoIntent = new Intent("com.android.settings.OEM_RADIO_INFO");
324a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        List<ResolveInfo> oemInfoIntentList = pm.queryIntentActivities(oemInfoIntent, 0);
325a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        if (oemInfoIntentList.size() == 0) {
326a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            oemInfoButton.setEnabled(false);
327a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        }
328a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink
329afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver = new PhoneStateIntentReceiver(this, mHandler);
330afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED);
331afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED);
332afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver.notifyPhoneCallState(EVENT_PHONE_STATE_CHANGED);
333342101a0729a30587dc4fa79b5f017634bd985c0johnwang
334afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        phone.getPreferredNetworkType(
335afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHandler.obtainMessage(EVENT_QUERY_PREFERRED_TYPE_DONE));
336afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        phone.getNeighboringCids(
337afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHandler.obtainMessage(EVENT_QUERY_NEIGHBORING_CIDS_DONE));
338afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
339afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        CellLocation.requestLocationUpdate();
34079bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville
34179bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        // Get current cell info
34279bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        mCellInfoValue = mTelephonyManager.getAllCellInfo();
34379bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        Log.d(TAG, "[RadioInfo] onCreate: mCellInfoValue=" + mCellInfoValue);
344afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
345afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
346afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onResume() {
348afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
350afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updatePhoneState();
351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateSignalStrength();
352afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateMessageWaiting();
353afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateCallRedirect();
354afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateServiceState();
355afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateLocation(mTelephonyManager.getCellLocation());
356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDataState();
357afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDataStats();
358afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDataStats2();
359afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updatePowerState();
3601e596f303520d211aebc87dfc0c08108efe80921Wink Saville        updateImsRegRequiredState();
361382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville        updateSmsOverImsState();
362426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        updateLteRamDumpState();
363afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateProperties();
364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        updateDnsCheckState();
365afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
366afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Log.i(TAG, "[RadioInfo] onResume: register phone & data intents");
367afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
368afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver.registerIntent();
369afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTelephonyManager.listen(mPhoneStateListener,
370afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                  PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
371afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                | PhoneStateListener.LISTEN_DATA_ACTIVITY
372afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                | PhoneStateListener.LISTEN_CELL_LOCATION
373afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
37479bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
37579bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                | PhoneStateListener.LISTEN_CELL_INFO);
376afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
377afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
378afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
379afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onPause() {
380afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onPause();
381afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Log.i(TAG, "[RadioInfo] onPause: unregister phone & data intents");
383afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
384afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhoneStateReceiver.unregisterIntent();
385afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
386afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
387afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
388afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
389afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onCreateOptionsMenu(Menu menu) {
390c38866843e966622346dc8f7b028749cac9c2198Wink Saville        menu.add(0, MENU_ITEM_SELECT_BAND, 0, R.string.radio_info_band_mode_label)
391c38866843e966622346dc8f7b028749cac9c2198Wink Saville                .setOnMenuItemClickListener(mSelectBandCallback)
392afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                .setAlphabeticShortcut('b');
393afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_VIEW_ADN, 0,
394afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                R.string.radioInfo_menu_viewADN).setOnMenuItemClickListener(mViewADNCallback);
395afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_VIEW_FDN, 0,
396afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
397afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_VIEW_SDN, 0,
398afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
399afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_GET_PDP_LIST,
400afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                0, R.string.radioInfo_menu_getPDP).setOnMenuItemClickListener(mGetPdpList);
401afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(1, MENU_ITEM_TOGGLE_DATA,
402a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                0, DISABLE_DATA_STR).setOnMenuItemClickListener(mToggleData);
403afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return true;
404afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
405afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
406afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
407c38866843e966622346dc8f7b028749cac9c2198Wink Saville    public boolean onPrepareOptionsMenu(Menu menu) {
408afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Get the TOGGLE DATA menu item in the right state.
409afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        MenuItem item = menu.findItem(MENU_ITEM_TOGGLE_DATA);
410afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int state = mTelephonyManager.getDataState();
411afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        boolean visible = true;
412afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
413afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
414afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_CONNECTED:
415afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_SUSPENDED:
416a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                item.setTitle(DISABLE_DATA_STR);
417afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
418afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_DISCONNECTED:
419a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                item.setTitle(ENABLE_DATA_STR);
420afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
421afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            default:
422afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                visible = false;
423afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
424afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
425afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        item.setVisible(visible);
426afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return true;
427afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
428afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
429afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean isRadioOn() {
430afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
431afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
432342101a0729a30587dc4fa79b5f017634bd985c0johnwang
433afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void updatePowerState() {
434afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String buttonText = isRadioOn() ?
435afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                            getString(R.string.turn_off_radio) :
436afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                            getString(R.string.turn_on_radio);
437c38866843e966622346dc8f7b028749cac9c2198Wink Saville        radioPowerButton.setText(buttonText);
438afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
439afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
440afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void updateDnsCheckState() {
4415304c7e38f89f7616bd4c834a14b4d764356d19bMike Lockwood        dnsCheckState.setText(phone.isDnsCheckDisabled() ?
442afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                "0.0.0.0 allowed" :"0.0.0.0 not allowed");
443afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
444e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville
445afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
446afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateSignalStrength() {
447e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville        // TODO PhoneStateIntentReceiver is deprecated and PhoneStateListener
448e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville        // should probably used instead.
449e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville        int state = mPhoneStateReceiver.getServiceState().getState();
450afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
451afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
452afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if ((ServiceState.STATE_OUT_OF_SERVICE == state) ||
453afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                (ServiceState.STATE_POWER_OFF == state)) {
454afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            dBm.setText("0");
455afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
456e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville
457afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int signalDbm = mPhoneStateReceiver.getSignalStrengthDbm();
458e2a14e35aa525de6cbc0179c67ec971295f2db03Wink Saville
459afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (-1 == signalDbm) signalDbm = 0;
460afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
461882c74a6799d24c766e3db81a316743bbe11e0beWink Saville        int signalAsu = mPhoneStateReceiver.getSignalStrengthLevelAsu();
462afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
463afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (-1 == signalAsu) signalAsu = 0;
464afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
465afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        dBm.setText(String.valueOf(signalDbm) + " "
466afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            + r.getString(R.string.radioInfo_display_dbm) + "   "
467afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            + String.valueOf(signalAsu) + " "
468afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            + r.getString(R.string.radioInfo_display_asu));
469afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
470afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
471afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateLocation(CellLocation location) {
472534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh        Resources r = getResources();
473c38866843e966622346dc8f7b028749cac9c2198Wink Saville        if (location instanceof GsmCellLocation) {
474c38866843e966622346dc8f7b028749cac9c2198Wink Saville            GsmCellLocation loc = (GsmCellLocation)location;
475534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int lac = loc.getLac();
476534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int cid = loc.getCid();
477534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            mLocation.setText(r.getString(R.string.radioInfo_lac) + " = "
478534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((lac == -1) ? "unknown" : Integer.toHexString(lac))
479534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
480534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + r.getString(R.string.radioInfo_cid) + " = "
481534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((cid == -1) ? "unknown" : Integer.toHexString(cid)));
482534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh        } else if (location instanceof CdmaCellLocation) {
483534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            CdmaCellLocation loc = (CdmaCellLocation)location;
484534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int bid = loc.getBaseStationId();
485534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int sid = loc.getSystemId();
486534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int nid = loc.getNetworkId();
487534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int lat = loc.getBaseStationLatitude();
488534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            int lon = loc.getBaseStationLongitude();
489534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            mLocation.setText("BID = "
490534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((bid == -1) ? "unknown" : Integer.toHexString(bid))
491534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
492534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "SID = "
493534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((sid == -1) ? "unknown" : Integer.toHexString(sid))
494534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
495534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "NID = "
496534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((nid == -1) ? "unknown" : Integer.toHexString(nid))
497534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "\n"
498534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "LAT = "
499534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((lat == -1) ? "unknown" : Integer.toHexString(lat))
500534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "   "
501534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + "LONG = "
502534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh                    + ((lon == -1) ? "unknown" : Integer.toHexString(lon)));
503534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh        } else {
504534f5ae34ee8fa76ed1cecb34c1d7898892f14f8jsh            mLocation.setText("unknown");
505c38866843e966622346dc8f7b028749cac9c2198Wink Saville        }
506afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
507afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
508afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
509afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
510afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateNeighboringCids(ArrayList<NeighboringCellInfo> cids) {
511f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang        StringBuilder sb = new StringBuilder();
512f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang
513afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (cids != null) {
514afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if ( cids.isEmpty() ) {
515f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang                sb.append("no neighboring cells");
516afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
517afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                for (NeighboringCellInfo cell : cids) {
518f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang                    sb.append(cell.toString()).append(" ");
519afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                }
520afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
521afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
522f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang            sb.append("unknown");
523afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
524f02c65f8c1092b0d10fe2783f2f9fd9857146f7fjohnwang        mNeighboringCids.setText(sb.toString());
525afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
526afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
52779bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville    private final void updateCellInfoTv() {
52879bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        StringBuilder value = new StringBuilder();
52979bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        if (mCellInfoValue != null) {
53079bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville            int index = 0;
53179bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville            for (CellInfo ci : mCellInfoValue) {
53279bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                value.append('[');
53379bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                value.append(index);
53479bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                value.append("]=");
53579bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                value.append(ci.toString());
53679bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                if (++index < mCellInfoValue.size()) {
53779bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                    value.append("\n");
53879bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville                }
53979bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville            }
54079bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        }
54179bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville        mCellInfo.setText(value.toString());
54279bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville    }
54379bff2a254eb7785b2b8fb6b8b700c274105cfd9Wink Saville
544afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
545afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateMessageWaiting() {
546afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMwi.setText(String.valueOf(mMwiValue));
547afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
548afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
549afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
550afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateCallRedirect() {
551afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mCfi.setText(String.valueOf(mCfiValue));
552afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
553afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
554afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
555afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
556afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateServiceState() {
557afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        ServiceState serviceState = mPhoneStateReceiver.getServiceState();
558afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int state = serviceState.getState();
559afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
560afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = r.getString(R.string.radioInfo_unknown);
561342101a0729a30587dc4fa79b5f017634bd985c0johnwang
562afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
563afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_IN_SERVICE:
564afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_service_in);
565afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
566afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_OUT_OF_SERVICE:
567afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_EMERGENCY_ONLY:
568afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_service_emergency);
569afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
570afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case ServiceState.STATE_POWER_OFF:
571afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_service_off);
572afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
573afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
574342101a0729a30587dc4fa79b5f017634bd985c0johnwang
575afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gsmState.setText(display);
576342101a0729a30587dc4fa79b5f017634bd985c0johnwang
577afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (serviceState.getRoaming()) {
578afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            roamingState.setText(R.string.radioInfo_roaming_in);
579afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
580afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            roamingState.setText(R.string.radioInfo_roaming_not);
581afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
582afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
583afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        operatorName.setText(serviceState.getOperatorAlphaLong());
584afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
585afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
586afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
587afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updatePhoneState() {
5885543404ae0ec9635b59d37fa01074ea598d539ebWink Saville        PhoneConstants.State state = mPhoneStateReceiver.getPhoneState();
589afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
590afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = r.getString(R.string.radioInfo_unknown);
591afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
592afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
593afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case IDLE:
594afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_phone_idle);
595afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
596afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case RINGING:
597afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_phone_ringing);
598afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
599afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case OFFHOOK:
600afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_phone_offhook);
601afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
602afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
603afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
604afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        callState.setText(display);
605afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
606afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
607afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
608afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateDataState() {
609afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int state = mTelephonyManager.getDataState();
610afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
611afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = r.getString(R.string.radioInfo_unknown);
612afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
613afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (state) {
614afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_CONNECTED:
615afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_connected);
616afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
617afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_CONNECTING:
618afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_connecting);
619afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
620afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_DISCONNECTED:
621afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_disconnected);
622afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
623afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case TelephonyManager.DATA_SUSPENDED:
624afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                display = r.getString(R.string.radioInfo_data_suspended);
625afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
626afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
627342101a0729a30587dc4fa79b5f017634bd985c0johnwang
628afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        gprsState.setText(display);
629afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
630afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
631afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateNetworkType() {
632afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
633afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String display = SystemProperties.get(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
634afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                r.getString(R.string.radioInfo_unknown));
635afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
636afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        network.setText(display);
637afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
638afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
639afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void
640afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    updateProperties() {
641afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String s;
642afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
643afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
644afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = phone.getDeviceId();
645342101a0729a30587dc4fa79b5f017634bd985c0johnwang        if (s == null) s = r.getString(R.string.radioInfo_unknown);
646c38866843e966622346dc8f7b028749cac9c2198Wink Saville        mDeviceId.setText(s);
647342101a0729a30587dc4fa79b5f017634bd985c0johnwang
648c38866843e966622346dc8f7b028749cac9c2198Wink Saville
649afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = phone.getLine1Number();
650342101a0729a30587dc4fa79b5f017634bd985c0johnwang        if (s == null) s = r.getString(R.string.radioInfo_unknown);
651afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        number.setText(s);
652afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
653afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
654afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateDataStats() {
655afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String s;
656afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
657afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = SystemProperties.get("net.gsm.radio-reset", "0");
658afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        resets.setText(s);
659afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
660afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = SystemProperties.get("net.gsm.attempt-gprs", "0");
661afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        attempts.setText(s);
662afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
663afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = SystemProperties.get("net.gsm.succeed-gprs", "0");
664afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        successes.setText(s);
665afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
666afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        //s = SystemProperties.get("net.gsm.disconnect", "0");
667afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        //disconnects.setText(s);
668afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
669afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        s = SystemProperties.get("net.ppp.reset-by-timeout", "0");
670afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        sentSinceReceived.setText(s);
671afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
672afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
673afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updateDataStats2() {
674afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources r = getResources();
675afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
6769302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        long txPackets = TrafficStats.getMobileTxPackets();
6779302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        long rxPackets = TrafficStats.getMobileRxPackets();
6789302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        long txBytes   = TrafficStats.getMobileTxBytes();
6799302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        long rxBytes   = TrafficStats.getMobileRxBytes();
680342101a0729a30587dc4fa79b5f017634bd985c0johnwang
6819302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        String packets = r.getString(R.string.radioInfo_display_packets);
6829302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        String bytes   = r.getString(R.string.radioInfo_display_bytes);
683342101a0729a30587dc4fa79b5f017634bd985c0johnwang
6849302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        sent.setText(txPackets + " " + packets + ", " + txBytes + " " + bytes);
6859302986035f46d2868c23db6349fd04b543eb676Jeff Sharkey        received.setText(rxPackets + " " + packets + ", " + rxBytes + " " + bytes);
686afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
687afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
688afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
689afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * Ping a IP address.
690afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
691afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void pingIpAddr() {
692afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        try {
693afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // This is hardcoded IP addr. This is for testing purposes.
694afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // We would need to get rid of this before release.
695afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            String ipAddress = "74.125.47.104";
696afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Process p = Runtime.getRuntime().exec("ping -c 1 " + ipAddress);
697afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            int status = p.waitFor();
698afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (status == 0) {
699afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingIpAddrResult = "Pass";
700afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
701afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingIpAddrResult = "Fail: IP addr not reachable";
702afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
703afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (IOException e) {
704afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPingIpAddrResult = "Fail: IOException";
705afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (InterruptedException e) {
706afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPingIpAddrResult = "Fail: InterruptedException";
707afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
708afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
709afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
710afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
711afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     *  Ping a host name
712afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
713afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void pingHostname() {
714afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        try {
715342101a0729a30587dc4fa79b5f017634bd985c0johnwang            Process p = Runtime.getRuntime().exec("ping -c 1 www.google.com");
716afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            int status = p.waitFor();
717afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (status == 0) {
718afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingHostnameResult = "Pass";
719afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
720afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingHostnameResult = "Fail: Host unreachable";
721afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
722afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (UnknownHostException e) {
723afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPingHostnameResult = "Fail: Unknown Host";
724afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (IOException e) {
725afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPingHostnameResult= "Fail: IOException";
726afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (InterruptedException e) {
727afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPingHostnameResult = "Fail: InterruptedException";
728afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
729afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
730afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
731afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
732afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * This function checks for basic functionality of HTTP Client.
733afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
734afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void httpClientTest() {
735afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        HttpClient client = new DefaultHttpClient();
736afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        try {
737afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            HttpGet request = new HttpGet("http://www.google.com");
738afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            HttpResponse response = client.execute(request);
739afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (response.getStatusLine().getStatusCode() == 200) {
740afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHttpClientTestResult = "Pass";
741afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
742afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHttpClientTestResult = "Fail: Code: " + String.valueOf(response);
743afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
744afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            request.abort();
745afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (IOException e) {
746afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mHttpClientTestResult = "Fail: IOException";
747afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
748afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
749afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
750afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void refreshSmsc() {
75121dd407c10bb1bade10233e8468ea6729bcf71efjsh        phone.getSmscAddress(mHandler.obtainMessage(EVENT_QUERY_SMSC_DONE));
752afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
753afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
754afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updatePingState() {
755afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        final Handler handler = new Handler();
756afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Set all to unknown since the threads will take a few secs to update.
757afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingIpAddrResult = getResources().getString(R.string.radioInfo_unknown);
758afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingHostnameResult = getResources().getString(R.string.radioInfo_unknown);
759afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mHttpClientTestResult = getResources().getString(R.string.radioInfo_unknown);
760afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
761afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingIpAddr.setText(mPingIpAddrResult);
762afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPingHostname.setText(mPingHostnameResult);
763afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mHttpClientTest.setText(mHttpClientTestResult);
764afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
765afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        final Runnable updatePingResults = new Runnable() {
766afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
767afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingIpAddr.setText(mPingIpAddrResult);
768afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPingHostname.setText(mPingHostnameResult);
769afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mHttpClientTest.setText(mHttpClientTestResult);
770afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
771afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
772afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Thread ipAddr = new Thread() {
773afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            @Override
774afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
775afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                pingIpAddr();
776afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                handler.post(updatePingResults);
777afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
778afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
779afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        ipAddr.start();
780afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
781afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Thread hostname = new Thread() {
782afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            @Override
783afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
784afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                pingHostname();
785afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                handler.post(updatePingResults);
786afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
787afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
788afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        hostname.start();
789afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
790afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Thread httpClient = new Thread() {
791afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            @Override
792afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            public void run() {
793afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                httpClientTest();
794afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                handler.post(updatePingResults);
795afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
796afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        };
797afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        httpClient.start();
798afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
799afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
800afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final void updatePdpList() {
801afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        StringBuilder sb = new StringBuilder("========DATA=======\n");
802afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
8032c3ec09261bf1503e75328175b5286af5676845eWink Saville//        List<DataConnection> dcs = phone.getCurrentDataConnectionList();
8042c3ec09261bf1503e75328175b5286af5676845eWink Saville//
8052c3ec09261bf1503e75328175b5286af5676845eWink Saville//        for (DataConnection dc : dcs) {
8062c3ec09261bf1503e75328175b5286af5676845eWink Saville//            sb.append("    State=").append(dc.getStateAsString()).append("\n");
8072c3ec09261bf1503e75328175b5286af5676845eWink Saville//            if (dc.isActive()) {
8082c3ec09261bf1503e75328175b5286af5676845eWink Saville//                long timeElapsed =
8092c3ec09261bf1503e75328175b5286af5676845eWink Saville//                    (System.currentTimeMillis() - dc.getConnectionTime())/1000;
8102c3ec09261bf1503e75328175b5286af5676845eWink Saville//                sb.append("    connected at ")
8112c3ec09261bf1503e75328175b5286af5676845eWink Saville//                  .append(DateUtils.timeString(dc.getConnectionTime()))
8122c3ec09261bf1503e75328175b5286af5676845eWink Saville//                  .append(" and elapsed ")
8132c3ec09261bf1503e75328175b5286af5676845eWink Saville//                  .append(DateUtils.formatElapsedTime(timeElapsed));
8142c3ec09261bf1503e75328175b5286af5676845eWink Saville//
8152c3ec09261bf1503e75328175b5286af5676845eWink Saville//                if (dc instanceof GsmDataConnection) {
8162c3ec09261bf1503e75328175b5286af5676845eWink Saville//                    GsmDataConnection pdp = (GsmDataConnection)dc;
8172c3ec09261bf1503e75328175b5286af5676845eWink Saville//                    sb.append("\n    to ")
8182c3ec09261bf1503e75328175b5286af5676845eWink Saville//                      .append(pdp.getApn().toString());
8192c3ec09261bf1503e75328175b5286af5676845eWink Saville//                }
8202c3ec09261bf1503e75328175b5286af5676845eWink Saville//                sb.append("\nLinkProperties: ");
8212c3ec09261bf1503e75328175b5286af5676845eWink Saville//                sb.append(phone.getLinkProperties(phone.getActiveApnTypes()[0]).toString());
8222c3ec09261bf1503e75328175b5286af5676845eWink Saville//            } else if (dc.isInactive()) {
8232c3ec09261bf1503e75328175b5286af5676845eWink Saville//                sb.append("    disconnected with last try at ")
8242c3ec09261bf1503e75328175b5286af5676845eWink Saville//                  .append(DateUtils.timeString(dc.getLastFailTime()))
8252c3ec09261bf1503e75328175b5286af5676845eWink Saville//                  .append("\n    fail because ")
8262c3ec09261bf1503e75328175b5286af5676845eWink Saville//                  .append(dc.getLastFailCause().toString());
8272c3ec09261bf1503e75328175b5286af5676845eWink Saville//            } else {
8282c3ec09261bf1503e75328175b5286af5676845eWink Saville//                if (dc instanceof GsmDataConnection) {
8292c3ec09261bf1503e75328175b5286af5676845eWink Saville//                    GsmDataConnection pdp = (GsmDataConnection)dc;
8302c3ec09261bf1503e75328175b5286af5676845eWink Saville//                    sb.append("    is connecting to ")
8312c3ec09261bf1503e75328175b5286af5676845eWink Saville//                      .append(pdp.getApn().toString());
8322c3ec09261bf1503e75328175b5286af5676845eWink Saville//                } else {
8332c3ec09261bf1503e75328175b5286af5676845eWink Saville//                    sb.append("    is connecting");
8342c3ec09261bf1503e75328175b5286af5676845eWink Saville//                }
8352c3ec09261bf1503e75328175b5286af5676845eWink Saville//            }
8362c3ec09261bf1503e75328175b5286af5676845eWink Saville//            sb.append("\n===================");
8372c3ec09261bf1503e75328175b5286af5676845eWink Saville//        }
838afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
839afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        disconnects.setText(sb.toString());
840afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
841afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
842afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mViewADNCallback = new MenuItem.OnMenuItemClickListener() {
843afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
844afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Intent intent = new Intent(Intent.ACTION_VIEW);
845afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // XXX We need to specify the component here because if we don't
846afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the activity manager will try to resolve the type by calling
847afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the content provider, which causes it to be loaded in a process
848afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // other than the Dialer process, which causes a lot of stuff to
849afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // break.
850afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            intent.setClassName("com.android.phone",
851afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    "com.android.phone.SimContacts");
852afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            startActivity(intent);
853afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
854afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
855afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
856afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
857afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mViewFDNCallback = new MenuItem.OnMenuItemClickListener() {
858afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
859afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Intent intent = new Intent(Intent.ACTION_VIEW);
860afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // XXX We need to specify the component here because if we don't
861afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the activity manager will try to resolve the type by calling
862afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the content provider, which causes it to be loaded in a process
863afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // other than the Dialer process, which causes a lot of stuff to
864afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // break.
865afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            intent.setClassName("com.android.phone",
866afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    "com.android.phone.FdnList");
867afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            startActivity(intent);
868afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
869afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
870afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
871afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
872afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mViewSDNCallback = new MenuItem.OnMenuItemClickListener() {
873afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
874afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Intent intent = new Intent(
875c38866843e966622346dc8f7b028749cac9c2198Wink Saville                    Intent.ACTION_VIEW, Uri.parse("content://icc/sdn"));
876afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // XXX We need to specify the component here because if we don't
877afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the activity manager will try to resolve the type by calling
878afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // the content provider, which causes it to be loaded in a process
879afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // other than the Dialer process, which causes a lot of stuff to
880afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // break.
881afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            intent.setClassName("com.android.phone",
882afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    "com.android.phone.ADNList");
883afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            startActivity(intent);
884afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
885afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
886afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
887afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
888a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    private MenuItem.OnMenuItemClickListener mGetPdpList = new MenuItem.OnMenuItemClickListener() {
889a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink        public boolean onMenuItemClick(MenuItem item) {
890a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            phone.getDataCallList(null);
891a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            return true;
892afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
893a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    };
894afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
895a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    private MenuItem.OnMenuItemClickListener mSelectBandCallback = new MenuItem.OnMenuItemClickListener() {
896afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
897a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            Intent intent = new Intent();
898a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            intent.setClass(RadioInfo.this, BandMode.class);
899a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            startActivity(intent);
900afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
901afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
902afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
903342101a0729a30587dc4fa79b5f017634bd985c0johnwang
904afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private MenuItem.OnMenuItemClickListener mToggleData = new MenuItem.OnMenuItemClickListener() {
905afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public boolean onMenuItemClick(MenuItem item) {
90699be5007ef13a403404d5455c622cdf7af96a1caRobert Greenwalt            ConnectivityManager cm =
90799be5007ef13a403404d5455c622cdf7af96a1caRobert Greenwalt                    (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
908afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            int state = mTelephonyManager.getDataState();
909afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            switch (state) {
910afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case TelephonyManager.DATA_CONNECTED:
91199be5007ef13a403404d5455c622cdf7af96a1caRobert Greenwalt                    cm.setMobileDataEnabled(false);
912afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
913afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                case TelephonyManager.DATA_DISCONNECTED:
91499be5007ef13a403404d5455c622cdf7af96a1caRobert Greenwalt                    cm.setMobileDataEnabled(true);
915afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
916afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                default:
917afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    // do nothing
918afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
919afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
920afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
921afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
922afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
923afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
924afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mPowerButtonHandler = new OnClickListener() {
925afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
926afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            //log("toggle radio power: currently " + (isRadioOn()?"on":"off"));
927afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            phone.setRadioPower(!isRadioOn());
928afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
929afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
930afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
931426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    private Button imsRegRequiredButton;
932426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    static final String PROPERTY_IMS_REG_REQUIRED = "persist.radio.imsregrequired";
9331e596f303520d211aebc87dfc0c08108efe80921Wink Saville    OnClickListener mImsRegRequiredHandler = new OnClickListener() {
9341e596f303520d211aebc87dfc0c08108efe80921Wink Saville        @Override
9351e596f303520d211aebc87dfc0c08108efe80921Wink Saville        public void onClick(View v) {
9361e596f303520d211aebc87dfc0c08108efe80921Wink Saville            Log.d(TAG, String.format("toggle %s: currently %s",
937426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville                PROPERTY_IMS_REG_REQUIRED, (isImsRegRequired() ? "on":"off")));
9381e596f303520d211aebc87dfc0c08108efe80921Wink Saville            boolean newValue = !isImsRegRequired();
939426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville            SystemProperties.set(PROPERTY_IMS_REG_REQUIRED,
9401e596f303520d211aebc87dfc0c08108efe80921Wink Saville                    newValue ? "1":"0");
9411e596f303520d211aebc87dfc0c08108efe80921Wink Saville            updateImsRegRequiredState();
9421e596f303520d211aebc87dfc0c08108efe80921Wink Saville        }
9431e596f303520d211aebc87dfc0c08108efe80921Wink Saville    };
9441e596f303520d211aebc87dfc0c08108efe80921Wink Saville
945426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    private boolean isImsRegRequired() {
946426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        return SystemProperties.getBoolean(PROPERTY_IMS_REG_REQUIRED, false);
947426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    }
948426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
949426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    private void updateImsRegRequiredState() {
950426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        Log.d(TAG, "updateImsRegRequiredState isImsRegRequired()=" + isImsRegRequired());
951426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        String buttonText = isImsRegRequired() ?
952426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville                            getString(R.string.ims_reg_required_off) :
953426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville                            getString(R.string.ims_reg_required_on);
954426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        imsRegRequiredButton.setText(buttonText);
955426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    }
956426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
957426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    private Button smsOverImsButton;
958382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville    static final String PROPERTY_SMS_OVER_IMS = "persist.radio.imsallowmtsms";
959382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville    OnClickListener mSmsOverImsHandler = new OnClickListener() {
960382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville        @Override
961382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville        public void onClick(View v) {
962382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville            Log.d(TAG, String.format("toggle %s: currently %s",
963382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville                    PROPERTY_SMS_OVER_IMS, (isSmsOverImsEnabled() ? "on":"off")));
964382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville            boolean newValue = !isSmsOverImsEnabled();
965382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville            SystemProperties.set(PROPERTY_SMS_OVER_IMS, newValue ? "1":"0");
966382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville            updateSmsOverImsState();
967382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville        }
968382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville    };
969382a75b105506f9ef8e6e735fcfa40ddccbd87ccWink Saville
970426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    private boolean isSmsOverImsEnabled() {
971426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        return SystemProperties.getBoolean(PROPERTY_SMS_OVER_IMS, false);
972426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    }
973426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
974426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    private void updateSmsOverImsState() {
975426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        Log.d(TAG, "updateSmsOverImsState isSmsOverImsEnabled()=" + isSmsOverImsEnabled());
976426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        String buttonText = isSmsOverImsEnabled() ?
977426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville                            getString(R.string.sms_over_ims_off) :
978426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville                            getString(R.string.sms_over_ims_on);
979426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        smsOverImsButton.setText(buttonText);
980426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    }
981426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
982426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    private Button lteRamDumpButton;
983426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    static final String PROPERTY_LTE_RAM_DUMP = "persist.radio.ramdump";
984426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    OnClickListener mLteRamDumpHandler = new OnClickListener() {
985426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        @Override
986426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        public void onClick(View v) {
987426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville            Log.d(TAG, String.format("toggle %s: currently %s",
988426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville                    PROPERTY_LTE_RAM_DUMP, (isSmsOverImsEnabled() ? "on":"off")));
989426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville            boolean newValue = !isLteRamDumpEnabled();
990426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville            SystemProperties.set(PROPERTY_LTE_RAM_DUMP, newValue ? "1":"0");
991426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville            updateLteRamDumpState();
992426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        }
993426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    };
994426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
995426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    private boolean isLteRamDumpEnabled() {
996426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        return SystemProperties.getBoolean(PROPERTY_LTE_RAM_DUMP, false);
997426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    }
998426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
999426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    private void updateLteRamDumpState() {
1000426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        Log.d(TAG, "updateLteRamDumpState isLteRamDumpEnabled()=" + isLteRamDumpEnabled());
1001426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        String buttonText = isLteRamDumpEnabled() ?
1002426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville                            getString(R.string.lte_ram_dump_off) :
1003426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville                            getString(R.string.lte_ram_dump_on);
1004426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville        lteRamDumpButton.setText(buttonText);
1005426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville    }
1006426fc66a8a9371e34d936d18d5b254fd002b4c11Wink Saville
1007a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
1008afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
1009a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            phone.disableDnsCheck(!phone.isDnsCheckDisabled());
1010a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            updateDnsCheckState();
1011afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1012afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1013342101a0729a30587dc4fa79b5f017634bd985c0johnwang
1014a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink    OnClickListener mOemInfoButtonHandler = new OnClickListener() {
1015afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
1016a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            Intent intent = new Intent("com.android.settings.OEM_RADIO_INFO");
1017a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            try {
1018a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                startActivity(intent);
1019a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            } catch (android.content.ActivityNotFoundException ex) {
1020a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                Log.d(TAG, "OEM-specific Info/Settings Activity Not Found : " + ex);
1021a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                // If the activity does not exist, there are no OEM
1022a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink                // settings, and so we can just do nothing...
1023a5f4c8f8c91405038797e1529d465fd7fe06edb2Tammo Spalink            }
1024afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1025afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1026342101a0729a30587dc4fa79b5f017634bd985c0johnwang
1027afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mPingButtonHandler = new OnClickListener() {
1028afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
1029afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updatePingState();
1030afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1031afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1032afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1033afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mUpdateSmscButtonHandler = new OnClickListener() {
1034afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
1035afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            updateSmscButton.setEnabled(false);
103621dd407c10bb1bade10233e8468ea6729bcf71efjsh            phone.setSmscAddress(smsc.getText().toString(),
1037afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mHandler.obtainMessage(EVENT_UPDATE_SMSC_DONE));
1038afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1039afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1040afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1041afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    OnClickListener mRefreshSmscButtonHandler = new OnClickListener() {
1042afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onClick(View v) {
1043afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            refreshSmsc();
1044afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1045afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1046afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1047afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    AdapterView.OnItemSelectedListener
1048afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPreferredNetworkHandler = new AdapterView.OnItemSelectedListener() {
1049afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onItemSelected(AdapterView parent, View v, int pos, long id) {
1050afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
105132310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira            if (pos>=0 && pos<=(mPreferredNetworkLabels.length - 2)) {
1052afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                phone.setPreferredNetworkType(pos, msg);
1053afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
1054afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1055afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1056afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onNothingSelected(AdapterView parent) {
1057afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
1058afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
1059afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1060afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String[] mPreferredNetworkLabels = {
106187fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "WCDMA preferred",
106287fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "GSM only",
106387fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "WCDMA only",
106487fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "GSM auto (PRL)",
106587fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "CDMA auto (PRL)",
106687fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "CDMA only",
106787fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "EvDo only",
106887fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "GSM/CDMA auto (PRL)",
106932310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira            "LTE/CDMA auto (PRL)",
107032310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira            "LTE/GSM auto (PRL)",
107132310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira            "LTE/GSM/CDMA auto (PRL)",
107232310ee560d7a700fb1d910666eaaf096d84b643Ricardo Cerqueira            "LTE only",
107387fa11b90e9a4a5fdd73e71e6c0b057f9df1a860jsh            "Unknown"};
1074afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
1075