package org.orange.familylink; import org.orange.familylink.database.Contract; import org.orange.familylink.database.Contract.Contacts; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.EditText; /**设置联默认系人 * @author Team Orange */ public class ContactDetailActivity extends BaseActivity { private static String[] projection = { Contract.Contacts._ID, Contract.Contacts.COLUMN_NAME_NAME, Contract.Contacts.COLUMN_NAME_PHONE_NUMBER}; private Animation mAnimationShake; private EditText mEditTextPhone = null; private EditText mEditTextName = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAnimationShake = AnimationUtils.loadAnimation(this, R.anim.shake); setContentView(R.layout.activity_contact_detial); mEditTextPhone = (EditText) findViewById(R.id.phone_input); mEditTextName = (EditText) findViewById(R.id.name_input); Contact contact = getDefaultContact(this); mEditTextName.setText(contact.name); mEditTextPhone.setText(contact.phone); } @Override protected void onStop() { super.onStop(); final String name = mEditTextName.getText().toString(); final String phone = mEditTextPhone.getText().toString(); if(TextUtils.isEmpty(phone) || TextUtils.isEmpty(name)) { return; } new AsyncContactSaver(getContentResolver()).execute(name, phone); } @Override public void onBackPressed() { // 检查输入有效性 boolean inputValid = true; final String name = mEditTextName.getText().toString(); final String phone = mEditTextPhone.getText().toString(); if(TextUtils.isEmpty(phone)) { mEditTextPhone.requestFocus(); mEditTextPhone.startAnimation(mAnimationShake); inputValid = false; } if(TextUtils.isEmpty(name)) { mEditTextName.requestFocus(); mEditTextName.startAnimation(mAnimationShake); inputValid = false; } if(!inputValid) return; // 在onStop保存联系人信息 super.onBackPressed(); //因为目前没有使用Fragment,暂时没未考虑Fragment的问题 } /** * 取得默认联系人 */ public static Contact getDefaultContact(Context context) { Cursor cursor = context.getContentResolver().query(Contract.Contacts.CONTACTS_URI, projection, null, null, null); Long id = null; String phone = null; String name = null; if(cursor.moveToLast()) { // if the cursor isn't empty int idIndex = cursor.getColumnIndex(Contract.Contacts._ID); if(!cursor.isNull(idIndex)) id = cursor.getLong(idIndex); phone = cursor.getString( cursor.getColumnIndex(Contract.Contacts.COLUMN_NAME_PHONE_NUMBER)); name = cursor.getString( cursor.getColumnIndex(Contract.Contacts.COLUMN_NAME_NAME)); } cursor.close(); return new Contact(id, name, phone); } /** * 联系人存储类,请直接读取其字段。 * @author Team Orange */ public static class Contact { public final Long id; public final String name; public final String phone; public Contact(Long id, String name, String phone) { this.id = id; this.name = name; this.phone = phone; } } /** * {@link AsyncContactSaver#execute(String...)}的顺序为 * <code>execute(contactName, contactPhone)</code> * <p>如:<code>new AsyncContactSaver(getContentResolver()).execute(name, phone);</code></p> * @author Team Orange */ private static class AsyncContactSaver extends AsyncTask<String, Void, Void> { private ContentResolver mContentResolver; /** * @see AsyncContactSaver */ public AsyncContactSaver(ContentResolver contentResolver) { mContentResolver = contentResolver; } @Override protected Void doInBackground(String... params) { //TODO 同步,完善多个AsyncContactSaver同时运行时的情况 final String name = params[0], phone = params[1]; mContentResolver.delete(Contract.Contacts.CONTACTS_URI, null, null); ContentValues contact = new ContentValues(2); contact.put(Contacts.COLUMN_NAME_NAME, name); contact.put(Contacts.COLUMN_NAME_PHONE_NUMBER, phone); mContentResolver.insert(Contract.Contacts.CONTACTS_URI, contact); return null; } } }