/* $Id: $
*/
package com.oreilly.demo.android.pa.contactviewer;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v4.app.LoaderManager;
import android.view.View;
import android.widget.TextView;
/**
* ContactDetails
*/
public class ContactDetails {
/** Bundle tag for Id */
public static final String TAG_ID = "contactId";
/** Bundle tag for Contact */
public static final String TAG_CONTACT = "contact";
/** Loader Id for Email loader */
public static final int LOADER_EMAIL = 0;
/** Loader Id for Phone loader */
public static final int LOADER_PHONE = 1;
private final String contactId;
private final String contact;
private final Map<Integer, ContactDetailsLoader> loaders
= new HashMap<Integer, ContactDetailsLoader>();
private View view;
/**
* @param state null or parameters
*/
public ContactDetails(Bundle state) {
this((null == state) ? null : state.getString(TAG_ID),
(null == state) ? null : state.getString(TAG_CONTACT));
}
/**
* @param contactId the contact for details
* @param contact contact's display name
*/
public ContactDetails(String contactId, String contact) {
this.contactId = contactId;
this.contact = contact;
}
/** @param view the view */
public void setView(View view) { this.view = view; }
/** @param state saved state */
public void saveToBundle(Bundle state) {
state.putString(TAG_ID, contactId);
state.putString(TAG_CONTACT, contact);
}
/** Populate the contact name */
public void populateContact() {
if ((null == view) || (null == contact)) { return; }
((TextView) view.findViewById(R.id.contact_detail_name))
.setText(contact);
}
/**
* Populate text views from the cursor.
*
* @param cursor the cursor with the data
* @param from the data columns containing details
* @param to the view text edit field for displaying data
*/
public void populateFields(
Cursor cursor,
String[] from,
int[] to)
{
if (null == view) { return; }
for (int i = 0; i < from.length; i++ ) {
((TextView) view.findViewById(to[i])).setText(cursor
.getString(cursor.getColumnIndex(from[i])));
}
}
/** @param act the Activity context */
public void createLoaders(Activity act) {
if (null == contactId) { return; }
loaders.put(
Integer.valueOf(LOADER_PHONE),
new ContactDetailsLoader(
this,
act,
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
contactId,
new String[] {
ContactsContract.CommonDataKinds.Phone.NUMBER },
new int[] { R.id.contact_detail_phone }));
loaders.put(
Integer.valueOf(LOADER_EMAIL),
new ContactDetailsLoader(
this,
act,
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
ContactsContract.CommonDataKinds.Email.CONTACT_ID,
contactId,
new String[] {
ContactsContract.CommonDataKinds.Email.DATA },
new int[] { R.id.contact_detail_email }));
}
/**
* @param loadMgr the loadMgr with which to init the loaders
* @return unmodifiable map of tags to loaders
*/
public Map<Integer, ContactDetailsLoader> initLoaders(
LoaderManager loadMgr)
{
for (Map.Entry<Integer, ContactDetailsLoader> loader:
loaders.entrySet())
{
loadMgr.initLoader(
loader.getKey().intValue(),
null,
loader.getValue());
}
return Collections.unmodifiableMap(loaders);
}
}