/* * Copyright 2011 Adi Sayoga. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.adisayoga.earthquake.models; import java.util.ArrayList; import java.util.List; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract; import android.util.Log; import com.adisayoga.earthquake.dto.ContactDTO; import com.adisayoga.earthquake.providers.ContactColumns; import com.adisayoga.earthquake.providers.ContactProvider; /** * Class yang digunakan untuk memudahkan mendapatkan data dari provider daftar * kontak. * * @author Adi Sayoga */ public class ContactModel { private static final String TAG = "ContactModel"; private final Context context; public ContactModel(Context context) { this.context = context; } /** * Mendapatkan data kontak. * * @return contacts List kontak */ public List<ContactDTO> getContacts() { Log.i(TAG, "Mengambil data dari provider..."); ContentResolver resolver = context.getContentResolver(); Cursor cursor = resolver.query(ContactProvider.CONTENT_URI, null, null, null, null); List<ContactDTO> contacts = new ArrayList<ContactDTO>(); while (cursor.moveToNext()) { long id = cursor.getLong(ContactColumns._ID_INDEX); String name = cursor.getString(ContactColumns.NAME_INDEX); String phone = cursor.getString(ContactColumns.PHONE_NUMBER_INDEX); String email = cursor.getString(ContactColumns.MAIL_INDEX); // Tambahkan ke arraylist ContactDTO contact = new ContactDTO(id, name, phone, email); contacts.add(contact); } cursor.close(); Log.d(TAG, "Selesai mengambil data, " + cursor.getCount() + " items"); return contacts; } /** * Mendapatkan data nomor telepon * * @return Daftar nomor telepon */ public String[] getPhones() { Log.i(TAG, "Mengambil data dari provider..."); ContentResolver resolver = context.getContentResolver(); Cursor cursor = resolver.query(ContactProvider.CONTENT_URI, null, null, null, null); String phones = ""; while (cursor.moveToNext()) { String phone = cursor.getString(ContactColumns.PHONE_NUMBER_INDEX); if (!phones.equals("") && !phone.equals("")) phones += ","; phones += phone; } cursor.close(); Log.d(TAG, "Selesai mengambil data, " + cursor.getCount() + " items"); if (phones == "") return null; return phones.replace(" ", "").split(","); } /** * Mendapatkan data email * * @return Daftar email */ public String[] getMails() { Log.i(TAG, "Mengambil data dari provider..."); ContentResolver resolver = context.getContentResolver(); Cursor cursor = resolver.query(ContactProvider.CONTENT_URI, null, null, null, null); String mails = ""; while (cursor.moveToNext()) { String mail = cursor.getString(ContactColumns.MAIL_INDEX); if (!mails.equals("") && !mail.equals("")) mails += ","; mails += mail; } cursor.close(); Log.d(TAG, "Selesai mengambil data, " + cursor.getCount() + " items"); if (mails == "") return null; return mails.replace(" ", "").split(","); } /** * Mendapatkan data kontak telepon. * * @param uri Uri kontak * @return Data kontak */ public ContactDTO getSystemContact(Uri uri) { ContactDTO contact = null; ContentResolver resolver = context.getContentResolver(); Cursor contactCursor = resolver.query(uri, null, null, null, null); if (contactCursor.moveToNext()) { long id = contactCursor.getLong(contactCursor.getColumnIndex( ContactsContract.Contacts._ID)); String name = contactCursor.getString(contactCursor.getColumnIndex( ContactsContract.Contacts.DISPLAY_NAME)); // Nomor telepon String phones = ""; String hasPhone = contactCursor.getString(contactCursor.getColumnIndex( ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (hasPhone.equals("1")) { Cursor phoneCursor = resolver.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id, null, null); while (phoneCursor.moveToNext()) { String phone = phoneCursor.getString(phoneCursor.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); if (phone == null) phone = ""; if (!phones.equals("") && !phone.equals("")) phones += ", "; phones += phone; } phoneCursor.close(); } // Email String mails = ""; Cursor mailCursor = resolver.query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + id, null, null); while (mailCursor.moveToNext()) { String mail = mailCursor.getString(mailCursor.getColumnIndex( ContactsContract.CommonDataKinds.Email.DATA)); if (mail == null) mail = ""; if (!mails.equals("") && !mail.equals("")) mails += ", "; mails += mail; } mailCursor.close(); Log.d(TAG, "name=" + name + ", phone=" + phones + ", mail=" + mails); contact = new ContactDTO(id, name, phones, mails); } contactCursor.close(); return contact; } }