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.preference.EditTextPreference;
30195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganeshimport android.preference.ListPreference;
317e28221640a931f9e49659679f354b23f5a727e2Amit Mahajanimport android.preference.MultiSelectListPreference;
32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference;
33710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglioimport android.preference.PreferenceActivity;
34daef2e2b066a0bf204b9a63b7cae13e3d5441f4eFabrice Di Meglioimport android.preference.SwitchPreference;
35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Telephony;
367e28221640a931f9e49659679f354b23f5a727e2Amit Mahajanimport android.telephony.ServiceState;
3709c9e5eb5d8d223b3b3faa29ce8b03f8873d0553Mick Linimport android.telephony.SubscriptionManager;
38d0de427f9ac976d09db6a645f83954899e0fef24John Huangimport android.telephony.TelephonyManager;
397e28221640a931f9e49659679f354b23f5a727e2Amit Mahajanimport android.text.TextUtils;
40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log;
41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.KeyEvent;
42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.Menu;
43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.MenuItem;
448a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenimport com.android.internal.logging.MetricsLogger;
45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
467e28221640a931f9e49659679f354b23f5a727e2Amit Mahajanimport java.util.HashSet;
477e28221640a931f9e49659679f354b23f5a727e2Amit Mahajanimport java.util.Set;
48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
498a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenpublic class ApnEditor extends InstrumentedPreferenceActivity
50195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        implements SharedPreferences.OnSharedPreferenceChangeListener,
51195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                    Preference.OnPreferenceChangeListener {
52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final static String TAG = ApnEditor.class.getSimpleName();
54195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final static String SAVED_POS = "pos";
56195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    private final static String KEY_AUTH_TYPE = "auth_type";
57a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti    private final static String KEY_PROTOCOL = "apn_protocol";
58d0de427f9ac976d09db6a645f83954899e0fef24John Huang    private final static String KEY_ROAMING_PROTOCOL = "apn_roaming_protocol";
59cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private final static String KEY_CARRIER_ENABLED = "carrier_enabled";
607e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan    private final static String KEY_BEARER_MULTI = "bearer_multi";
61aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi    private final static String KEY_MVNO_TYPE = "mvno_type";
62195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_DELETE = Menu.FIRST;
64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_SAVE = Menu.FIRST + 1;
65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MENU_CANCEL = Menu.FIRST + 2;
6620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    private static final int ERROR_DIALOG_ID = 0;
67195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static String sNotSet;
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mName;
70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mApn;
71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mProxy;
72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mPort;
73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mUser;
74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mServer;
75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mPassword;
76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mMmsc;
77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mMcc;
78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mMnc;
79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mMmsProxy;
80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mMmsPort;
81195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    private ListPreference mAuthType;
82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditTextPreference mApnType;
83a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti    private ListPreference mProtocol;
84d0de427f9ac976d09db6a645f83954899e0fef24John Huang    private ListPreference mRoamingProtocol;
85daef2e2b066a0bf204b9a63b7cae13e3d5441f4eFabrice Di Meglio    private SwitchPreference mCarrierEnabled;
867e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan    private MultiSelectListPreference mBearerMulti;
87aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi    private ListPreference mMvnoType;
88aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi    private EditTextPreference mMvnoMatchData;
89195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mCurMnc;
91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mCurMcc;
92195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Uri mUri;
94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Cursor mCursor;
95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean mNewApn;
96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean mFirstTime;
9709c9e5eb5d8d223b3b3faa29ce8b03f8873d0553Mick Lin    private int mSubId;
98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Resources mRes;
99cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi    private TelephonyManager mTelephonyManager;
1007e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan    private int mBearerInitialVal = 0;
10117b0c481e0b08505dfe7a7700953c8016f1cc0ceAmit Mahajan    private String mMvnoTypeStr;
10217b0c481e0b08505dfe7a7700953c8016f1cc0ceAmit Mahajan    private String mMvnoMatchDataStr;
103195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * Standard projection for the interesting columns of a normal note.
106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String[] sProjection = new String[] {
108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers._ID,     // 0
109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.NAME,    // 1
110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.APN,     // 2
111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.PROXY,   // 3
112afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.PORT,    // 4
113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.USER,    // 5
114afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.SERVER,  // 6
115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.PASSWORD, // 7
116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.MMSC, // 8
117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.MCC, // 9
118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.MNC, // 10
119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.NUMERIC, // 11
120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.MMSPROXY,// 12
121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Telephony.Carriers.MMSPORT, // 13
122195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            Telephony.Carriers.AUTH_TYPE, // 14
123195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            Telephony.Carriers.TYPE, // 15
124a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            Telephony.Carriers.PROTOCOL, // 16
125cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            Telephony.Carriers.CARRIER_ENABLED, // 17
126cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            Telephony.Carriers.BEARER, // 18
1277e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            Telephony.Carriers.BEARER_BITMASK, // 19
1287e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            Telephony.Carriers.ROAMING_PROTOCOL, // 20
1297e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            Telephony.Carriers.MVNO_TYPE,   // 21
1307e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            Telephony.Carriers.MVNO_MATCH_DATA  // 22
131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
132195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int ID_INDEX = 0;
134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int NAME_INDEX = 1;
135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int APN_INDEX = 2;
136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int PROXY_INDEX = 3;
137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int PORT_INDEX = 4;
138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int USER_INDEX = 5;
139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int SERVER_INDEX = 6;
140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int PASSWORD_INDEX = 7;
141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MMSC_INDEX = 8;
142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MCC_INDEX = 9;
143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MNC_INDEX = 10;
144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MMSPROXY_INDEX = 12;
145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MMSPORT_INDEX = 13;
146195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    private static final int AUTH_TYPE_INDEX = 14;
147195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    private static final int TYPE_INDEX = 15;
148a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti    private static final int PROTOCOL_INDEX = 16;
149cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private static final int CARRIER_ENABLED_INDEX = 17;
150cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private static final int BEARER_INDEX = 18;
1517e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan    private static final int BEARER_BITMASK_INDEX = 19;
1527e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan    private static final int ROAMING_PROTOCOL_INDEX = 20;
1537e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan    private static final int MVNO_TYPE_INDEX = 21;
1547e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan    private static final int MVNO_MATCH_DATA_INDEX = 22;
155195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
156195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
158710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio    protected void onCreate(Bundle icicle) {
159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.apn_editor);
162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        sNotSet = getResources().getString(R.string.apn_not_set);
164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mName = (EditTextPreference) findPreference("apn_name");
165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mApn = (EditTextPreference) findPreference("apn_apn");
166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mProxy = (EditTextPreference) findPreference("apn_http_proxy");
167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPort = (EditTextPreference) findPreference("apn_http_port");
168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mUser = (EditTextPreference) findPreference("apn_user");
169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mServer = (EditTextPreference) findPreference("apn_server");
170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPassword = (EditTextPreference) findPreference("apn_password");
171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsProxy = (EditTextPreference) findPreference("apn_mms_proxy");
172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsPort = (EditTextPreference) findPreference("apn_mms_port");
173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsc = (EditTextPreference) findPreference("apn_mmsc");
174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMcc = (EditTextPreference) findPreference("apn_mcc");
175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMnc = (EditTextPreference) findPreference("apn_mnc");
176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mApnType = (EditTextPreference) findPreference("apn_type");
177195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
178a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        mAuthType = (ListPreference) findPreference(KEY_AUTH_TYPE);
179195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        mAuthType.setOnPreferenceChangeListener(this);
180195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
181a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        mProtocol = (ListPreference) findPreference(KEY_PROTOCOL);
182a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        mProtocol.setOnPreferenceChangeListener(this);
183a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti
184d0de427f9ac976d09db6a645f83954899e0fef24John Huang        mRoamingProtocol = (ListPreference) findPreference(KEY_ROAMING_PROTOCOL);
18568b9a26543e5d3f32013bbb5bd6ccb41ccad275aTore Anderson        mRoamingProtocol.setOnPreferenceChangeListener(this);
186d0de427f9ac976d09db6a645f83954899e0fef24John Huang
187daef2e2b066a0bf204b9a63b7cae13e3d5441f4eFabrice Di Meglio        mCarrierEnabled = (SwitchPreference) findPreference(KEY_CARRIER_ENABLED);
188cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang
1897e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        mBearerMulti = (MultiSelectListPreference) findPreference(KEY_BEARER_MULTI);
1907e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        mBearerMulti.setOnPreferenceChangeListener(this);
191cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang
192aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        mMvnoType = (ListPreference) findPreference(KEY_MVNO_TYPE);
193aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        mMvnoType.setOnPreferenceChangeListener(this);
194aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        mMvnoMatchData = (EditTextPreference) findPreference("mvno_match_data");
195aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi
196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mRes = getResources();
197195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
198710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        final Intent intent = getIntent();
199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        final String action = intent.getAction();
20017b0c481e0b08505dfe7a7700953c8016f1cc0ceAmit Mahajan        mSubId = intent.getIntExtra(ApnSettings.SUB_ID,
20117b0c481e0b08505dfe7a7700953c8016f1cc0ceAmit Mahajan                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mFirstTime = icicle == null;
204195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (action.equals(Intent.ACTION_EDIT)) {
206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mUri = intent.getData();
207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (action.equals(Intent.ACTION_INSERT)) {
2084d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani            if (mFirstTime || icicle.getInt(SAVED_POS) == 0) {
209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mUri = getContentResolver().insert(intent.getData(), new ContentValues());
210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
211195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                mUri = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI,
212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        icicle.getInt(SAVED_POS));
213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mNewApn = true;
21517b0c481e0b08505dfe7a7700953c8016f1cc0ceAmit Mahajan            mMvnoTypeStr = intent.getStringExtra(ApnSettings.MVNO_TYPE);
21617b0c481e0b08505dfe7a7700953c8016f1cc0ceAmit Mahajan            mMvnoMatchDataStr = intent.getStringExtra(ApnSettings.MVNO_MATCH_DATA);
217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // If we were unable to create a new note, then just finish
218afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // this activity.  A RESULT_CANCELED will be sent back to the
219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // original activity if they requested a result.
220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (mUri == null) {
221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Log.w(TAG, "Failed to insert new telephony provider into "
222710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio                        + getIntent().getData());
223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                finish();
224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                return;
225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
226195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // The new entry was created, so assume all will end well and
228afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // set the result to be returned.
229710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio            setResult(RESULT_OK, (new Intent()).setAction(mUri.toString()));
230afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
231afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
232afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            finish();
233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return;
234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
235afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
236710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        mCursor = managedQuery(mUri, sProjection, null, null);
237afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mCursor.moveToFirst();
238195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
239710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
240cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi
241afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        fillUi();
242afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
243afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
244afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
2458a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    protected int getMetricsCategory() {
2468a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren        return MetricsLogger.APN_EDITOR;
2478a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    }
2488a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
2498a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    @Override
250afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onResume() {
251afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
2524d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        getPreferenceScreen().getSharedPreferences()
2534d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani                .registerOnSharedPreferenceChangeListener(this);
254afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
255195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onPause() {
2584d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        getPreferenceScreen().getSharedPreferences()
2594d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani                .unregisterOnSharedPreferenceChangeListener(this);
260195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        super.onPause();
261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
262195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void fillUi() {
264195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        if (mFirstTime) {
265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mFirstTime = false;
266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // Fill in all the values from the db in both text editor and summary
267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mName.setText(mCursor.getString(NAME_INDEX));
268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mApn.setText(mCursor.getString(APN_INDEX));
269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mProxy.setText(mCursor.getString(PROXY_INDEX));
270afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPort.setText(mCursor.getString(PORT_INDEX));
271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mUser.setText(mCursor.getString(USER_INDEX));
272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mServer.setText(mCursor.getString(SERVER_INDEX));
273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPassword.setText(mCursor.getString(PASSWORD_INDEX));
274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMmsProxy.setText(mCursor.getString(MMSPROXY_INDEX));
275afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMmsPort.setText(mCursor.getString(MMSPORT_INDEX));
276afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMmsc.setText(mCursor.getString(MMSC_INDEX));
277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMcc.setText(mCursor.getString(MCC_INDEX));
278afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mMnc.setText(mCursor.getString(MNC_INDEX));
279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mApnType.setText(mCursor.getString(TYPE_INDEX));
280afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (mNewApn) {
28109c9e5eb5d8d223b3b3faa29ce8b03f8873d0553Mick Lin                String numeric = mTelephonyManager.getSimOperator(mSubId);
282afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                // MCC is first 3 chars and then in 2 - 3 chars of MNC
283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                if (numeric != null && numeric.length() > 4) {
284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    // Country code
285afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    String mcc = numeric.substring(0, 3);
286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    // Network code
287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    String mnc = numeric.substring(3);
288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    // Auto populate MNC and MCC for new entries, based on what SIM reports
289afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mMcc.setText(mcc);
290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mMnc.setText(mnc);
291afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mCurMnc = mnc;
292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mCurMcc = mcc;
293afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                }
294afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
295195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            int authVal = mCursor.getInt(AUTH_TYPE_INDEX);
296195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            if (authVal != -1) {
297195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                mAuthType.setValueIndex(authVal);
2981929008ac5b45af96f2175b5232c3c66d2474f52Marta Białka            } else {
2991929008ac5b45af96f2175b5232c3c66d2474f52Marta Białka                mAuthType.setValue(null);
300195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            }
301195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
302a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            mProtocol.setValue(mCursor.getString(PROTOCOL_INDEX));
303d0de427f9ac976d09db6a645f83954899e0fef24John Huang            mRoamingProtocol.setValue(mCursor.getString(ROAMING_PROTOCOL_INDEX));
304cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            mCarrierEnabled.setChecked(mCursor.getInt(CARRIER_ENABLED_INDEX)==1);
3057e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            mBearerInitialVal = mCursor.getInt(BEARER_INDEX);
3067e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan
3077e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            HashSet<String> bearers = new HashSet<String>();
3087e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            int bearerBitmask = mCursor.getInt(BEARER_BITMASK_INDEX);
3097e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            if (bearerBitmask == 0) {
3107e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                if (mBearerInitialVal == 0) {
3117e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                    bearers.add("" + 0);
3127e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                }
3137e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            } else {
3147e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                int i = 1;
3157e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                while (bearerBitmask != 0) {
3167e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                    if ((bearerBitmask & 1) == 1) {
3177e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                        bearers.add("" + i);
3187e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                    }
3197e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                    bearerBitmask >>= 1;
3207e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                    i++;
3217e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                }
3227e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            }
3237e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan
3247e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            if (mBearerInitialVal != 0 && bearers.contains("" + mBearerInitialVal) == false) {
3257e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                // add mBearerInitialVal to bearers
3267e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                bearers.add("" + mBearerInitialVal);
3277e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            }
3287e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            mBearerMulti.setValues(bearers);
3297e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan
330aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            mMvnoType.setValue(mCursor.getString(MVNO_TYPE_INDEX));
331aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            mMvnoMatchData.setEnabled(false);
332aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            mMvnoMatchData.setText(mCursor.getString(MVNO_MATCH_DATA_INDEX));
33317b0c481e0b08505dfe7a7700953c8016f1cc0ceAmit Mahajan            if (mNewApn && mMvnoTypeStr != null && mMvnoMatchDataStr != null) {
33417b0c481e0b08505dfe7a7700953c8016f1cc0ceAmit Mahajan                mMvnoType.setValue(mMvnoTypeStr);
33517b0c481e0b08505dfe7a7700953c8016f1cc0ceAmit Mahajan                mMvnoMatchData.setText(mMvnoMatchDataStr);
33617b0c481e0b08505dfe7a7700953c8016f1cc0ceAmit Mahajan            }
337afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
338195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
339afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mName.setSummary(checkNull(mName.getText()));
340afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mApn.setSummary(checkNull(mApn.getText()));
341afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mProxy.setSummary(checkNull(mProxy.getText()));
342afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPort.setSummary(checkNull(mPort.getText()));
343afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mUser.setSummary(checkNull(mUser.getText()));
344afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mServer.setSummary(checkNull(mServer.getText()));
345afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPassword.setSummary(starify(mPassword.getText()));
346afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsProxy.setSummary(checkNull(mMmsProxy.getText()));
347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsPort.setSummary(checkNull(mMmsPort.getText()));
348afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMmsc.setSummary(checkNull(mMmsc.getText()));
349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMcc.setSummary(checkNull(mMcc.getText()));
350afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mMnc.setSummary(checkNull(mMnc.getText()));
351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mApnType.setSummary(checkNull(mApnType.getText()));
352195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
353195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        String authVal = mAuthType.getValue();
354195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        if (authVal != null) {
355195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            int authValIndex = Integer.parseInt(authVal);
356195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            mAuthType.setValueIndex(authValIndex);
357195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
358195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            String []values = mRes.getStringArray(R.array.apn_auth_entries);
359195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            mAuthType.setSummary(values[authValIndex]);
360195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        } else {
361195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            mAuthType.setSummary(sNotSet);
362195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        }
363a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti
364a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        mProtocol.setSummary(
365d0de427f9ac976d09db6a645f83954899e0fef24John Huang                checkNull(protocolDescription(mProtocol.getValue(), mProtocol)));
366d0de427f9ac976d09db6a645f83954899e0fef24John Huang        mRoamingProtocol.setSummary(
367d0de427f9ac976d09db6a645f83954899e0fef24John Huang                checkNull(protocolDescription(mRoamingProtocol.getValue(), mRoamingProtocol)));
3687e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        mBearerMulti.setSummary(
3697e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                checkNull(bearerMultiDescription(mBearerMulti.getValues())));
370aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        mMvnoType.setSummary(
371aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi                checkNull(mvnoDescription(mMvnoType.getValue())));
372aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        mMvnoMatchData.setSummary(checkNull(mMvnoMatchData.getText()));
373f04d69a1d405f88b2bebacd63c77e91789e81616Jing Zhao        // allow user to edit carrier_enabled for some APN
374f04d69a1d405f88b2bebacd63c77e91789e81616Jing Zhao        boolean ceEditable = getResources().getBoolean(R.bool.config_allow_edit_carrier_enabled);
375f04d69a1d405f88b2bebacd63c77e91789e81616Jing Zhao        if (ceEditable) {
376f04d69a1d405f88b2bebacd63c77e91789e81616Jing Zhao            mCarrierEnabled.setEnabled(true);
377f04d69a1d405f88b2bebacd63c77e91789e81616Jing Zhao        } else {
378f04d69a1d405f88b2bebacd63c77e91789e81616Jing Zhao            mCarrierEnabled.setEnabled(false);
379f04d69a1d405f88b2bebacd63c77e91789e81616Jing Zhao        }
380a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti    }
381a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti
382a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti    /**
383a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti     * Returns the UI choice (e.g., "IPv4/IPv6") corresponding to the given
384a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti     * raw value of the protocol preference (e.g., "IPV4V6"). If unknown,
385a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti     * return null.
386a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti     */
387d0de427f9ac976d09db6a645f83954899e0fef24John Huang    private String protocolDescription(String raw, ListPreference protocol) {
388d0de427f9ac976d09db6a645f83954899e0fef24John Huang        int protocolIndex = protocol.findIndexOfValue(raw);
389a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        if (protocolIndex == -1) {
390a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            return null;
391a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        } else {
392a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            String[] values = mRes.getStringArray(R.array.apn_protocol_entries);
393a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            try {
394a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti                return values[protocolIndex];
395a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            } catch (ArrayIndexOutOfBoundsException e) {
396a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti                return null;
397a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            }
398a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        }
399195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    }
400195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
401cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    private String bearerDescription(String raw) {
4027e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        int mBearerIndex = mBearerMulti.findIndexOfValue(raw);
403cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        if (mBearerIndex == -1) {
404cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            return null;
405cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        } else {
406cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            String[] values = mRes.getStringArray(R.array.bearer_entries);
407cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            try {
408cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang                return values[mBearerIndex];
409cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            } catch (ArrayIndexOutOfBoundsException e) {
410cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang                return null;
411cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            }
412cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        }
413cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang    }
414cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang
4157e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan    private String bearerMultiDescription(Set<String> raw) {
4167e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        String[] values = mRes.getStringArray(R.array.bearer_entries);
4177e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        StringBuilder retVal = new StringBuilder();
4187e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        boolean first = true;
4197e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        for (String bearer : raw) {
4207e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            int bearerIndex = mBearerMulti.findIndexOfValue(bearer);
4217e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            try {
4227e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                if (first) {
4237e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                    retVal.append(values[bearerIndex]);
4247e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                    first = false;
4257e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                } else {
4267e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                    retVal.append(", " + values[bearerIndex]);
4277e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                }
4287e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            } catch (ArrayIndexOutOfBoundsException e) {
4297e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                // ignore
4307e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            }
4317e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        }
4327e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        String val = retVal.toString();
4337e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        if (!TextUtils.isEmpty(val)) {
4347e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            return val;
4357e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        }
4367e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        return null;
4377e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan    }
4387e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan
439cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi    private String mvnoDescription(String newValue) {
440cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi        int mvnoIndex = mMvnoType.findIndexOfValue(newValue);
441cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi        String oldValue = mMvnoType.getValue();
442cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi
443aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        if (mvnoIndex == -1) {
444aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            return null;
445aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        } else {
446aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            String[] values = mRes.getStringArray(R.array.mvno_type_entries);
447aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            if (values[mvnoIndex].equals("None")) {
448aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi                mMvnoMatchData.setEnabled(false);
449aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            } else {
450aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi                mMvnoMatchData.setEnabled(true);
451aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            }
452cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi            if (newValue != null && newValue.equals(oldValue) == false) {
453cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi                if (values[mvnoIndex].equals("SPN")) {
454cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi                    mMvnoMatchData.setText(mTelephonyManager.getSimOperatorName());
455cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi                } else if (values[mvnoIndex].equals("IMSI")) {
45609c9e5eb5d8d223b3b3faa29ce8b03f8873d0553Mick Lin                    String numeric = mTelephonyManager.getSimOperator(mSubId);
457cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi                    mMvnoMatchData.setText(numeric + "x");
458cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi                } else if (values[mvnoIndex].equals("GID")) {
459cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi                    mMvnoMatchData.setText(mTelephonyManager.getGroupIdLevel1());
460cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi                }
461cd1cb16bad2686990014430197cf7cdd56190c86Sungmin Choi            }
462aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi
463aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            try {
464aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi                return values[mvnoIndex];
465aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            } catch (ArrayIndexOutOfBoundsException e) {
466aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi                return null;
467aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            }
468aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        }
469aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi    }
470aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi
471195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh    public boolean onPreferenceChange(Preference preference, Object newValue) {
472195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        String key = preference.getKey();
473195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        if (KEY_AUTH_TYPE.equals(key)) {
474195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            try {
475195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                int index = Integer.parseInt((String) newValue);
476195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                mAuthType.setValueIndex(index);
477195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
478195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                String []values = mRes.getStringArray(R.array.apn_auth_entries);
479195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                mAuthType.setSummary(values[index]);
480195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            } catch (NumberFormatException e) {
481195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh                return false;
482195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            }
483d0de427f9ac976d09db6a645f83954899e0fef24John Huang        } else if (KEY_PROTOCOL.equals(key)) {
484d0de427f9ac976d09db6a645f83954899e0fef24John Huang            String protocol = protocolDescription((String) newValue, mProtocol);
485a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            if (protocol == null) {
486a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti                return false;
487a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            }
488a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            mProtocol.setSummary(protocol);
489a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti            mProtocol.setValue((String) newValue);
490d0de427f9ac976d09db6a645f83954899e0fef24John Huang        } else if (KEY_ROAMING_PROTOCOL.equals(key)) {
491d0de427f9ac976d09db6a645f83954899e0fef24John Huang            String protocol = protocolDescription((String) newValue, mRoamingProtocol);
492d0de427f9ac976d09db6a645f83954899e0fef24John Huang            if (protocol == null) {
493d0de427f9ac976d09db6a645f83954899e0fef24John Huang                return false;
494d0de427f9ac976d09db6a645f83954899e0fef24John Huang            }
495d0de427f9ac976d09db6a645f83954899e0fef24John Huang            mRoamingProtocol.setSummary(protocol);
496d0de427f9ac976d09db6a645f83954899e0fef24John Huang            mRoamingProtocol.setValue((String) newValue);
4977e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        } else if (KEY_BEARER_MULTI.equals(key)) {
4987e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            String bearer = bearerMultiDescription((Set<String>) newValue);
499cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            if (bearer == null) {
500cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang                return false;
501cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang            }
5027e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            mBearerMulti.setValues((Set<String>) newValue);
5037e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            mBearerMulti.setSummary(bearer);
504aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        } else if (KEY_MVNO_TYPE.equals(key)) {
505aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            String mvno = mvnoDescription((String) newValue);
506aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            if (mvno == null) {
507aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi                return false;
508aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            }
509aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            mMvnoType.setValue((String) newValue);
510aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi            mMvnoType.setSummary(mvno);
511cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        }
512cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang
513195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        return true;
514afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
515afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
516afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
517710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio    public boolean onCreateOptionsMenu(Menu menu) {
518710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        super.onCreateOptionsMenu(menu);
519afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // If it's a new APN, then cancel will delete the new entry in onPause
520afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (!mNewApn) {
521afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            menu.add(0, MENU_DELETE, 0, R.string.menu_delete)
522247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani                .setIcon(R.drawable.ic_menu_delete);
523afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
524afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(0, MENU_SAVE, 0, R.string.menu_save)
525afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            .setIcon(android.R.drawable.ic_menu_save);
526afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        menu.add(0, MENU_CANCEL, 0, R.string.menu_cancel)
527afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
528710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        return true;
529afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
530afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
531afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
532afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onOptionsItemSelected(MenuItem item) {
533afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (item.getItemId()) {
534afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        case MENU_DELETE:
535afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            deleteApn();
536afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
537afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        case MENU_SAVE:
538afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (validateAndSave(false)) {
539afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                finish();
540afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
541afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
542afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        case MENU_CANCEL:
543afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (mNewApn) {
544afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                getContentResolver().delete(mUri, null, null);
545afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
546afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            finish();
547afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
548afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
549afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return super.onOptionsItemSelected(item);
550afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
551195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
552afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
553710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio    public boolean onKeyDown(int keyCode, KeyEvent event) {
554710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        switch (keyCode) {
555710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio            case KeyEvent.KEYCODE_BACK: {
556710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio                if (validateAndSave(false)) {
557710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio                    finish();
558710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio                }
559710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio                return true;
560710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio            }
561710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        }
562710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        return super.onKeyDown(keyCode, event);
563710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio    }
564710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio
565710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio    @Override
566710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio    protected void onSaveInstanceState(Bundle icicle) {
567afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onSaveInstanceState(icicle);
5684d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        if (validateAndSave(true)) {
5694d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani            icicle.putInt(SAVED_POS, mCursor.getInt(ID_INDEX));
5704d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        }
571afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
572195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
573afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /**
574afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * Check the key fields' validity and save if valid.
575afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * @param force save even if the fields are not valid, if the app is
576afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     *        being suspended
577afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     * @return true if the data was saved
578afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project     */
579afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean validateAndSave(boolean force) {
580afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String name = checkNotSet(mName.getText());
581afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String apn = checkNotSet(mApn.getText());
582afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String mcc = checkNotSet(mMcc.getText());
583afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String mnc = checkNotSet(mMnc.getText());
584195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
58520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        if (getErrorMsg() != null && !force) {
58620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            showDialog(ERROR_DIALOG_ID);
587afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
588afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
589195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
590afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (!mCursor.moveToFirst()) {
591afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Log.w(TAG,
592afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    "Could not go to the first row in the Cursor when saving data.");
593afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
594afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
595195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
5964d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        // If it's a new APN and a name or apn haven't been entered, then erase the entry
5974d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        if (force && mNewApn && name.length() < 1 && apn.length() < 1) {
5984d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani            getContentResolver().delete(mUri, null, null);
5994d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani            return false;
6004d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        }
6014d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani
602afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        ContentValues values = new ContentValues();
603195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
6047e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        // Add a dummy name "Untitled", if the user exits the screen without adding a name but
6054d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        // entered other information worth keeping.
6064d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani        values.put(Telephony.Carriers.NAME,
6074d31288fe30b2e8f2e0a5ff54b402912fd830df1Amith Yamasani                name.length() < 1 ? getResources().getString(R.string.untitled_apn) : name);
608afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.APN, apn);
609afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.PROXY, checkNotSet(mProxy.getText()));
610afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.PORT, checkNotSet(mPort.getText()));
611afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.MMSPROXY, checkNotSet(mMmsProxy.getText()));
612afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.MMSPORT, checkNotSet(mMmsPort.getText()));
613afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.USER, checkNotSet(mUser.getText()));
614afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.SERVER, checkNotSet(mServer.getText()));
615afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.PASSWORD, checkNotSet(mPassword.getText()));
616195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        values.put(Telephony.Carriers.MMSC, checkNotSet(mMmsc.getText()));
617195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
618195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        String authVal = mAuthType.getValue();
619195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        if (authVal != null) {
620195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh            values.put(Telephony.Carriers.AUTH_TYPE, Integer.parseInt(authVal));
621195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh        }
622195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
623a7e587fc8d0bcf67fd387c5f9b58b1063c217ae5Lorenzo Colitti        values.put(Telephony.Carriers.PROTOCOL, checkNotSet(mProtocol.getValue()));
624d0de427f9ac976d09db6a645f83954899e0fef24John Huang        values.put(Telephony.Carriers.ROAMING_PROTOCOL, checkNotSet(mRoamingProtocol.getValue()));
625a52c5698ca9da9f681232ac92cc02de1138956a5Lorenzo Colitti
626afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.TYPE, checkNotSet(mApnType.getText()));
627afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
628afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.MCC, mcc);
629afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.MNC, mnc);
630195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
631afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        values.put(Telephony.Carriers.NUMERIC, mcc + mnc);
632195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
633afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (mCurMnc != null && mCurMcc != null) {
634afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (mCurMnc.equals(mnc) && mCurMcc.equals(mcc)) {
635afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                values.put(Telephony.Carriers.CURRENT, 1);
636afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
637afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
638195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
6397e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        Set<String> bearerSet = mBearerMulti.getValues();
6407e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        int bearerBitmask = 0;
6417e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        for (String bearer : bearerSet) {
6427e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            if (Integer.parseInt(bearer) == 0) {
6437e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                bearerBitmask = 0;
6447e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                break;
6457e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            } else {
6467e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan                bearerBitmask |= ServiceState.getBitmaskForTech(Integer.parseInt(bearer));
6477e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            }
6487e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        }
6497e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        values.put(Telephony.Carriers.BEARER_BITMASK, bearerBitmask);
6507e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan
6517e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        int bearerVal;
6527e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        if (bearerBitmask == 0 || mBearerInitialVal == 0) {
6537e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            bearerVal = 0;
6547e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        } else if (ServiceState.bitmaskHasTech(bearerBitmask, mBearerInitialVal)) {
6557e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            bearerVal = mBearerInitialVal;
6567e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        } else {
6577e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            // bearer field was being used but bitmask has changed now and does not include the
6587e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            // initial bearer value -- setting bearer to 0 but maybe better behavior is to choose a
6597e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            // random tech from the new bitmask??
6607e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan            bearerVal = 0;
661cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang        }
6627e28221640a931f9e49659679f354b23f5a727e2Amit Mahajan        values.put(Telephony.Carriers.BEARER, bearerVal);
663cd8b7c3d0bea0cfb5e5c55493a3b06f62f22700asinikang
664aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        values.put(Telephony.Carriers.MVNO_TYPE, checkNotSet(mMvnoType.getValue()));
665aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi        values.put(Telephony.Carriers.MVNO_MATCH_DATA, checkNotSet(mMvnoMatchData.getText()));
666aa4d4c653b914d47e231ddf45b241bd12e59f1deSungmin Choi
667f04d69a1d405f88b2bebacd63c77e91789e81616Jing Zhao        values.put(Telephony.Carriers.CARRIER_ENABLED, mCarrierEnabled.isChecked() ? 1 : 0);
668afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        getContentResolver().update(mUri, values, null, null);
669195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
670afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return true;
671afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
672afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
67320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    private String getErrorMsg() {
67420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        String errorMsg = null;
67520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
67620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        String name = checkNotSet(mName.getText());
67720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        String apn = checkNotSet(mApn.getText());
67820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        String mcc = checkNotSet(mMcc.getText());
67920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        String mnc = checkNotSet(mMnc.getText());
68020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
68120108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        if (name.length() < 1) {
68220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            errorMsg = mRes.getString(R.string.error_name_empty);
68320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        } else if (apn.length() < 1) {
68420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            errorMsg = mRes.getString(R.string.error_apn_empty);
68520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        } else if (mcc.length() != 3) {
68620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            errorMsg = mRes.getString(R.string.error_mcc_not3);
68720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        } else if ((mnc.length() & 0xFFFE) != 2) {
68820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            errorMsg = mRes.getString(R.string.error_mnc_not23);
68920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        }
69020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
69120108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        return errorMsg;
69220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    }
69320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
69420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    @Override
695710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio    protected Dialog onCreateDialog(int id) {
69620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
69720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        if (id == ERROR_DIALOG_ID) {
69820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai            String msg = getErrorMsg();
69920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
700710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio            return new AlertDialog.Builder(this)
70120108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .setTitle(R.string.error_title)
70220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .setPositiveButton(android.R.string.ok, null)
70320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .setMessage(msg)
70420108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai                    .create();
70520108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        }
70620108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
70720108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai        return super.onCreateDialog(id);
70820108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai    }
70920108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai
710710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio    @Override
711710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio    protected void onPrepareDialog(int id, Dialog dialog) {
712710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        super.onPrepareDialog(id, dialog);
713710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio
714710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        if (id == ERROR_DIALOG_ID) {
715710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio            String msg = getErrorMsg();
716710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio
717710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio            if (msg != null) {
718710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio                ((AlertDialog)dialog).setMessage(msg);
719710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio            }
720710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio        }
721710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio    }
722710e309951af5e36e821802099fb88efb9de8486Fabrice Di Meglio
723afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void deleteApn() {
724afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        getContentResolver().delete(mUri, null, null);
725afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        finish();
726afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
727195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
728afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String starify(String value) {
729afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (value == null || value.length() == 0) {
730afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return sNotSet;
731afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
732afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            char[] password = new char[value.length()];
733afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            for (int i = 0; i < password.length; i++) {
734afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                password[i] = '*';
735afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
736afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return new String(password);
737afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
738afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
739195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
740afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String checkNull(String value) {
741afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (value == null || value.length() == 0) {
742afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return sNotSet;
743afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
744afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return value;
745afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
746afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
747195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
748afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String checkNotSet(String value) {
749afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (value == null || value.equals(sNotSet)) {
750afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return "";
751afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
752afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return value;
753afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
754afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
755195bc43460967e57e4c1131ba156083a93e0e4e8Jaikumar Ganesh
756afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
757afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Preference pref = findPreference(key);
758afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (pref != null) {
759414ab76fe3cebce39dd49317b4e368a16cca0847Jiehua Dai            if (pref.equals(mPassword)){
760414ab76fe3cebce39dd49317b4e368a16cca0847Jiehua Dai                pref.setSummary(starify(sharedPreferences.getString(key, "")));
761fab7c109b7458ffe87cd58f42b2ff5996be74654Sungmin Choi            } else if (pref.equals(mCarrierEnabled) || pref.equals(mBearerMulti)) {
762f04d69a1d405f88b2bebacd63c77e91789e81616Jing Zhao                // do nothing
763414ab76fe3cebce39dd49317b4e368a16cca0847Jiehua Dai            } else {
764414ab76fe3cebce39dd49317b4e368a16cca0847Jiehua Dai                pref.setSummary(checkNull(sharedPreferences.getString(key, "")));
765414ab76fe3cebce39dd49317b4e368a16cca0847Jiehua Dai            }
766afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
767afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
768afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
769