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.AlertDialog;
2020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Daiimport android.app.Dialog;
21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.ContentUris;
22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.ContentValues;
23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent;
24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.SharedPreferences;
25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.res.Resources;
26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.database.Cursor;
27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.Uri;
28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.SystemProperties;
30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.EditTextPreference;
31195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganeshimport android.preference.ListPreference;
32cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikangimport android.preference.CheckBoxPreference;
33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference;
34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceActivity;
35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Telephony;
36d0de427f9ac976d09db6a645f83954899e0fef24John Huangimport android.telephony.TelephonyManager;
37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log;
38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.KeyEvent;
39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.Menu;
40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.MenuItem;
41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
42d0de427f9ac976d09db6a645f83954899e0fef24John Huangimport com.android.internal.telephony.Phone;
43a52c5698ca9da9f681232ac92cc02de1138956a5Lorenzo Colittiimport com.android.internal.telephony.RILConstants;
44d0de427f9ac976d09db6a645f83954899e0fef24John Huangimport com.android.internal.telephony.TelephonyProperties;
45195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
46afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
47195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganeshpublic class ApnEditor extends PreferenceActivity
48195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        implements SharedPreferences.OnSharedPreferenceChangeListener,
49195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                    Preference.OnPreferenceChangeListener {
50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final static String TAG = ApnEditor.class.getSimpleName();
52195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final static String SAVED_POS = "pos";
54195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    private final static String KEY_AUTH_TYPE = "auth_type";
55a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti    private final static String KEY_PROTOCOL = "apn_protocol";
56d0de427f9ac976d09db6a645f83954899e0fef24John Huang    private final static String KEY_ROAMING_PROTOCOL = "apn_roaming_protocol";
57cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private final static String KEY_CARRIER_ENABLED = "carrier_enabled";
58cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private final static String KEY_BEARER = "bearer";
59195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_DELETE = Menu.FIRST;
61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_SAVE = Menu.FIRST + 1;
62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_CANCEL = Menu.FIRST + 2;
6320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    private static final int ERROR_DIALOG_ID = 0;
64195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static String sNotSet;
66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mName;
67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mApn;
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mProxy;
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mPort;
70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mUser;
71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mServer;
72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mPassword;
73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mMmsc;
74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mMcc;
75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mMnc;
76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mMmsProxy;
77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mMmsPort;
78195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    private ListPreference mAuthType;
79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mApnType;
80a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti    private ListPreference mProtocol;
81d0de427f9ac976d09db6a645f83954899e0fef24John Huang    private ListPreference mRoamingProtocol;
82cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private CheckBoxPreference mCarrierEnabled;
83cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private ListPreference mBearer;
84195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mCurMnc;
86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mCurMcc;
87195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Uri mUri;
89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Cursor mCursor;
90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean mNewApn;
91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean mFirstTime;
92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Resources mRes;
93195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * Standard projection for the interesting columns of a normal note.
96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String[] sProjection = new String[] {
98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers._ID,     // 0
99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.NAME,    // 1
100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.APN,     // 2
101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.PROXY,   // 3
102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.PORT,    // 4
103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.USER,    // 5
104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.SERVER,  // 6
105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.PASSWORD, // 7
106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.MMSC, // 8
107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.MCC, // 9
108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.MNC, // 10
109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.NUMERIC, // 11
110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.MMSPROXY,// 12
111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.MMSPORT, // 13
112195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            Telephony.Carriers.AUTH_TYPE, // 14
113195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            Telephony.Carriers.TYPE, // 15
114a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            Telephony.Carriers.PROTOCOL, // 16
115cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            Telephony.Carriers.CARRIER_ENABLED, // 17
116cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            Telephony.Carriers.BEARER, // 18
117d0de427f9ac976d09db6a645f83954899e0fef24John Huang            Telephony.Carriers.ROAMING_PROTOCOL // 19
118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
119195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int ID_INDEX = 0;
121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int NAME_INDEX = 1;
122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int APN_INDEX = 2;
123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int PROXY_INDEX = 3;
124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int PORT_INDEX = 4;
125afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int USER_INDEX = 5;
126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int SERVER_INDEX = 6;
127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int PASSWORD_INDEX = 7;
128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MMSC_INDEX = 8;
129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MCC_INDEX = 9;
130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MNC_INDEX = 10;
131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MMSPROXY_INDEX = 12;
132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MMSPORT_INDEX = 13;
133195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    private static final int AUTH_TYPE_INDEX = 14;
134195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    private static final int TYPE_INDEX = 15;
135a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti    private static final int PROTOCOL_INDEX = 16;
136cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private static final int CARRIER_ENABLED_INDEX = 17;
137cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private static final int BEARER_INDEX = 18;
138d0de427f9ac976d09db6a645f83954899e0fef24John Huang    private static final int ROAMING_PROTOCOL_INDEX = 19;
139195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
140195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onCreate(Bundle icicle) {
143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.apn_editor);
146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        sNotSet = getResources().getString(R.string.apn_not_set);
148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mName = (EditTextPreference) findPreference("apn_name");
149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mApn = (EditTextPreference) findPreference("apn_apn");
150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mProxy = (EditTextPreference) findPreference("apn_http_proxy");
151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPort = (EditTextPreference) findPreference("apn_http_port");
152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mUser = (EditTextPreference) findPreference("apn_user");
153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mServer = (EditTextPreference) findPreference("apn_server");
154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPassword = (EditTextPreference) findPreference("apn_password");
155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsProxy = (EditTextPreference) findPreference("apn_mms_proxy");
156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsPort = (EditTextPreference) findPreference("apn_mms_port");
157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsc = (EditTextPreference) findPreference("apn_mmsc");
158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMcc = (EditTextPreference) findPreference("apn_mcc");
159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMnc = (EditTextPreference) findPreference("apn_mnc");
160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mApnType = (EditTextPreference) findPreference("apn_type");
161195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
162a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        mAuthType = (ListPreference) findPreference(KEY_AUTH_TYPE);
163195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        mAuthType.setOnPreferenceChangeListener(this);
164195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
165a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        mProtocol = (ListPreference) findPreference(KEY_PROTOCOL);
166a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        mProtocol.setOnPreferenceChangeListener(this);
167a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti
168d0de427f9ac976d09db6a645f83954899e0fef24John Huang        mRoamingProtocol = (ListPreference) findPreference(KEY_ROAMING_PROTOCOL);
169d0de427f9ac976d09db6a645f83954899e0fef24John Huang        // Only enable this on CDMA phones for now, since it may cause problems on other phone
170d0de427f9ac976d09db6a645f83954899e0fef24John Huang        // types.  (This screen is not normally accessible on CDMA phones, but is useful for
171d0de427f9ac976d09db6a645f83954899e0fef24John Huang        // testing.)
172d0de427f9ac976d09db6a645f83954899e0fef24John Huang        TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
173d0de427f9ac976d09db6a645f83954899e0fef24John Huang        if (tm.getCurrentPhoneType() == Phone.PHONE_TYPE_CDMA) {
174d0de427f9ac976d09db6a645f83954899e0fef24John Huang            mRoamingProtocol.setOnPreferenceChangeListener(this);
175d0de427f9ac976d09db6a645f83954899e0fef24John Huang        } else {
176d0de427f9ac976d09db6a645f83954899e0fef24John Huang            getPreferenceScreen().removePreference(mRoamingProtocol);
177d0de427f9ac976d09db6a645f83954899e0fef24John Huang        }
178d0de427f9ac976d09db6a645f83954899e0fef24John Huang
179cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        mCarrierEnabled = (CheckBoxPreference) findPreference(KEY_CARRIER_ENABLED);
180cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang
181cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        mBearer = (ListPreference) findPreference(KEY_BEARER);
182cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        mBearer.setOnPreferenceChangeListener(this);
183cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang
184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mRes = getResources();
185195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        final Intent intent = getIntent();
187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        final String action = intent.getAction();
188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mFirstTime = icicle == null;
190195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (action.equals(Intent.ACTION_EDIT)) {
192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mUri = intent.getData();
193afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (action.equals(Intent.ACTION_INSERT)) {
1944d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani            if (mFirstTime || icicle.getInt(SAVED_POS) == 0) {
195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mUri = getContentResolver().insert(intent.getData(), new ContentValues());
196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
197195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                mUri = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI,
198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        icicle.getInt(SAVED_POS));
199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
200afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mNewApn = true;
201afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // If we were unable to create a new note, then just finish
202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // this activity.  A RESULT_CANCELED will be sent back to the
203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // original activity if they requested a result.
204afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (mUri == null) {
205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Log.w(TAG, "Failed to insert new telephony provider into "
206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        + getIntent().getData());
207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                finish();
208afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                return;
209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
210195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // The new entry was created, so assume all will end well and
212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // set the result to be returned.
213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            setResult(RESULT_OK, (new Intent()).setAction(mUri.toString()));
214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
215afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            finish();
217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return;
218afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mCursor = managedQuery(mUri, sProjection, null, null);
221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mCursor.moveToFirst();
222195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        fillUi();
224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onResume() {
228afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
2294d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        getPreferenceScreen().getSharedPreferences()
2304d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani                .registerOnSharedPreferenceChangeListener(this);
231afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
232195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onPause() {
2354d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        getPreferenceScreen().getSharedPreferences()
2364d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani                .unregisterOnSharedPreferenceChangeListener(this);
237195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        super.onPause();
238afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
239195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
240afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void fillUi() {
241195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        if (mFirstTime) {
242afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mFirstTime = false;
243afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // Fill in all the values from the db in both text editor and summary
244afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mName.setText(mCursor.getString(NAME_INDEX));
245afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mApn.setText(mCursor.getString(APN_INDEX));
246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mProxy.setText(mCursor.getString(PROXY_INDEX));
247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPort.setText(mCursor.getString(PORT_INDEX));
248afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mUser.setText(mCursor.getString(USER_INDEX));
249afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mServer.setText(mCursor.getString(SERVER_INDEX));
250afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPassword.setText(mCursor.getString(PASSWORD_INDEX));
251afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMmsProxy.setText(mCursor.getString(MMSPROXY_INDEX));
252afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMmsPort.setText(mCursor.getString(MMSPORT_INDEX));
253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMmsc.setText(mCursor.getString(MMSC_INDEX));
254afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMcc.setText(mCursor.getString(MCC_INDEX));
255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMnc.setText(mCursor.getString(MNC_INDEX));
256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mApnType.setText(mCursor.getString(TYPE_INDEX));
257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (mNewApn) {
258195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                String numeric =
259c38866843e966622346dc8f7b028749cac9c2198Wink Saville                    SystemProperties.get(TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC);
260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                // MCC is first 3 chars and then in 2 - 3 chars of MNC
261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                if (numeric != null && numeric.length() > 4) {
262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    // Country code
263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    String mcc = numeric.substring(0, 3);
264afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    // Network code
265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    String mnc = numeric.substring(3);
266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    // Auto populate MNC and MCC for new entries, based on what SIM reports
267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mMcc.setText(mcc);
268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mMnc.setText(mnc);
269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mCurMnc = mnc;
270afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mCurMcc = mcc;
271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                }
272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
273195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            int authVal = mCursor.getInt(AUTH_TYPE_INDEX);
274195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            if (authVal != -1) {
275195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                mAuthType.setValueIndex(authVal);
2761929008ac5b45af96f2175b5232c3c66d2474f52Marta Białka            } else {
2771929008ac5b45af96f2175b5232c3c66d2474f52Marta Białka                mAuthType.setValue(null);
278195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            }
279195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
280a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            mProtocol.setValue(mCursor.getString(PROTOCOL_INDEX));
281d0de427f9ac976d09db6a645f83954899e0fef24John Huang            mRoamingProtocol.setValue(mCursor.getString(ROAMING_PROTOCOL_INDEX));
282cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            mCarrierEnabled.setChecked(mCursor.getInt(CARRIER_ENABLED_INDEX)==1);
283cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            mBearer.setValue(mCursor.getString(BEARER_INDEX));
284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
285195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mName.setSummary(checkNull(mName.getText()));
287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mApn.setSummary(checkNull(mApn.getText()));
288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mProxy.setSummary(checkNull(mProxy.getText()));
289afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPort.setSummary(checkNull(mPort.getText()));
290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mUser.setSummary(checkNull(mUser.getText()));
291afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mServer.setSummary(checkNull(mServer.getText()));
292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPassword.setSummary(starify(mPassword.getText()));
293afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsProxy.setSummary(checkNull(mMmsProxy.getText()));
294afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsPort.setSummary(checkNull(mMmsPort.getText()));
295afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsc.setSummary(checkNull(mMmsc.getText()));
296afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMcc.setSummary(checkNull(mMcc.getText()));
297afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMnc.setSummary(checkNull(mMnc.getText()));
298afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mApnType.setSummary(checkNull(mApnType.getText()));
299195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
300195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        String authVal = mAuthType.getValue();
301195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        if (authVal != null) {
302195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            int authValIndex = Integer.parseInt(authVal);
303195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            mAuthType.setValueIndex(authValIndex);
304195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
305195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            String []values = mRes.getStringArray(R.array.apn_auth_entries);
306195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            mAuthType.setSummary(values[authValIndex]);
307195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        } else {
308195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            mAuthType.setSummary(sNotSet);
309195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        }
310a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti
311a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        mProtocol.setSummary(
312d0de427f9ac976d09db6a645f83954899e0fef24John Huang                checkNull(protocolDescription(mProtocol.getValue(), mProtocol)));
313d0de427f9ac976d09db6a645f83954899e0fef24John Huang        mRoamingProtocol.setSummary(
314d0de427f9ac976d09db6a645f83954899e0fef24John Huang                checkNull(protocolDescription(mRoamingProtocol.getValue(), mRoamingProtocol)));
315cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        mBearer.setSummary(
316cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang                checkNull(bearerDescription(mBearer.getValue())));
317a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti    }
318a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti
319a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti    /**
320a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti     * Returns the UI choice (e.g., "IPv4/IPv6") corresponding to the given
321a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti     * raw value of the protocol preference (e.g., "IPV4V6"). If unknown,
322a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti     * return null.
323a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti     */
324d0de427f9ac976d09db6a645f83954899e0fef24John Huang    private String protocolDescription(String raw, ListPreference protocol) {
325d0de427f9ac976d09db6a645f83954899e0fef24John Huang        int protocolIndex = protocol.findIndexOfValue(raw);
326a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        if (protocolIndex == -1) {
327a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            return null;
328a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        } else {
329a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            String[] values = mRes.getStringArray(R.array.apn_protocol_entries);
330a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            try {
331a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti                return values[protocolIndex];
332a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            } catch (ArrayIndexOutOfBoundsException e) {
333a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti                return null;
334a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            }
335a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        }
336195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    }
337195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
338cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private String bearerDescription(String raw) {
339cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        int mBearerIndex = mBearer.findIndexOfValue(raw);
340cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        if (mBearerIndex == -1) {
341cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            return null;
342cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        } else {
343cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            String[] values = mRes.getStringArray(R.array.bearer_entries);
344cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            try {
345cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang                return values[mBearerIndex];
346cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            } catch (ArrayIndexOutOfBoundsException e) {
347cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang                return null;
348cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            }
349cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        }
350cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    }
351cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang
352195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    public boolean onPreferenceChange(Preference preference, Object newValue) {
353195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        String key = preference.getKey();
354195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        if (KEY_AUTH_TYPE.equals(key)) {
355195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            try {
356195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                int index = Integer.parseInt((String) newValue);
357195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                mAuthType.setValueIndex(index);
358195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
359195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                String []values = mRes.getStringArray(R.array.apn_auth_entries);
360195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                mAuthType.setSummary(values[index]);
361195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            } catch (NumberFormatException e) {
362195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                return false;
363195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            }
364d0de427f9ac976d09db6a645f83954899e0fef24John Huang        } else if (KEY_PROTOCOL.equals(key)) {
365d0de427f9ac976d09db6a645f83954899e0fef24John Huang            String protocol = protocolDescription((String) newValue, mProtocol);
366a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            if (protocol == null) {
367a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti                return false;
368a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            }
369a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            mProtocol.setSummary(protocol);
370a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            mProtocol.setValue((String) newValue);
371d0de427f9ac976d09db6a645f83954899e0fef24John Huang        } else if (KEY_ROAMING_PROTOCOL.equals(key)) {
372d0de427f9ac976d09db6a645f83954899e0fef24John Huang            String protocol = protocolDescription((String) newValue, mRoamingProtocol);
373d0de427f9ac976d09db6a645f83954899e0fef24John Huang            if (protocol == null) {
374d0de427f9ac976d09db6a645f83954899e0fef24John Huang                return false;
375d0de427f9ac976d09db6a645f83954899e0fef24John Huang            }
376d0de427f9ac976d09db6a645f83954899e0fef24John Huang            mRoamingProtocol.setSummary(protocol);
377d0de427f9ac976d09db6a645f83954899e0fef24John Huang            mRoamingProtocol.setValue((String) newValue);
378d0de427f9ac976d09db6a645f83954899e0fef24John Huang        } else if (KEY_BEARER.equals(key)) {
379cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            String bearer = bearerDescription((String) newValue);
380cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            if (bearer == null) {
381cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang                return false;
382cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            }
383cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            mBearer.setValue((String) newValue);
384cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            mBearer.setSummary(bearer);
385cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        }
386cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang
387195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        return true;
388afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
389afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
390afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
391afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onCreateOptionsMenu(Menu menu) {
392afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreateOptionsMenu(menu);
393afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // If it's a new APN, then cancel will delete the new entry in onPause
394afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (!mNewApn) {
395afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            menu.add(0, MENU_DELETE, 0, R.string.menu_delete)
3968472b1b60d7400a2a6dab8b54d1e1fd80659487fJustin Ho                .setIcon(R.drawable.ic_menu_delete_holo_dark);
397afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
398afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(0, MENU_SAVE, 0, R.string.menu_save)
399afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            .setIcon(android.R.drawable.ic_menu_save);
400afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(0, MENU_CANCEL, 0, R.string.menu_cancel)
401afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
402afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return true;
403afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
404afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
405afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
406afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onOptionsItemSelected(MenuItem item) {
407afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (item.getItemId()) {
408afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        case MENU_DELETE:
409afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            deleteApn();
410afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
411afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        case MENU_SAVE:
412afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (validateAndSave(false)) {
413afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                finish();
414afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
415afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
416afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        case MENU_CANCEL:
417afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (mNewApn) {
418afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                getContentResolver().delete(mUri, null, null);
419afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
420afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            finish();
421afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
422afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
423afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return super.onOptionsItemSelected(item);
424afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
425195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
426afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
427afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onKeyDown(int keyCode, KeyEvent event) {
428afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (keyCode) {
429afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            case KeyEvent.KEYCODE_BACK: {
430afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                if (validateAndSave(false)) {
431afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    finish();
432afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                }
433afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                return true;
434afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
435afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
436afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return super.onKeyDown(keyCode, event);
437afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
438afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
439afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
440afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onSaveInstanceState(Bundle icicle) {
441afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onSaveInstanceState(icicle);
4424d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        if (validateAndSave(true)) {
4434d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani            icicle.putInt(SAVED_POS, mCursor.getInt(ID_INDEX));
4444d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        }
445afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
446195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
447afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
448afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * Check the key fields' validity and save if valid.
449afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * @param force save even if the fields are not valid, if the app is
450afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     *        being suspended
451afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * @return true if the data was saved
452afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
453afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean validateAndSave(boolean force) {
454afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String name = checkNotSet(mName.getText());
455afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String apn = checkNotSet(mApn.getText());
456afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String mcc = checkNotSet(mMcc.getText());
457afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String mnc = checkNotSet(mMnc.getText());
458195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
45920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        if (getErrorMsg() != null && !force) {
46020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            showDialog(ERROR_DIALOG_ID);
461afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
462afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
463195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
464afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (!mCursor.moveToFirst()) {
465afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Log.w(TAG,
466afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    "Could not go to the first row in the Cursor when saving data.");
467afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
468afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
469195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
4704d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        // If it's a new APN and a name or apn haven't been entered, then erase the entry
4714d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        if (force && mNewApn && name.length() < 1 && apn.length() < 1) {
4724d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani            getContentResolver().delete(mUri, null, null);
4734d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani            return false;
4744d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        }
4754d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani
476afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        ContentValues values = new ContentValues();
477195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
4784d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        // Add a dummy name "Untitled", if the user exits the screen without adding a name but
4794d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        // entered other information worth keeping.
4804d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        values.put(Telephony.Carriers.NAME,
4814d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani                name.length() < 1 ? getResources().getString(R.string.untitled_apn) : name);
482afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.APN, apn);
483afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.PROXY, checkNotSet(mProxy.getText()));
484afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.PORT, checkNotSet(mPort.getText()));
485afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.MMSPROXY, checkNotSet(mMmsProxy.getText()));
486afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.MMSPORT, checkNotSet(mMmsPort.getText()));
487afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.USER, checkNotSet(mUser.getText()));
488afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.SERVER, checkNotSet(mServer.getText()));
489afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.PASSWORD, checkNotSet(mPassword.getText()));
490195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        values.put(Telephony.Carriers.MMSC, checkNotSet(mMmsc.getText()));
491195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
492195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        String authVal = mAuthType.getValue();
493195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        if (authVal != null) {
494195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            values.put(Telephony.Carriers.AUTH_TYPE, Integer.parseInt(authVal));
495195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        }
496195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
497a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        values.put(Telephony.Carriers.PROTOCOL, checkNotSet(mProtocol.getValue()));
498d0de427f9ac976d09db6a645f83954899e0fef24John Huang        values.put(Telephony.Carriers.ROAMING_PROTOCOL, checkNotSet(mRoamingProtocol.getValue()));
499a52c5698ca9da9f681232ac92cc02de1138956a5Lorenzo Colitti
500afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.TYPE, checkNotSet(mApnType.getText()));
501afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
502afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.MCC, mcc);
503afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.MNC, mnc);
504195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
505afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.NUMERIC, mcc + mnc);
506195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
507afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (mCurMnc != null && mCurMcc != null) {
508afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (mCurMnc.equals(mnc) && mCurMcc.equals(mcc)) {
509afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                values.put(Telephony.Carriers.CURRENT, 1);
510afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
511afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
512195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
513cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        String bearerVal = mBearer.getValue();
514cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        if (bearerVal != null) {
515cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            values.put(Telephony.Carriers.BEARER, Integer.parseInt(bearerVal));
516cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        }
517cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang
518afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        getContentResolver().update(mUri, values, null, null);
519195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
520afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return true;
521afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
522afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
52320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    private String getErrorMsg() {
52420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        String errorMsg = null;
52520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
52620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        String name = checkNotSet(mName.getText());
52720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        String apn = checkNotSet(mApn.getText());
52820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        String mcc = checkNotSet(mMcc.getText());
52920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        String mnc = checkNotSet(mMnc.getText());
53020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
53120108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        if (name.length() < 1) {
53220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            errorMsg = mRes.getString(R.string.error_name_empty);
53320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        } else if (apn.length() < 1) {
53420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            errorMsg = mRes.getString(R.string.error_apn_empty);
53520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        } else if (mcc.length() != 3) {
53620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            errorMsg = mRes.getString(R.string.error_mcc_not3);
53720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        } else if ((mnc.length() & 0xFFFE) != 2) {
53820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            errorMsg = mRes.getString(R.string.error_mnc_not23);
53920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        }
54020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
54120108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        return errorMsg;
54220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    }
54320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
54420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    @Override
54520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    protected Dialog onCreateDialog(int id) {
54620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
54720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        if (id == ERROR_DIALOG_ID) {
54820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            String msg = getErrorMsg();
54920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
55020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            return new AlertDialog.Builder(this)
55120108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .setTitle(R.string.error_title)
55220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .setPositiveButton(android.R.string.ok, null)
55320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .setMessage(msg)
55420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .create();
55520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        }
55620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
55720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        return super.onCreateDialog(id);
55820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    }
55920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
56020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    @Override
56120108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    protected void onPrepareDialog(int id, Dialog dialog) {
56220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        super.onPrepareDialog(id, dialog);
56320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
56420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        if (id == ERROR_DIALOG_ID) {
56520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            String msg = getErrorMsg();
56620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
56720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            if (msg != null) {
56820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                ((AlertDialog)dialog).setMessage(msg);
56920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            }
57020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        }
571afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
572afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
573afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void deleteApn() {
574afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        getContentResolver().delete(mUri, null, null);
575afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        finish();
576afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
577195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
578afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String starify(String value) {
579afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (value == null || value.length() == 0) {
580afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return sNotSet;
581afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
582afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            char[] password = new char[value.length()];
583afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            for (int i = 0; i < password.length; i++) {
584afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                password[i] = '*';
585afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
586afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return new String(password);
587afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
588afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
589195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
590afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String checkNull(String value) {
591afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (value == null || value.length() == 0) {
592afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return sNotSet;
593afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
594afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return value;
595afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
596afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
597195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
598afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String checkNotSet(String value) {
599afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (value == null || value.equals(sNotSet)) {
600afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return "";
601afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
602afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return value;
603afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
604afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
605195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
606afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
607afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Preference pref = findPreference(key);
608afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (pref != null) {
609414ab76fe3cebce39dd49317b4e368a16cca0847Jiehua Dai            if (pref.equals(mPassword)){
610414ab76fe3cebce39dd49317b4e368a16cca0847Jiehua Dai                pref.setSummary(starify(sharedPreferences.getString(key, "")));
611414ab76fe3cebce39dd49317b4e368a16cca0847Jiehua Dai            } else {
612414ab76fe3cebce39dd49317b4e368a16cca0847Jiehua Dai                pref.setSummary(checkNull(sharedPreferences.getString(key, "")));
613414ab76fe3cebce39dd49317b4e368a16cca0847Jiehua Dai            }
614afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
615afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
616afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
617