summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java')
-rw-r--r--java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java171
1 files changed, 171 insertions, 0 deletions
diff --git a/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
new file mode 100644
index 000000000..9642468cb
--- /dev/null
+++ b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.blockreportspam;
+
+import android.app.FragmentManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.widget.Toast;
+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.logging.ContactSource;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
+import com.android.dialer.logging.ReportingLocation;
+import com.android.dialer.spam.Spam;
+import com.android.dialer.spam.SpamComponent;
+import java.util.Locale;
+
+/**
+ * A {@link BroadcastReceiver} that shows an appropriate dialog upon receiving notifications from
+ * {@link ShowBlockReportSpamDialogNotifier}.
+ */
+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 EXTRA_NUMBER = "number";
+ static final String EXTRA_COUNTRY_ISO = "country_iso";
+ static final String EXTRA_CALL_TYPE = "call_type";
+
+ /** {@link FragmentManager} needed to show a {@link android.app.DialogFragment}. */
+ private final FragmentManager fragmentManager;
+
+ /** Returns an {@link IntentFilter} containing all actions accepted by this broadcast receiver. */
+ public static IntentFilter getIntentFilter() {
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(ACTION_SHOW_DIALOG_TO_BLOCK_NUMBER_AND_OPTIONALLY_REPORT_SPAM);
+ intentFilter.addAction(ACTION_SHOW_DIALOG_TO_REPORT_NOT_SPAM);
+ return intentFilter;
+ }
+
+ public ShowBlockReportSpamDialogReceiver(FragmentManager fragmentManager) {
+ this.fragmentManager = fragmentManager;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ LogUtil.enterBlock("ShowBlockReportSpamDialogReceiver.onReceive");
+
+ String action = intent.getAction();
+
+ switch (Assert.isNotNull(action)) {
+ case ACTION_SHOW_DIALOG_TO_BLOCK_NUMBER_AND_OPTIONALLY_REPORT_SPAM:
+ showDialogToBlockNumberAndOptionallyReportSpam(context, intent);
+ break;
+ case ACTION_SHOW_DIALOG_TO_REPORT_NOT_SPAM:
+ showDialogToReportNotSpam(context, intent);
+ break;
+ default:
+ throw new IllegalStateException("Unsupported action: " + action);
+ }
+ }
+
+ private void showDialogToBlockNumberAndOptionallyReportSpam(Context context, Intent intent) {
+ LogUtil.enterBlock(
+ "ShowBlockReportSpamDialogReceiver.showDialogToBlockNumberAndOptionallyReportSpam");
+
+ Assert.checkArgument(intent.hasExtra(EXTRA_NUMBER));
+ Assert.checkArgument(intent.hasExtra(EXTRA_COUNTRY_ISO));
+ Assert.checkArgument(intent.hasExtra(EXTRA_CALL_TYPE));
+
+ String normalizedNumber = intent.getStringExtra(EXTRA_NUMBER);
+ String countryIso = intent.getStringExtra(EXTRA_COUNTRY_ISO);
+ int callType = intent.getIntExtra(EXTRA_CALL_TYPE, 0);
+
+ Spam spam = SpamComponent.get(context).spam();
+
+ // Set up the positive listener for the dialog.
+ OnSpamDialogClickListener onSpamDialogClickListener =
+ reportSpam -> {
+ LogUtil.i(
+ "ShowBlockReportSpamDialogReceiver.showDialogToBlockNumberAndOptionallyReportSpam",
+ "confirmed");
+
+ if (reportSpam && spam.isSpamEnabled()) {
+ LogUtil.i(
+ "ShowBlockReportSpamDialogReceiver.showDialogToBlockNumberAndOptionallyReportSpam",
+ "report spam");
+ Logger.get(context)
+ .logImpression(
+ DialerImpression.Type
+ .REPORT_CALL_AS_SPAM_VIA_CALL_LOG_BLOCK_REPORT_SPAM_SENT_VIA_BLOCK_NUMBER_DIALOG);
+ spam.reportSpamFromCallHistory(
+ normalizedNumber,
+ countryIso,
+ callType,
+ ReportingLocation.Type.UNKNOWN_REPORTING_LOCATION /* TODO(a bug): Fix. */,
+ ContactSource.Type.UNKNOWN_SOURCE_TYPE /* TODO(a bug): Fix. */);
+ }
+
+ // TODO(a bug): Block the number.
+ Toast.makeText(
+ context,
+ String.format(Locale.ENGLISH, "TODO: " + "Block number %s.", normalizedNumber),
+ Toast.LENGTH_SHORT)
+ .show();
+ };
+
+ // Create and show the dialog.
+ BlockReportSpamDialogs.BlockReportSpamDialogFragment.newInstance(
+ normalizedNumber,
+ spam.isDialogReportSpamCheckedByDefault(),
+ onSpamDialogClickListener,
+ /* dismissListener = */ null)
+ .show(fragmentManager, BlockReportSpamDialogs.BLOCK_REPORT_SPAM_DIALOG_TAG);
+ }
+
+ private void showDialogToReportNotSpam(Context context, Intent intent) {
+ LogUtil.enterBlock("ShowBlockReportSpamDialogReceiver.showDialogToReportNotSpam");
+
+ Assert.checkArgument(intent.hasExtra(EXTRA_NUMBER));
+ Assert.checkArgument(intent.hasExtra(EXTRA_COUNTRY_ISO));
+ Assert.checkArgument(intent.hasExtra(EXTRA_CALL_TYPE));
+
+ String normalizedNumber = intent.getStringExtra(EXTRA_NUMBER);
+ String countryIso = intent.getStringExtra(EXTRA_COUNTRY_ISO);
+ int callType = intent.getIntExtra(EXTRA_CALL_TYPE, 0);
+
+ // Set up the positive listener for the dialog.
+ OnConfirmListener onConfirmListener =
+ () -> {
+ LogUtil.i("ShowBlockReportSpamDialogReceiver.showDialogToReportNotSpam", "confirmed");
+
+ Spam spam = SpamComponent.get(context).spam();
+ if (spam.isSpamEnabled()) {
+ Logger.get(context)
+ .logImpression(DialerImpression.Type.DIALOG_ACTION_CONFIRM_NUMBER_NOT_SPAM);
+ spam.reportNotSpamFromCallHistory(
+ normalizedNumber,
+ countryIso,
+ callType,
+ ReportingLocation.Type.UNKNOWN_REPORTING_LOCATION /* TODO(a bug): Fix. */,
+ ContactSource.Type.UNKNOWN_SOURCE_TYPE /* TODO(a bug): Fix. */);
+ }
+ };
+
+ // Create & show the dialog.
+ BlockReportSpamDialogs.ReportNotSpamDialogFragment.newInstance(
+ normalizedNumber, onConfirmListener, /* dismissListener = */ null)
+ .show(fragmentManager, BlockReportSpamDialogs.NOT_SPAM_DIALOG_TAG);
+ }
+}