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