summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/blockreportspam
diff options
context:
space:
mode:
authorlinyuh <linyuh@google.com>2018-03-08 11:05:37 -0800
committerCopybara-Service <copybara-piper@google.com>2018-03-08 12:42:51 -0800
commit20824a011cd8792568e922bbc374a1a51ea25e41 (patch)
tree35c5a477eeb1743f8ab65e429f03426eae8a75e4 /java/com/android/dialer/blockreportspam
parente67eb83476525df47dce254c5c267191668bf042 (diff)
Implement logic for unblocking a number from the new call log's bottom sheet.
Bug: 70989547 Test: ShowBlockReportSpamDialogNotifierEndToEndTest PiperOrigin-RevId: 188357953 Change-Id: Ie1b1f439f043805892876790d7590a4c721dbf8c
Diffstat (limited to 'java/com/android/dialer/blockreportspam')
-rw-r--r--java/com/android/dialer/blockreportspam/BlockReportSpamDialogs.java41
-rw-r--r--java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogNotifier.java13
-rw-r--r--java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java109
3 files changed, 161 insertions, 2 deletions
diff --git a/java/com/android/dialer/blockreportspam/BlockReportSpamDialogs.java b/java/com/android/dialer/blockreportspam/BlockReportSpamDialogs.java
index 2ec5dbd29..db5fe2134 100644
--- a/java/com/android/dialer/blockreportspam/BlockReportSpamDialogs.java
+++ b/java/com/android/dialer/blockreportspam/BlockReportSpamDialogs.java
@@ -264,8 +264,8 @@ public final class BlockReportSpamDialogs {
/**
* Dialog for unblocking a number and marking it as not spam.
*
- * <p>This dialog is used in the old call log, where unblocking a number will also marking it as
- * not spam.
+ * <p>This dialog is used in the old call log, where unblocking a number will also mark it as not
+ * spam.
*/
public static class DialogFragmentForUnblockingNumberAndReportingAsNotSpam
extends CommonDialogsFragment {
@@ -310,6 +310,43 @@ public final class BlockReportSpamDialogs {
}
}
+ /**
+ * Dialog for unblocking a number.
+ *
+ * <p>This dialog is used in the new call log, where unblocking a number will *not* mark it as not
+ * spam.
+ */
+ public static class DialogFragmentForUnblockingNumber extends CommonDialogsFragment {
+
+ public static DialogFragment newInstance(
+ String displayNumber,
+ OnConfirmListener positiveListener,
+ @Nullable DialogInterface.OnDismissListener dismissListener) {
+ DialogFragmentForUnblockingNumberAndReportingAsNotSpam fragment =
+ new DialogFragmentForUnblockingNumberAndReportingAsNotSpam();
+ fragment.displayNumber = displayNumber;
+ fragment.positiveListener = positiveListener;
+ fragment.dismissListener = dismissListener;
+ return fragment;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ super.onCreateDialog(savedInstanceState);
+ // Return the newly created dialog
+ AlertDialog.Builder alertDialogBuilder = createDialogBuilder(getActivity(), this);
+ alertDialogBuilder.setMessage(
+ getString(R.string.unblock_report_number_alert_title, displayNumber));
+ Dialog dialog =
+ alertDialogBuilder
+ .setPositiveButton(
+ R.string.unblock_number_ok, createGenericOnClickListener(this, positiveListener))
+ .create();
+ dialog.setCanceledOnTouchOutside(true);
+ return dialog;
+ }
+ }
+
/** Dialog for reporting a number as not spam. */
public static class DialogFragmentForReportingNotSpam extends CommonDialogsFragment {
diff --git a/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogNotifier.java b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogNotifier.java
index 2fccdd115..b33dc0f14 100644
--- a/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogNotifier.java
+++ b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogNotifier.java
@@ -72,4 +72,17 @@ public final class ShowBlockReportSpamDialogNotifier {
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
+
+ /** Notifies that a dialog for unblocking a number should be shown. */
+ public static void notifyShowDialogToUnblockNumber(
+ Context context, BlockReportSpamDialogInfo blockReportSpamDialogInfo) {
+ LogUtil.enterBlock("ShowBlockReportSpamDialogNotifier.notifyShowDialogToUnblockNumber");
+
+ Intent intent = new Intent();
+ intent.setAction(ShowBlockReportSpamDialogReceiver.ACTION_SHOW_DIALOG_TO_UNBLOCK_NUMBER);
+ ProtoParsers.put(
+ intent, ShowBlockReportSpamDialogReceiver.EXTRA_DIALOG_INFO, blockReportSpamDialogInfo);
+
+ LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
+ }
}
diff --git a/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
index 6b8f81908..02aa9943b 100644
--- a/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
+++ b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
@@ -21,19 +21,24 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.support.annotation.Nullable;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.blockreportspam.BlockReportSpamDialogs.DialogFragmentForBlockingNumber;
import com.android.dialer.blockreportspam.BlockReportSpamDialogs.DialogFragmentForBlockingNumberAndOptionallyReportingAsSpam;
import com.android.dialer.blockreportspam.BlockReportSpamDialogs.DialogFragmentForReportingNotSpam;
+import com.android.dialer.blockreportspam.BlockReportSpamDialogs.DialogFragmentForUnblockingNumber;
import com.android.dialer.blockreportspam.BlockReportSpamDialogs.OnConfirmListener;
import com.android.dialer.blockreportspam.BlockReportSpamDialogs.OnSpamDialogClickListener;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DialerExecutor.Worker;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.protos.ProtoParsers;
import com.android.dialer.spam.Spam;
import com.android.dialer.spam.SpamComponent;
+import com.google.auto.value.AutoValue;
/**
* A {@link BroadcastReceiver} that shows an appropriate dialog upon receiving notifications from
@@ -45,6 +50,7 @@ public final class ShowBlockReportSpamDialogReceiver extends BroadcastReceiver {
static final String ACTION_SHOW_DIALOG_TO_BLOCK_NUMBER_AND_OPTIONALLY_REPORT_SPAM =
"show_dialog_to_block_number_and_optionally_report_spam";
static final String ACTION_SHOW_DIALOG_TO_REPORT_NOT_SPAM = "show_dialog_to_report_not_spam";
+ static final String ACTION_SHOW_DIALOG_TO_UNBLOCK_NUMBER = "show_dialog_to_unblock_number";
static final String EXTRA_DIALOG_INFO = "dialog_info";
/** {@link FragmentManager} needed to show a {@link android.app.DialogFragment}. */
@@ -56,6 +62,7 @@ public final class ShowBlockReportSpamDialogReceiver extends BroadcastReceiver {
intentFilter.addAction(ACTION_SHOW_DIALOG_TO_BLOCK_NUMBER_AND_OPTIONALLY_REPORT_SPAM);
intentFilter.addAction(ACTION_SHOW_DIALOG_TO_BLOCK_NUMBER);
intentFilter.addAction(ACTION_SHOW_DIALOG_TO_REPORT_NOT_SPAM);
+ intentFilter.addAction(ACTION_SHOW_DIALOG_TO_UNBLOCK_NUMBER);
return intentFilter;
}
@@ -79,6 +86,9 @@ public final class ShowBlockReportSpamDialogReceiver extends BroadcastReceiver {
case ACTION_SHOW_DIALOG_TO_REPORT_NOT_SPAM:
showDialogToReportNotSpam(context, intent);
break;
+ case ACTION_SHOW_DIALOG_TO_UNBLOCK_NUMBER:
+ showDialogToUnblockNumber(context, intent);
+ break;
default:
throw new IllegalStateException("Unsupported action: " + action);
}
@@ -197,4 +207,103 @@ public final class ShowBlockReportSpamDialogReceiver extends BroadcastReceiver {
dialogInfo.getNormalizedNumber(), onConfirmListener, /* dismissListener = */ null)
.show(fragmentManager, BlockReportSpamDialogs.NOT_SPAM_DIALOG_TAG);
}
+
+ private void showDialogToUnblockNumber(Context context, Intent intent) {
+ LogUtil.enterBlock("ShowBlockReportSpamDialogReceiver.showDialogToUnblockNumber");
+
+ Assert.checkArgument(intent.hasExtra(EXTRA_DIALOG_INFO));
+ BlockReportSpamDialogInfo dialogInfo =
+ ProtoParsers.getTrusted(
+ intent, EXTRA_DIALOG_INFO, BlockReportSpamDialogInfo.getDefaultInstance());
+
+ FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler =
+ new FilteredNumberAsyncQueryHandler(context);
+
+ // Set up the positive listener for the dialog.
+ OnConfirmListener onConfirmListener =
+ () -> {
+ LogUtil.i("ShowBlockReportSpamDialogReceiver.showDialogToUnblockNumber", "confirmed");
+
+ DialerExecutorComponent.get(context)
+ .dialerExecutorFactory()
+ .createNonUiTaskBuilder(
+ new GetIdForBlockedNumberWorker(filteredNumberAsyncQueryHandler))
+ .onSuccess(
+ idForBlockedNumber -> {
+ LogUtil.i(
+ "ShowBlockReportSpamDialogReceiver.showDialogToUnblockNumber",
+ "ID for the blocked number retrieved");
+ if (idForBlockedNumber == null) {
+ throw new IllegalStateException("ID for a blocked number is null.");
+ }
+
+ LogUtil.i(
+ "ShowBlockReportSpamDialogReceiver.showDialogToUnblockNumber",
+ "unblocking number");
+ filteredNumberAsyncQueryHandler.unblock(
+ (rows, values) ->
+ Logger.get(context)
+ .logImpression(DialerImpression.Type.USER_ACTION_UNBLOCKED_NUMBER),
+ idForBlockedNumber);
+ })
+ .onFailure(
+ throwable -> {
+ throw new RuntimeException(throwable);
+ })
+ .build()
+ .executeSerial(
+ NumberInfo.newBuilder()
+ .setNormalizedNumber(dialogInfo.getNormalizedNumber())
+ .setCountryIso(dialogInfo.getCountryIso())
+ .build());
+ };
+
+ // Create & show the dialog.
+ DialogFragmentForUnblockingNumber.newInstance(
+ dialogInfo.getNormalizedNumber(), onConfirmListener, /* dismissListener = */ null)
+ .show(fragmentManager, BlockReportSpamDialogs.UNBLOCK_DIALOG_TAG);
+ }
+
+ /** A {@link Worker} that retrieves the ID of a blocked number from the database. */
+ private static final class GetIdForBlockedNumberWorker implements Worker<NumberInfo, Integer> {
+
+ private final FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler;
+
+ GetIdForBlockedNumberWorker(FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler) {
+ this.filteredNumberAsyncQueryHandler = filteredNumberAsyncQueryHandler;
+ }
+
+ @Nullable
+ @Override
+ public Integer doInBackground(NumberInfo input) throws Throwable {
+ LogUtil.enterBlock("GetIdForBlockedNumberWorker.doInBackground");
+
+ return filteredNumberAsyncQueryHandler.getBlockedIdSynchronous(
+ input.getNormalizedNumber(), input.getCountryIso());
+ }
+ }
+
+ /**
+ * Contains information about a number and serves as the input to {@link
+ * GetIdForBlockedNumberWorker}.
+ */
+ @AutoValue
+ abstract static class NumberInfo {
+ static Builder newBuilder() {
+ return new AutoValue_ShowBlockReportSpamDialogReceiver_NumberInfo.Builder();
+ }
+
+ abstract String getNormalizedNumber();
+
+ abstract String getCountryIso();
+
+ @AutoValue.Builder
+ abstract static class Builder {
+ abstract Builder setNormalizedNumber(String normalizedNumber);
+
+ abstract Builder setCountryIso(String countryIso);
+
+ abstract NumberInfo build();
+ }
+ }
}