summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKamaljeet Maini <kmaini@cyngn.com>2016-02-11 16:43:11 -0800
committerRichard MacGregor <rmacgregor@cyngn.com>2016-03-25 11:42:19 -0700
commitbc6fadadbec28bb4c37594e47231c6be5637c1ff (patch)
tree13bdb1cb08c2830e0ba61efd91b67ecf06a26be5 /src
parent8814936024da5325ca1ba7a9d4f59a0865e37d4d (diff)
downloadandroid_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.java21
-rw-r--r--src/com/android/contacts/common/util/BlockNumberHelper.java172
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();
+ }
+
+
+}