Ankita Singh
Ankita Singh

Reputation: 314

How to know that contact is deleted/updated/added and which contact has been newly added

I am using a content observer to know that there is a change made to contact phonebook of the device but I am not getting the exact task done like whether the contact has been added, deleted or updated and what is the value of the modified contact.

// Service running in background which always run and check to know that content has been changed


public class ContactChange extends Service {


    ContactObserver observer;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        observer = new ContactObserver(new Handler(),getApplicationContext());
        // TODO Auto-generated method stub
        getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, false, observer);

        super.onCreate();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        getContentResolver().unregisterContentObserver(observer);
    }
}



//Content observer where we get to know that changes has made to the contact phonebook

    public class ContactObserver extends ContentObserver {

    private Context mContext;
    DataBaseCurdOperation dataBaseCurdOperation;
    ApiInterface apiInterface;
    MyPrefs myPrefs;
    ArrayList<InviteList> inviteArrayList;

    public ContactObserver(Handler handler, Context context) {
        super(handler);
        this.mContext = context;
        dataBaseCurdOperation = new DataBaseCurdOperation(mContext);
        myPrefs = new MyPrefs(mContext);
        apiInterface = ServiceGenerator.createService(ApiInterface.class, Config.BASE_URL_1);
        inviteArrayList = new ArrayList<InviteList>();
    }

    @Override
    public void onChange(boolean selfChange) {
        this.onChange(selfChange, null);
    }




    @Override
    public void onChange(boolean selfChange, Uri uri) {
        Logger.LogError("URI", uri.toString());
        boolean hasContactPermission = (ContextCompat.checkSelfPermission(mContext,
                android.Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED);
        if (hasContactPermission) {
            SavingContactsActivity savingContactsActivity = new SavingContactsActivity(mContext);
            savingContactsActivity.execute();
            new InviteApiCall().execute();
        }
    }

Upvotes: 4

Views: 938

Answers (1)

Ankita Singh
Ankita Singh

Reputation: 314

Taking this approach and it is giving the contact whether it is added or updated not got the solution for deleted but surely will post the answer of deleted soon.... And I worked on the database after that

public class ContactSyncObserver extends ContentObserver {

Context mContext;
DataBaseCurdOperation dataBaseCurdOperation;
MyPrefs myPrefs;


public ContactSyncObserver(Handler handler, Context mContext) {
    super(handler);
    this.mContext = mContext;
    dataBaseCurdOperation = new DataBaseCurdOperation(mContext);
    myPrefs = new MyPrefs(mContext);

}

@Override
public boolean deliverSelfNotifications() {
    return true;
}

@Override
public void onChange(boolean selfChange, Uri uri) {
    super.onChange(selfChange, uri);
    boolean hasContactPermission = (ContextCompat.checkSelfPermission(mContext,
            Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED);
    if (hasContactPermission) {
        try {
            Cursor cursor = mContext.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP + " Desc");
            if (cursor.moveToNext()) {
                String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                Logger.LogError("contactId", myPrefs.getContactId());
                String name = cursor.getString(
                        cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                String rawContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.NAME_RAW_CONTACT_ID));
                String phoneNumber = null;
                String hasPhoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                if (Integer.parseInt(hasPhoneNumber) > 0) {
                    Cursor phones = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id, null, null);
                    while (phones.moveToNext()) {
                        phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        Log.e("Number", phoneNumber);
                    }
                    phones.close();
                }
                if (phoneNumber != null) {
                    phoneNumber = phoneNumber.replaceAll(" ", "");
                }
                if (dataBaseCurdOperation.checkIsContactIdExist(id)) {
                    if (!myPrefs.getContactId().equals(id)) {
                        dataBaseCurdOperation.updateNewNumber(id, phoneNumber, name, "updated");
                        UtilHandler.TriggerRefresh();
                    } else {
                        Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                myPrefs.setContactId("0");
                            }
                        }, 3000);
                    }
                } else {
                    dataBaseCurdOperation.insertServerContact(id, name, phoneNumber, "inserted", "newNumber", "newName");
                    UtilHandler.TriggerRefresh();  // triggering my sync adapter here...
                }
                myPrefs.setContactId(id);
            }
        } catch (Exception e) {
            Logger.LogError("Contact Exception", "occured");
        }
    }
}

}

Upvotes: 2

Related Questions