package com.smartisanos.sidebar;
import com.smartisanos.sidebar.util.BitmapUtils;
import com.smartisanos.sidebar.util.ContactManager;
import com.smartisanos.sidebar.util.MmsContact;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.TextUtils;
import android.util.Log;
public class SelectContactActivity extends Activity {
private static final String TAG = SelectContactActivity.class.getName();
private static final int REQUEST_Code = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate()...");
Intent intent = new Intent(Intent.ACTION_PICK);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setPackage("com.android.contacts");
intent.setType("vnd.android.cursor.dir/phone_v2");
try{
startActivityForResult(intent, REQUEST_Code);
}catch(ActivityNotFoundException e){
// TODO show dialog
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult()...");
if(requestCode == REQUEST_Code){
if(data != null && data.getData() != null){
Uri uri = data.getData();
Log.d(TAG, "uri -> " + uri);
new PickContactNumberAsyncTask().execute(uri);
}
finish();
}
}
class PickContactNumberAsyncTask extends AsyncTask<Uri, Integer, MmsContact> {
@Override
protected void onPostExecute(MmsContact contact) {
if (contact != null) {
ContactManager.getInstance(getApplicationContext()).addContact(contact);
}
}
private Bitmap getAvatarById(long id){
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
return BitmapFactory.decodeStream(ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(), uri));
}
@Override
protected MmsContact doInBackground(Uri... params) {
Uri uri = params[0];
Cursor cursor = null;
try {
cursor = getContentResolver().query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
int mimeTypeIndex = cursor.getColumnIndexOrThrow(ContactsContract.Data.MIMETYPE);
final String mimeType = cursor.getString(mimeTypeIndex);
if (TextUtils.equals(mimeType, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) {
String number = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (!TextUtils.isEmpty(number)) {
number = number.replace("-", "");
number = number.replace(" ", "");
}
String displayName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
int contactId = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
Bitmap avatar = getAvatarById(contactId);
if (contactId > 0 && !TextUtils.isEmpty(number)) {
if (avatar == null) {
return new MmsContact(getApplicationContext(), contactId, number, displayName);
} else {
return new MmsContact(getApplicationContext(), contactId, number,
BitmapUtils.getContactAvatar(getApplicationContext(), avatar), displayName);
}
}
}
} while (cursor.moveToNext());
}
} catch (Exception ex){
ex.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
}
}