package com.oreilly.demo.android.pa.clientserver.client.account; import java.util.ArrayList; import android.app.Activity; import android.content.ContentProviderOperation; import android.os.Bundle; import android.provider.ContactsContract; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.Toast; import com.oreilly.demo.android.pa.clientserver.client.R; public class AccountAddActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.accountadd); setUpView(); } private void setUpView() { findViewById(R.id.add).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { add(); } }); findViewById(R.id.cancel).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); } private void add() { EditText name = (EditText) findViewById(R.id.name); EditText phone = (EditText) findViewById(R.id.phone); if(name.getText() == null || name.getText().toString().trim().length() < 1) { Toast.makeText(this, "Contacts must have a name", Toast.LENGTH_SHORT); return; } String accountname = null; String accounttype = null; // we are not assigning to any particular account but if we wish to we would // get the accounts this way /* Account[] accounts = AccountManager.get(this).getAccounts(); accountname = accounts[0].name; accounttype = accounts[0].type; */ ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountname) .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accounttype) .build()); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name.getText().toString().trim()) .build()); // if there is a phone num we add it if(phone.getText() != null && phone.getText().toString().trim().length() > 0) { ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone.getText().toString().trim()) .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME) .build()); } try { getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "Something bad happened! "+e.getMessage(), Toast.LENGTH_SHORT); return; } finish(); } }