17d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/* 27d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Copyright (C) 2006 The Android Open Source Project 37d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 47d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Licensed under the Apache License, Version 2.0 (the "License"); 57d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * you may not use this file except in compliance with the License. 67d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * You may obtain a copy of the License at 77d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 87d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * http://www.apache.org/licenses/LICENSE-2.0 97d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Unless required by applicable law or agreed to in writing, software 117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * distributed under the License is distributed on an "AS IS" BASIS, 127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * See the License for the specific language governing permissions and 147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * limitations under the License. 157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1783383e4c2f748514124eaa0482091490c4c8a311Andrew Leepackage com.android.phone.settings.fdn; 187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport static android.view.Window.PROGRESS_VISIBILITY_OFF; 207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport static android.view.Window.PROGRESS_VISIBILITY_ON; 217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.app.Activity; 237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.AsyncQueryHandler; 247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.ContentResolver; 257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.ContentValues; 267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.Intent; 277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.res.Resources; 287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.database.Cursor; 297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.net.Uri; 307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Bundle; 317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Handler; 327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.provider.Contacts.PeopleColumns; 337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.provider.Contacts.PhonesColumns; 34b99bb8853ea59b509aa5b24c81241eb7797b9767Brian Attwellimport android.provider.ContactsContract.CommonDataKinds; 357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.telephony.PhoneNumberUtils; 367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.text.Selection; 377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.text.Spannable; 387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.text.TextUtils; 397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.text.method.DialerKeyListener; 407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.util.Log; 417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.view.Menu; 427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.view.MenuItem; 437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.view.View; 447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.view.Window; 457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.Button; 467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.EditText; 477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.LinearLayout; 487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.TextView; 497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.Toast; 507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 5183383e4c2f748514124eaa0482091490c4c8a311Andrew Leeimport com.android.phone.PhoneGlobals; 5283383e4c2f748514124eaa0482091490c4c8a311Andrew Leeimport com.android.phone.R; 535ed870cca68496757c2335d37d3818e9aa0006b6Andrew Leeimport com.android.phone.SubscriptionInfoHelper; 549de0f754068c82ed1d1019afb414bc1fcd9298cfWink Savilleimport com.android.internal.telephony.PhoneFactory; 559de0f754068c82ed1d1019afb414bc1fcd9298cfWink Saville 567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/** 577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Activity to let the user add or edit an FDN contact. 587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpublic class EditFdnContactScreen extends Activity { 607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String LOG_TAG = PhoneGlobals.LOG_TAG; 617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final boolean DBG = false; 627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // Menu item codes 647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final int MENU_IMPORT = 1; 657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final int MENU_DELETE = 2; 667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String INTENT_EXTRA_NAME = "name"; 687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String INTENT_EXTRA_NUMBER = "number"; 697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final int PIN2_REQUEST_CODE = 100; 717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 725ed870cca68496757c2335d37d3818e9aa0006b6Andrew Lee private SubscriptionInfoHelper mSubscriptionInfoHelper; 735ed870cca68496757c2335d37d3818e9aa0006b6Andrew Lee 747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private String mName; 757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private String mNumber; 767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private String mPin2; 777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private boolean mAddContact; 787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private QueryHandler mQueryHandler; 797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private EditText mNameField; 817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private EditText mNumberField; 827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private LinearLayout mPinFieldContainer; 837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private Button mButton; 847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private Handler mHandler = new Handler(); 867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Constants used in importing from contacts 897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** request code when invoking subactivity */ 917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final int CONTACTS_PICKER_CODE = 200; 927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** projection for phone number query */ 93b7c07b909eea45476252884c5b6016821f36c7bbTyler Gunn private static final String[] NUM_PROJECTION = new String[] {CommonDataKinds.Phone.DISPLAY_NAME, 94b7c07b909eea45476252884c5b6016821f36c7bbTyler Gunn CommonDataKinds.Phone.NUMBER}; 957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** static intent to invoke phone number picker */ 967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final Intent CONTACT_IMPORT_INTENT; 977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon static { 987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon CONTACT_IMPORT_INTENT = new Intent(Intent.ACTION_GET_CONTENT); 99b99bb8853ea59b509aa5b24c81241eb7797b9767Brian Attwell CONTACT_IMPORT_INTENT.setType(CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 1007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** flag to track saving state */ 1027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private boolean mDataBusy; 1037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onCreate(Bundle icicle) { 1067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onCreate(icicle); 1077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon resolveIntent(); 1097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 1117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setContentView(R.layout.edit_fdn_contact_screen); 1127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setupView(); 1135ed870cca68496757c2335d37d3818e9aa0006b6Andrew Lee setTitle(mAddContact ? R.string.add_fdn_contact : R.string.edit_fdn_contact); 1147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon displayProgress(false); 1167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 1197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * We now want to bring up the pin request screen AFTER the 1207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * contact information is displayed, to help with user 1217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * experience. 1227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 1237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Also, process the results from the contact picker. 1247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 1257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 1277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("onActivityResult request:" + requestCode + " result:" + resultCode); 1287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon switch (requestCode) { 1307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case PIN2_REQUEST_CODE: 1317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Bundle extras = (intent != null) ? intent.getExtras() : null; 1327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (extras != null) { 1337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPin2 = extras.getString("pin2"); 1347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mAddContact) { 1357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon addContact(); 1367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon updateContact(); 1387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else if (resultCode != RESULT_OK) { 1407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // if they cancelled, then we just cancel too. 1417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("onActivityResult: cancelled."); 1427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon finish(); 1437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 1457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // look for the data associated with this number, and update 1477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // the display with it. 1487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case CONTACTS_PICKER_CODE: 1497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (resultCode != RESULT_OK) { 1507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("onActivityResult: cancelled."); 1517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 1527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Cursor cursor = null; 1547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon try { 1557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon cursor = getContentResolver().query(intent.getData(), 1567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon NUM_PROJECTION, null, null, null); 1577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if ((cursor == null) || (!cursor.moveToFirst())) { 1587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Log.w(LOG_TAG,"onActivityResult: bad contact data, no results found."); 1597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 1607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNameField.setText(cursor.getString(0)); 1627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNumberField.setText(cursor.getString(1)); 1637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } finally { 1647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (cursor != null) { 1657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon cursor.close(); 1667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 1697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 1737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Overridden to display the import and delete commands. 1747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 1757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public boolean onCreateOptionsMenu(Menu menu) { 1777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onCreateOptionsMenu(menu); 1787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Resources r = getResources(); 1807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // Added the icons to the context menu 1827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon menu.add(0, MENU_IMPORT, 0, r.getString(R.string.importToFDNfromContacts)) 1837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .setIcon(R.drawable.ic_menu_contact); 1847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon menu.add(0, MENU_DELETE, 0, r.getString(R.string.menu_delete)) 1857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .setIcon(android.R.drawable.ic_menu_delete); 1867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return true; 1877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 1907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Allow the menu to be opened ONLY if we're not busy. 1917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 1927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public boolean onPrepareOptionsMenu(Menu menu) { 1947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon boolean result = super.onPrepareOptionsMenu(menu); 1957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return mDataBusy ? false : result; 1967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 1997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Overridden to allow for handling of delete and import. 2007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 2017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 2027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public boolean onOptionsItemSelected(MenuItem item) { 2037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon switch (item.getItemId()) { 2047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case MENU_IMPORT: 2057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon startActivityForResult(CONTACT_IMPORT_INTENT, CONTACTS_PICKER_CODE); 2067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return true; 2077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case MENU_DELETE: 2097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon deleteSelected(); 2107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return true; 211ddf48251ce7cdec57a2bee781e664ef8fcbd26b1Andrew Lee 212ddf48251ce7cdec57a2bee781e664ef8fcbd26b1Andrew Lee case android.R.id.home: 213ddf48251ce7cdec57a2bee781e664ef8fcbd26b1Andrew Lee onBackPressed(); 214ddf48251ce7cdec57a2bee781e664ef8fcbd26b1Andrew Lee return true; 2157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return super.onOptionsItemSelected(item); 2187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void resolveIntent() { 2217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Intent intent = getIntent(); 2227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 223dd4f6df7bf726284b0747405307de54e0c0acabbAndrew Lee mSubscriptionInfoHelper = new SubscriptionInfoHelper(this, intent); 2245ed870cca68496757c2335d37d3818e9aa0006b6Andrew Lee 2257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mName = intent.getStringExtra(INTENT_EXTRA_NAME); 2267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNumber = intent.getStringExtra(INTENT_EXTRA_NUMBER); 2277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mAddContact = TextUtils.isEmpty(mNumber); 2297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 2327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * We have multiple layouts, one to indicate that the user needs to 2337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * open the keyboard to enter information (if the keybord is hidden). 2347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * So, we need to make sure that the layout here matches that in the 2357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * layout file. 2367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 2377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void setupView() { 2387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNameField = (EditText) findViewById(R.id.fdn_name); 2397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mNameField != null) { 2407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNameField.setOnFocusChangeListener(mOnFocusChangeHandler); 2417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNameField.setOnClickListener(mClicked); 2427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNumberField = (EditText) findViewById(R.id.fdn_number); 2457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mNumberField != null) { 2460aa87ee020e6c8d60ef96251ce8d73913f787cfeKazuya Ohshiro mNumberField.setTextDirection(View.TEXT_DIRECTION_LTR); 2477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNumberField.setKeyListener(DialerKeyListener.getInstance()); 2487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNumberField.setOnFocusChangeListener(mOnFocusChangeHandler); 2497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNumberField.setOnClickListener(mClicked); 2507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (!mAddContact) { 2537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mNameField != null) { 2547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNameField.setText(mName); 2557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mNumberField != null) { 2577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNumberField.setText(mNumber); 2587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButton = (Button) findViewById(R.id.button); 2627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mButton != null) { 2637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButton.setOnClickListener(mClicked); 2647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPinFieldContainer = (LinearLayout) findViewById(R.id.pinc); 2677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private String getNameFromTextField() { 2717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return mNameField.getText().toString(); 2727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private String getNumberFromTextField() { 2757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return mNumberField.getText().toString(); 2767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 2797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @param number is voice mail number 2807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @return true if number length is less than 20-digit limit 2817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 2827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * TODO: Fix this logic. 2837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 2847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private boolean isValidNumber(String number) { 28544e1c6594bee5ba2b87d76b742f0c9edf574fcc1Srikanth Chintala return (number.length() <= 20) && (number.length() > 0); 2867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void addContact() { 2907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("addContact"); 2917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final String number = PhoneNumberUtils.convertAndStrip(getNumberFromTextField()); 2937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (!isValidNumber(number)) { 2957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon handleResult(false, true); 2967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 2977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2995ed870cca68496757c2335d37d3818e9aa0006b6Andrew Lee Uri uri = FdnList.getContentUri(mSubscriptionInfoHelper); 3007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon ContentValues bundle = new ContentValues(3); 3027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.put("tag", getNameFromTextField()); 3037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.put("number", number); 3047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.put("pin2", mPin2); 3057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mQueryHandler = new QueryHandler(getContentResolver()); 3077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mQueryHandler.startInsert(0, null, uri, bundle); 3087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon displayProgress(true); 3097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showStatus(getResources().getText(R.string.adding_fdn_contact)); 3107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void updateContact() { 3137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("updateContact"); 3147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final String name = getNameFromTextField(); 3167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final String number = PhoneNumberUtils.convertAndStrip(getNumberFromTextField()); 3177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (!isValidNumber(number)) { 3197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon handleResult(false, true); 3207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 3217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3225ed870cca68496757c2335d37d3818e9aa0006b6Andrew Lee Uri uri = FdnList.getContentUri(mSubscriptionInfoHelper); 3237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon ContentValues bundle = new ContentValues(); 3257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.put("tag", mName); 3267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.put("number", mNumber); 3277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.put("newTag", name); 3287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.put("newNumber", number); 3297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.put("pin2", mPin2); 3307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mQueryHandler = new QueryHandler(getContentResolver()); 3327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mQueryHandler.startUpdate(0, null, uri, bundle, null, null); 3337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon displayProgress(true); 3347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showStatus(getResources().getText(R.string.updating_fdn_contact)); 3357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 3387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Handle the delete command, based upon the state of the Activity. 3397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 3407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void deleteSelected() { 3417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // delete ONLY if this is NOT a new contact. 3427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (!mAddContact) { 343dd4f6df7bf726284b0747405307de54e0c0acabbAndrew Lee Intent intent = mSubscriptionInfoHelper.getIntent(DeleteFdnContactScreen.class); 3447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon intent.putExtra(INTENT_EXTRA_NAME, mName); 3457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon intent.putExtra(INTENT_EXTRA_NUMBER, mNumber); 3467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon startActivity(intent); 3477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon finish(); 3497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void authenticatePin2() { 3527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Intent intent = new Intent(); 3537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon intent.setClass(this, GetPin2Screen.class); 3545ed870cca68496757c2335d37d3818e9aa0006b6Andrew Lee intent.setData(FdnList.getContentUri(mSubscriptionInfoHelper)); 3557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon startActivityForResult(intent, PIN2_REQUEST_CODE); 3567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void displayProgress(boolean flag) { 3597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // indicate we are busy. 3607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mDataBusy = flag; 3617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon getWindow().setFeatureInt( 3627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Window.FEATURE_INDETERMINATE_PROGRESS, 3637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mDataBusy ? PROGRESS_VISIBILITY_ON : PROGRESS_VISIBILITY_OFF); 3647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // make sure we don't allow calls to save when we're 3657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // not ready for them. 3667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButton.setClickable(!mDataBusy); 3677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /** 3707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Removed the status field, with preference to displaying a toast 3717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * to match the rest of settings UI. 3727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 3737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void showStatus(CharSequence statusMsg) { 3747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (statusMsg != null) { 3757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Toast.makeText(this, statusMsg, Toast.LENGTH_LONG) 3767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .show(); 3777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void handleResult(boolean success, boolean invalidNumber) { 3817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (success) { 3827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("handleResult: success!"); 3837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showStatus(getResources().getText(mAddContact ? 3847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.fdn_contact_added : R.string.fdn_contact_updated)); 3857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 3867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("handleResult: failed!"); 3877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (invalidNumber) { 3887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showStatus(getResources().getText(R.string.fdn_invalid_number)); 3897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 3909de0f754068c82ed1d1019afb414bc1fcd9298cfWink Saville if (PhoneFactory.getDefaultPhone().getIccCard().getIccPin2Blocked()) { 3919de0f754068c82ed1d1019afb414bc1fcd9298cfWink Saville showStatus(getResources().getText(R.string.fdn_enable_puk2_requested)); 3929de0f754068c82ed1d1019afb414bc1fcd9298cfWink Saville } else if (PhoneFactory.getDefaultPhone().getIccCard().getIccPuk2Blocked()) { 3939de0f754068c82ed1d1019afb414bc1fcd9298cfWink Saville showStatus(getResources().getText(R.string.puk2_blocked)); 3949de0f754068c82ed1d1019afb414bc1fcd9298cfWink Saville } else { 3959de0f754068c82ed1d1019afb414bc1fcd9298cfWink Saville // There's no way to know whether the failure is due to incorrect PIN2 or 3969de0f754068c82ed1d1019afb414bc1fcd9298cfWink Saville // an inappropriate phone number. 3979de0f754068c82ed1d1019afb414bc1fcd9298cfWink Saville showStatus(getResources().getText(R.string.pin2_or_fdn_invalid)); 3989de0f754068c82ed1d1019afb414bc1fcd9298cfWink Saville } 3997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mHandler.postDelayed(new Runnable() { 4037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void run() { 4057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon finish(); 4067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }, 2000); 4087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private final View.OnClickListener mClicked = new View.OnClickListener() { 4127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onClick(View v) { 4147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mPinFieldContainer.getVisibility() != View.VISIBLE) { 4157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 4167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (v == mNameField) { 4197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mNumberField.requestFocus(); 4207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else if (v == mNumberField) { 4217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButton.requestFocus(); 4227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else if (v == mButton) { 42344e1c6594bee5ba2b87d76b742f0c9edf574fcc1Srikanth Chintala final String number = PhoneNumberUtils.convertAndStrip(getNumberFromTextField()); 42444e1c6594bee5ba2b87d76b742f0c9edf574fcc1Srikanth Chintala 42544e1c6594bee5ba2b87d76b742f0c9edf574fcc1Srikanth Chintala if (!isValidNumber(number)) { 42644e1c6594bee5ba2b87d76b742f0c9edf574fcc1Srikanth Chintala handleResult(false, true); 42744e1c6594bee5ba2b87d76b742f0c9edf574fcc1Srikanth Chintala return; 42844e1c6594bee5ba2b87d76b742f0c9edf574fcc1Srikanth Chintala } 4297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // Authenticate the pin AFTER the contact information 4307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // is entered, and if we're not busy. 4317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (!mDataBusy) { 4327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon authenticatePin2(); 4337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }; 4377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private final View.OnFocusChangeListener mOnFocusChangeHandler = 4397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon new View.OnFocusChangeListener() { 4407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onFocusChange(View v, boolean hasFocus) { 4427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (hasFocus) { 4437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon TextView textView = (TextView) v; 4447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Selection.selectAll((Spannable) textView.getText()); 4457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }; 4487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private class QueryHandler extends AsyncQueryHandler { 4507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public QueryHandler(ContentResolver cr) { 4517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super(cr); 4527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onQueryComplete(int token, Object cookie, Cursor c) { 4567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onInsertComplete(int token, Object cookie, Uri uri) { 4607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("onInsertComplete"); 4617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon displayProgress(false); 4627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon handleResult(uri != null, false); 4637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onUpdateComplete(int token, Object cookie, int result) { 4677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("onUpdateComplete"); 4687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon displayProgress(false); 4697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon handleResult(result > 0, false); 4707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onDeleteComplete(int token, Object cookie, int result) { 4747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void log(String msg) { 4787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Log.d(LOG_TAG, "[EditFdnContact] " + msg); 4797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon} 481