diff options
author | Rohit Yengisetty <rohit@cyngn.com> | 2016-01-12 22:37:33 -0800 |
---|---|---|
committer | Rohit Yengisetty <rohit@cyngn.com> | 2016-01-12 22:37:33 -0800 |
commit | cf866936d5b061ed31b5dab35b6624e1c05b22bd (patch) | |
tree | f50be12d07e55a21619c396ea22598d069663c02 /src/com/android/contacts/common/util/BlockContactHelper.java | |
parent | bbf7e8276d72c2e524c13cf659c64e473385265e (diff) | |
download | android_packages_apps_ContactsCommon-cf866936d5b061ed31b5dab35b6624e1c05b22bd.tar.gz android_packages_apps_ContactsCommon-cf866936d5b061ed31b5dab35b6624e1c05b22bd.tar.bz2 android_packages_apps_ContactsCommon-cf866936d5b061ed31b5dab35b6624e1c05b22bd.zip |
Add block contact dialog and supporting helper classes
Change-Id: I7f2697a843d4f615fe1ae9e8525baaefcbe9428b
Diffstat (limited to 'src/com/android/contacts/common/util/BlockContactHelper.java')
-rw-r--r-- | src/com/android/contacts/common/util/BlockContactHelper.java | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/src/com/android/contacts/common/util/BlockContactHelper.java b/src/com/android/contacts/common/util/BlockContactHelper.java new file mode 100644 index 00000000..c605a978 --- /dev/null +++ b/src/com/android/contacts/common/util/BlockContactHelper.java @@ -0,0 +1,179 @@ +package com.android.contacts.common.util; + +import android.app.DialogFragment; +import android.content.Context; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.telephony.PhoneNumberUtils; +import android.text.TextUtils; +import com.android.contacts.common.R; +import com.android.contacts.common.activity.fragment.BlockContactDialogFragment; +import com.android.contacts.common.model.Contact; +import com.android.contacts.common.model.RawContact; +import com.android.contacts.common.model.dataitem.DataItem; +import com.android.contacts.common.model.dataitem.PhoneDataItem; +import com.android.internal.telephony.util.BlacklistUtils; +import com.cyanogen.lookup.phonenumber.contract.LookupProvider; + +import java.util.List; + +/** + * Helper class used to interface with the framework implementation of Blacklist and delegating + * the apropos information to the active phonenumber LookupProvider, if any. + */ +public class BlockContactHelper { + private final Context mContext; + private AsyncTask mBackgroundTask; + private Contact mContact; + private LookupProvider mLookupProvider; + private volatile boolean mIsBlacklisted; + private volatile boolean mIsProviderInitialized; + private boolean mBackgroundTaskCompleted; + + public enum BlockMode { + BLOCK, + UNBLOCK + } + + public BlockContactHelper(Context context, LookupProvider lookupProvider) { + mContext = context; + mLookupProvider = lookupProvider; + } + + public void setContactInfo(Contact contact) { + mContact = contact; + } + + public void gatherDataInBackground() { + mBackgroundTask = new AsyncTask<Void, Void, Void>() { + @Override + protected Void doInBackground(Void... params) { + if (mContact == null) return null; + // check blacklist status of all of the contact's numbers + contact: + for (RawContact rawContact : mContact.getRawContacts()) { + List<DataItem> data = rawContact.getDataItems(); + for(DataItem item : data) { + if (item instanceof PhoneDataItem) { + PhoneDataItem phoneDataItem = (PhoneDataItem) item; + if (isBlacklisted(phoneDataItem.getNumber())) { + mIsBlacklisted = true; + break contact; + } + } + } + } + + if (mLookupProvider.initialize()) { + mIsProviderInitialized = true; + } + + mBackgroundTaskCompleted = true; + return null; + } + }.execute(); + } + + public boolean isContactBlacklisted() { + return mIsBlacklisted; + } + + /** + * Note: run on non-ui thread as this call executes a content provider query + */ + private void toggleBlacklistStatus(String number, boolean shouldBlacklist) { + String nn = PhoneNumberUtils.normalizeNumber(number); + BlacklistUtils.addOrUpdate(mContext, nn, + shouldBlacklist ? BlacklistUtils.BLOCK_CALLS | BlacklistUtils.BLOCK_MESSAGES + : 0, BlacklistUtils.BLOCK_CALLS | BlacklistUtils.BLOCK_MESSAGES); + } + + /** + * Note: run on non-ui thread as this call executes a content provider query + */ + private boolean isBlacklisted(String number) { + String nn = PhoneNumberUtils.normalizeNumber(number); + return BlacklistUtils.isListed(mContext, nn, BlacklistUtils.BLOCK_CALLS) + != BlacklistUtils.MATCH_NONE; + } + + public DialogFragment getBlockContactDialog(BlockMode blockMode) { + BlockContactDialogFragment f = new BlockContactDialogFragment(); + Bundle bundle = new Bundle(); + int launchMode = blockMode == BlockMode.BLOCK ? BlockContactDialogFragment.BLOCK_MODE : + BlockContactDialogFragment.UNBLOCK_MODE; + bundle.putInt(BlockContactDialogFragment.KEY_LAUNCH_MODE, launchMode); + String providerName = mLookupProvider.getDisplayName(); + bundle.putString(BlockContactDialogFragment.KEY_CURRENT_LOOKUP_PROVIDER_NAME, providerName); + + f.setArguments(bundle); + return f; + } + + public void blockContact(boolean notifyLookupProvider) { + for (RawContact rawContact : mContact.getRawContacts()) { + List<DataItem> data = rawContact.getDataItems(); + for(DataItem item : data) { + if (item instanceof PhoneDataItem) { + PhoneDataItem phoneDataItem = (PhoneDataItem) item; + String number = phoneDataItem.getNumber(); + toggleBlacklistStatus(number, true /*block contact*/); + + if (notifyLookupProvider && mIsProviderInitialized && + mLookupProvider.supportsSpamReporting()) { + String formattedNumber = PhoneNumberHelper.formatPhoneNumber(mContext, + number); + mLookupProvider.markAsSpam(formattedNumber); + } + } + } + } + + gatherDataInBackground(); + } + + public void unblockContact(boolean notifyLookupProvider) { + for (RawContact rawContact : mContact.getRawContacts()) { + List<DataItem> data = rawContact.getDataItems(); + for(DataItem item : data) { + if (item instanceof PhoneDataItem) { + PhoneDataItem phoneDataItem = (PhoneDataItem) item; + String number = phoneDataItem.getNumber(); + toggleBlacklistStatus(number, false /*unblock contact*/); + + if (notifyLookupProvider && mIsProviderInitialized && + mLookupProvider.supportsSpamReporting()) { + String formattedNumber = PhoneNumberHelper.formatPhoneNumber(mContext, + number); + mLookupProvider.unmarkAsSpam(formattedNumber); + } + } + } + } + + gatherDataInBackground(); + } + + public void blockContactAsync(final boolean notifyLookupProvider) { + new AsyncTask<Void, Void, Void>() { + @Override + protected Void doInBackground(Void... params) { + blockContact(notifyLookupProvider); + return null; + } + }.execute(); + } + + public void unblockContactAsync(final boolean notifyLookupProvider) { + new AsyncTask<Void, Void, Void>() { + @Override + protected Void doInBackground(Void... params) { + unblockContact(notifyLookupProvider); + return null; + } + }.execute(); + } + +} |