diff options
author | Kamaljeet Maini <kmaini@cyngn.com> | 2016-02-11 16:43:11 -0800 |
---|---|---|
committer | Richard MacGregor <rmacgregor@cyngn.com> | 2016-03-25 11:42:19 -0700 |
commit | bc6fadadbec28bb4c37594e47231c6be5637c1ff (patch) | |
tree | 13bdb1cb08c2830e0ba61efd91b67ecf06a26be5 /src | |
parent | 8814936024da5325ca1ba7a9d4f59a0865e37d4d (diff) | |
download | android_packages_apps_ContactsCommon-bc6fadadbec28bb4c37594e47231c6be5637c1ff.tar.gz android_packages_apps_ContactsCommon-bc6fadadbec28bb4c37594e47231c6be5637c1ff.tar.bz2 android_packages_apps_ContactsCommon-bc6fadadbec28bb4c37594e47231c6be5637c1ff.zip |
Tie blocking to blacklist and contact_info provider
Add BlockNumberHelper.java for blocking numbers. The blocking includes
notifying the framework and any call info provider.
Issue-Id: DIALER-705
Change-Id: I171460920b7df9311bba2508a04f29ff5e009022
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/contacts/common/activity/fragment/BlockContactDialogFragment.java | 21 | ||||
-rw-r--r-- | src/com/android/contacts/common/util/BlockNumberHelper.java | 172 |
2 files changed, 193 insertions, 0 deletions
diff --git a/src/com/android/contacts/common/activity/fragment/BlockContactDialogFragment.java b/src/com/android/contacts/common/activity/fragment/BlockContactDialogFragment.java index b07d914d..b6b93518 100644 --- a/src/com/android/contacts/common/activity/fragment/BlockContactDialogFragment.java +++ b/src/com/android/contacts/common/activity/fragment/BlockContactDialogFragment.java @@ -26,9 +26,11 @@ public class BlockContactDialogFragment extends DialogFragment public static final int UNBLOCK_MODE = 1; public static final String KEY_CURRENT_LOOKUP_PROVIDER_NAME = "CURRENT_LOOKUP_PROVIDER_NAME"; public static final String KEY_LAUNCH_MODE = "LAUNCH_MODE"; + public static final String BLOCK_UI_RESULT_CALLBACK = "BLOCK_UI_RESULT_CALLBACK"; private int mLaunchMode; private CheckBox mNotifyProviderCheckBox; + private BlockContactCallbacks mUIResultCallbacks; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -37,6 +39,17 @@ public class BlockContactDialogFragment extends DialogFragment Bundle bundle = getArguments(); mLaunchMode = bundle.getInt(KEY_LAUNCH_MODE); lookupProviderName = bundle.getString(KEY_CURRENT_LOOKUP_PROVIDER_NAME); + + mUIResultCallbacks = null; + + if (bundle.getSerializable(BLOCK_UI_RESULT_CALLBACK) != null) { + try { + mUIResultCallbacks = (BlockContactCallbacks) bundle.getSerializable + (BLOCK_UI_RESULT_CALLBACK); + } catch (ClassCastException e) { + mUIResultCallbacks = null; + } + } } Activity hostActivity = getActivity(); @@ -101,6 +114,14 @@ public class BlockContactDialogFragment extends DialogFragment ((BlockContactCallbacks) parentActivity).onUnblockContact(mCheckboxStatus); } } + + if (mUIResultCallbacks != null && mUIResultCallbacks instanceof BlockContactCallbacks) { + if (mLaunchMode == BLOCK_MODE) { + ((BlockContactCallbacks) mUIResultCallbacks).onBlockContact(mCheckboxStatus); + } else { + ((BlockContactCallbacks) mUIResultCallbacks).onUnblockContact(mCheckboxStatus); + } + } } public interface BlockContactCallbacks { diff --git a/src/com/android/contacts/common/util/BlockNumberHelper.java b/src/com/android/contacts/common/util/BlockNumberHelper.java new file mode 100644 index 00000000..9d329d51 --- /dev/null +++ b/src/com/android/contacts/common/util/BlockNumberHelper.java @@ -0,0 +1,172 @@ +package com.android.contacts.common.util; + +import android.app.DialogFragment; +import android.content.Context; +import android.os.AsyncTask; +import android.os.Bundle; +import android.telephony.PhoneNumberUtils; + +import com.android.internal.telephony.util.BlacklistUtils; +import com.android.contacts.common.activity.fragment.BlockContactDialogFragment; +import com.android.contacts.common.R; +import com.android.contacts.common.model.Contact; +import com.cyanogen.lookup.phonenumber.contract.LookupProvider; + +import java.io.Serializable; + +/** + * 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 BlockNumberHelper implements BlockContactDialogFragment.BlockContactCallbacks, + Serializable { + private final Context mContext; + private AsyncTask mBackgroundTask; + private String mNumber; + private LookupProvider mLookupProvider; + private volatile boolean mIsProviderInitialized; + private BlockActionCallbacks mTaskCompletionCallbacks; + + public enum BlockMode { + BLOCK, + UNBLOCK + } + + public BlockNumberHelper(Context context, LookupProvider lookupProvider) { + mContext = context; + mLookupProvider = lookupProvider; + } + + public void setNumberInfo(String number) { + mNumber = number; + } + + public void setTaskCompletionCallbacks(BlockActionCallbacks taskCompletionCallbacks) { + mTaskCompletionCallbacks = taskCompletionCallbacks; + } + + public void gatherDataInBackground() { + mBackgroundTask = new AsyncTask<Void, Void, Void>() { + @Override + protected Void doInBackground(Void... params) { + if (mNumber == null) return null; + + if (mLookupProvider.initialize()) { + mIsProviderInitialized = true; + } + + return null; + } + }.execute(); + } + + /** + * 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); + } + + public DialogFragment getBlockNumberDialog(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); + bundle.putSerializable(BlockContactDialogFragment.BLOCK_UI_RESULT_CALLBACK, + (Serializable)this); + + f.setArguments(bundle); + return f; + } + + private void blockNumber(String number, boolean notifyLookupProvider) { + toggleBlacklistStatus(number, true /*block number*/); + + if (notifyLookupProvider && mIsProviderInitialized && + mLookupProvider.supportsSpamReporting()) { + String formattedNumber = PhoneNumberHelper.formatPhoneNumber(mContext, + number); + mLookupProvider.markAsSpam(formattedNumber); + } + } + + private void unblockNumber(String number, boolean notifyLookupProvider) { + toggleBlacklistStatus(number, false /*unblock number*/); + + if (notifyLookupProvider && mIsProviderInitialized && + mLookupProvider.supportsSpamReporting()) { + String formattedNumber = PhoneNumberHelper.formatPhoneNumber(mContext, + number); + mLookupProvider.unmarkAsSpam(formattedNumber); + } + } + + private void blockNumberAsync(final String number, final boolean notifyLookupProvider) { + new AsyncTask<Void, Void, Void>() { + @Override + protected Void doInBackground(Void... params) { + blockNumber(number, notifyLookupProvider); + return null; + } + @Override + protected void onPostExecute(Void v) { + if(mTaskCompletionCallbacks != null + && mTaskCompletionCallbacks instanceof BlockActionCallbacks) { + ((BlockActionCallbacks)mTaskCompletionCallbacks).onBlockCompleted(); + } + } + }.execute(); + } + + private void unblockNumberAsync(final String number, final boolean notifyLookupProvider) { + new AsyncTask<Void, Void, Void>() { + @Override + protected Void doInBackground(Void... params) { + unblockNumber(number, notifyLookupProvider); + return null; + } + @Override + protected void onPostExecute(Void v) { + if(mTaskCompletionCallbacks != null + && mTaskCompletionCallbacks instanceof BlockActionCallbacks) { + ((BlockActionCallbacks)mTaskCompletionCallbacks).onUnblockCompleted(); + } + } + }.execute(); + } + + @Override + public void onBlockContact(boolean notifyLookupProvider) { + if (mNumber != null) { + blockNumberAsync(mNumber, notifyLookupProvider); + } + } + + @Override + public void onUnblockContact(boolean notifyLookupProvider) { + if (mNumber != null) { + unblockNumberAsync(mNumber, notifyLookupProvider); + } + } + + + public interface BlockActionCallbacks { + /** + * Callback indicating that block action has completedd + */ + void onBlockCompleted(); + + /** + * Callback indicating that unblock action has completed + */ + void onUnblockCompleted(); + } + + +} |