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