summaryrefslogtreecommitdiff
path: root/java/com/android
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android')
-rw-r--r--java/com/android/dialer/app/calllog/BlockReportSpamListener.java2
-rw-r--r--java/com/android/dialer/blocking/res/values/colors.xml3
-rw-r--r--java/com/android/dialer/blocking/res/values/strings.xml88
-rw-r--r--java/com/android/dialer/blockreportspam/AndroidManifest.xml18
-rw-r--r--java/com/android/dialer/blockreportspam/BlockReportSpamDialogs.java (renamed from java/com/android/dialer/blocking/BlockReportSpamDialogs.java)61
-rw-r--r--java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogNotifier.java76
-rw-r--r--java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java171
-rw-r--r--java/com/android/dialer/blockreportspam/res/layout/block_report_spam_dialog.xml (renamed from java/com/android/dialer/blocking/res/layout/block_report_spam_dialog.xml)0
-rw-r--r--java/com/android/dialer/blockreportspam/res/values/colors.xml21
-rw-r--r--java/com/android/dialer/blockreportspam/res/values/dimens.xml (renamed from java/com/android/dialer/blocking/res/values/dimens.xml)0
-rw-r--r--java/com/android/dialer/blockreportspam/res/values/strings.xml63
-rw-r--r--java/com/android/dialer/calllog/ui/menu/Modules.java4
-rw-r--r--java/com/android/dialer/contactactions/SharedModules.java64
-rw-r--r--java/com/android/dialer/main/MainActivityPeer.java2
-rw-r--r--java/com/android/dialer/main/impl/MainActivity.java6
-rw-r--r--java/com/android/dialer/main/impl/NewMainActivityPeer.java17
-rw-r--r--java/com/android/dialer/main/impl/OldMainActivityPeer.java3
-rw-r--r--java/com/android/dialer/voicemail/listui/menu/Modules.java4
-rw-r--r--java/com/android/incallui/spam/SpamNotificationActivity.java2
19 files changed, 482 insertions, 123 deletions
diff --git a/java/com/android/dialer/app/calllog/BlockReportSpamListener.java b/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
index 092c0982e..c8f8f0cf4 100644
--- a/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
+++ b/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
@@ -20,8 +20,8 @@ import android.app.FragmentManager;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
-import com.android.dialer.blocking.BlockReportSpamDialogs;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
+import com.android.dialer.blockreportspam.BlockReportSpamDialogs;
import com.android.dialer.common.LogUtil;
import com.android.dialer.logging.ContactSource;
import com.android.dialer.logging.DialerImpression;
diff --git a/java/com/android/dialer/blocking/res/values/colors.xml b/java/com/android/dialer/blocking/res/values/colors.xml
index d1a567d9e..374ba8d14 100644
--- a/java/com/android/dialer/blocking/res/values/colors.xml
+++ b/java/com/android/dialer/blocking/res/values/colors.xml
@@ -15,9 +15,6 @@
-->
<resources>
- <!-- 87% black -->
- <color name="block_report_spam_primary_text_color">#de000000</color>
-
<!-- Note, this is also used by InCallUi. -->
<color name="blocked_contact_background">#A52714</color>
diff --git a/java/com/android/dialer/blocking/res/values/strings.xml b/java/com/android/dialer/blocking/res/values/strings.xml
index 8abff4561..a660731b4 100644
--- a/java/com/android/dialer/blocking/res/values/strings.xml
+++ b/java/com/android/dialer/blocking/res/values/strings.xml
@@ -24,54 +24,59 @@
<!-- Positive confirmation button for the dialog which opens when the user needs to migrate to the framework blocking implementation [CHAR LIMIT=NONE]-->
<string name="migrate_blocked_numbers_dialog_allow_button">Allow</string>
- <!-- Do not translate -->
- <string name="migrate_blocked_numbers_dialog_cancel_button">@android:string/cancel</string>
+ <string name="migrate_blocked_numbers_dialog_cancel_button" translatable="false">
+ @android:string/cancel
+ </string>
<!-- Confirmation dialog title for blocking a number. [CHAR LIMIT=NONE] -->
- <string name="block_number_confirmation_title">Block
- <xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g>?</string>
+ <string name="block_number_confirmation_title">
+ Block<xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g>?
+ </string>
<!-- Confirmation dialog message for blocking a number with visual voicemail active.
[CHAR LIMIT=NONE] -->
- <string name="block_number_confirmation_message_vvm">
- Calls from this number will be blocked and voicemails will be automatically deleted.
- </string>
+ <string name="block_number_confirmation_message_vvm">
+ Calls from this number will be blocked and voicemails will be automatically deleted.
+ </string>
<!-- Confirmation dialog message for blocking a number with no visual voicemail.
[CHAR LIMIT=NONE] -->
- <string name="block_number_confirmation_message_no_vvm">
- Calls from this number will be blocked, but the caller may still be able to leave you voicemails.
- </string>
+ <string name="block_number_confirmation_message_no_vvm">
+ Calls from this number will be blocked, but the caller may still be able to leave you voicemails.
+ </string>
<!-- Confirmation dialog message for blocking a number with new filtering enabled.
[CHAR LIMIT=NONE] -->
- <string name="block_number_confirmation_message_new_filtering">
- You will no longer receive calls or texts from this number.
- </string>
+ <string name="block_number_confirmation_message_new_filtering">
+ You will no longer receive calls or texts from this number.
+ </string>
<!-- Block number alert dialog button [CHAR LIMIT=32] -->
<string name="block_number_ok">BLOCK</string>
<!-- Confirmation dialog for unblocking a number. [CHAR LIMIT=NONE] -->
- <string name="unblock_number_confirmation_title">Unblock
- <xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g>?</string>
+ <string name="unblock_number_confirmation_title">
+ Unblock<xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g>?
+ </string>
<!-- Unblock number alert dialog button [CHAR LIMIT=32] -->
<string name="unblock_number_ok">UNBLOCK</string>
<!-- Error message shown when user tries to add invalid number to the block list.
[CHAR LIMIT=64] -->
- <string name="invalidNumber"><xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g>
- is invalid.</string>
+ <string name="invalidNumber">
+ <xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g>is invalid.
+ </string>
<!-- Text for snackbar to undo blocking a number. [CHAR LIMIT=64] -->
- <string name="snackbar_number_blocked">
- <xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g> blocked</string>
+ <string name="snackbar_number_blocked">
+ <xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g> blocked
+ </string>
<!-- Text for snackbar to undo unblocking a number. [CHAR LIMIT=64] -->
- <string name="snackbar_number_unblocked">
- <xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g>
- unblocked</string>
+ <string name="snackbar_number_unblocked">
+ <xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g>unblocked
+ </string>
<!-- Text for undo button in snackbar for blocking/unblocking number. [CHAR LIMIT=10] -->
<string name="block_number_undo">UNDO</string>
@@ -81,42 +86,15 @@
<!-- Title of notification telling the user that call blocking has been temporarily disabled.
[CHAR LIMIT=56] -->
- <string name="call_blocking_disabled_notification_title">
- Call blocking disabled for 48 hours
- </string>
+ <string name="call_blocking_disabled_notification_title">
+ Call blocking disabled for 48 hours
+ </string>
<!-- Text for notification which provides the reason that call blocking has been temporarily
disabled. Namely, we disable call blocking after an emergency call in case of return
phone calls made by emergency services. [CHAR LIMIT=64] -->
- <string name="call_blocking_disabled_notification_text">
- Disabled because an emergency call was made.
- </string>
-
- <!-- Title of alert dialog after clicking on Block/report as spam. [CHAR LIMIT=100] -->
- <string name="block_report_number_alert_title">Block <xliff:g id="number">%1$s</xliff:g>?</string>
-
- <!-- Text in alert dialog after clicking on Block/report as spam. [CHAR LIMIT=100] -->
- <string name="block_report_number_alert_details">You will no longer receive calls from this number.</string>
-
- <!-- Text in alert dialog after clicking on Block. [CHAR LIMIT=100] -->
- <string name="block_number_alert_details"><xliff:g id="text">%1$s</xliff:g> This call will be reported as spam.</string>
-
- <!-- Text in alert dialog after clicking on Unblock. [CHAR LIMIT=100] -->
- <string name="unblock_number_alert_details">This number will be unblocked and reported as not spam. Future calls won\'t be identified as spam.</string>
-
- <!-- Title of alert dialog after clicking on Unblock. [CHAR LIMIT=100] -->
- <string name="unblock_report_number_alert_title">Unblock <xliff:g id="number">%1$s</xliff:g>?</string>
-
- <!-- Report not spam number alert dialog button [CHAR LIMIT=32] -->
- <string name="report_not_spam_alert_button">Report</string>
-
- <!-- Title of alert dialog after clicking on Report as not spam. [CHAR LIMIT=100] -->
- <string name="report_not_spam_alert_title">Report a mistake?</string>
-
- <!-- Text in alert dialog after clicking on Report as not spam. [CHAR LIMIT=100] -->
- <string name="report_not_spam_alert_details">Future calls from <xliff:g id="number">%1$s</xliff:g> will no longer be identified as spam.</string>
-
- <!-- Label for checkbox in the Alert dialog to allow the user to report the number as spam as well. [CHAR LIMIT=30] -->
- <string name="checkbox_report_as_spam_action">Report call as spam</string>
+ <string name="call_blocking_disabled_notification_text">
+ Disabled because an emergency call was made.
+ </string>
</resources>
diff --git a/java/com/android/dialer/blockreportspam/AndroidManifest.xml b/java/com/android/dialer/blockreportspam/AndroidManifest.xml
new file mode 100644
index 000000000..6e08043de
--- /dev/null
+++ b/java/com/android/dialer/blockreportspam/AndroidManifest.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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
+ -->
+
+<manifest package="com.android.dialer.blockreportspam"/> \ No newline at end of file
diff --git a/java/com/android/dialer/blocking/BlockReportSpamDialogs.java b/java/com/android/dialer/blockreportspam/BlockReportSpamDialogs.java
index 255d7cbf9..b75669fa3 100644
--- a/java/com/android/dialer/blocking/BlockReportSpamDialogs.java
+++ b/java/com/android/dialer/blockreportspam/BlockReportSpamDialogs.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.dialer.blocking;
+package com.android.dialer.blockreportspam;
import android.app.Activity;
import android.app.AlertDialog;
@@ -26,11 +26,13 @@ import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.CheckBox;
-import android.widget.CompoundButton;
import android.widget.TextView;
+import com.android.dialer.blocking.FilteredNumberCompat;
-/** Helper class for creating block/report dialog fragments. */
-public class BlockReportSpamDialogs {
+/**
+ * Helper class for creating dialog fragments to block a number and/or report it as spam/not spam.
+ */
+public final class BlockReportSpamDialogs {
public static final String BLOCK_REPORT_SPAM_DIALOG_TAG = "BlockReportSpamDialog";
public static final String BLOCK_DIALOG_TAG = "BlockDialog";
@@ -42,14 +44,7 @@ public class BlockReportSpamDialogs {
Activity activity, final DialogFragment fragment) {
return new AlertDialog.Builder(activity, R.style.AlertDialogTheme)
.setCancelable(true)
- .setNegativeButton(
- android.R.string.cancel,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- fragment.dismiss();
- }
- });
+ .setNegativeButton(android.R.string.cancel, (dialog, which) -> fragment.dismiss());
}
/**
@@ -58,12 +53,9 @@ public class BlockReportSpamDialogs {
*/
private static DialogInterface.OnClickListener createGenericOnClickListener(
final DialogFragment fragment, final OnConfirmListener listener) {
- return new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- fragment.dismiss();
- listener.onClick();
- }
+ return (dialog, which) -> {
+ fragment.dismiss();
+ listener.onClick();
};
}
@@ -98,8 +90,8 @@ public class BlockReportSpamDialogs {
void onClick();
}
- /** Contains the common attributes between all block/unblock/report dialog fragments. */
- private static class CommonDialogsFragment extends DialogFragment {
+ /** Contains the common attributes between all block/unblock/report spam dialog fragments. */
+ private abstract static class CommonDialogsFragment extends DialogFragment {
/** The number to display in the dialog title. */
protected String displayNumber;
@@ -133,7 +125,7 @@ public class BlockReportSpamDialogs {
public static class BlockReportSpamDialogFragment extends CommonDialogsFragment {
/** Called when dialog positive button is pressed. */
- private OnSpamDialogClickListener positiveListener;
+ private OnSpamDialogClickListener onSpamDialogClickListener;
/** Whether the mark as spam checkbox is checked before displaying the dialog. */
private boolean spamChecked;
@@ -141,12 +133,12 @@ public class BlockReportSpamDialogs {
public static DialogFragment newInstance(
String displayNumber,
boolean spamChecked,
- OnSpamDialogClickListener positiveListener,
+ OnSpamDialogClickListener onSpamDialogClickListener,
@Nullable DialogInterface.OnDismissListener dismissListener) {
BlockReportSpamDialogFragment fragment = new BlockReportSpamDialogFragment();
fragment.spamChecked = spamChecked;
fragment.displayNumber = displayNumber;
- fragment.positiveListener = positiveListener;
+ fragment.onSpamDialogClickListener = onSpamDialogClickListener;
fragment.dismissListener = dismissListener;
return fragment;
}
@@ -159,34 +151,25 @@ public class BlockReportSpamDialogs {
(CheckBox) dialogView.findViewById(R.id.report_number_as_spam_action);
// Listen for changes on the checkbox and update if orientation changes
isSpamCheckbox.setChecked(spamChecked);
- isSpamCheckbox.setOnCheckedChangeListener(
- new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- spamChecked = isChecked;
- }
- });
+ isSpamCheckbox.setOnCheckedChangeListener((buttonView, isChecked) -> spamChecked = isChecked);
TextView details = (TextView) dialogView.findViewById(R.id.block_details);
details.setText(getBlockMessage(getContext()));
AlertDialog.Builder alertDialogBuilder = createDialogBuilder(getActivity(), this);
- Dialog dialog =
+ Dialog blockReportSpamDialog =
alertDialogBuilder
.setView(dialogView)
.setTitle(getString(R.string.block_report_number_alert_title, displayNumber))
.setPositiveButton(
R.string.block_number_ok,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dismiss();
- positiveListener.onClick(isSpamCheckbox.isChecked());
- }
+ (dialog, which) -> {
+ dismiss();
+ onSpamDialogClickListener.onClick(isSpamCheckbox.isChecked());
})
.create();
- dialog.setCanceledOnTouchOutside(true);
- return dialog;
+ blockReportSpamDialog.setCanceledOnTouchOutside(true);
+ return blockReportSpamDialog;
}
}
diff --git a/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogNotifier.java b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogNotifier.java
new file mode 100644
index 000000000..fd6a807cc
--- /dev/null
+++ b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogNotifier.java
@@ -0,0 +1,76 @@
+/*
+ * 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.content.Context;
+import android.content.Intent;
+import android.support.v4.content.LocalBroadcastManager;
+import com.android.dialer.common.LogUtil;
+
+/**
+ * Notifies that a dialog for blocking a number and/or marking it as spam/not spam should be shown.
+ */
+public final class ShowBlockReportSpamDialogNotifier {
+
+ private ShowBlockReportSpamDialogNotifier() {}
+
+ /**
+ * Notifies that a dialog for blocking a number and optionally report it as spam should be shown.
+ *
+ * @param context Context
+ * @param normalizedNumber The number to be blocked/marked as spam
+ * @param countryIso The ISO 3166-1 two letters country code for the number
+ * @param callType Call type defined in {@link android.provider.CallLog.Calls}
+ */
+ public static void notifyShowDialogToBlockNumberAndOptionallyReportSpam(
+ Context context, String normalizedNumber, String countryIso, int callType) {
+ LogUtil.enterBlock(
+ "ShowBlockReportSpamDialogNotifier.notifyShowDialogToBlockNumberAndOptionallyReportSpam");
+
+ Intent intent = new Intent();
+ intent.setAction(
+ ShowBlockReportSpamDialogReceiver
+ .ACTION_SHOW_DIALOG_TO_BLOCK_NUMBER_AND_OPTIONALLY_REPORT_SPAM);
+
+ intent.putExtra(ShowBlockReportSpamDialogReceiver.EXTRA_NUMBER, normalizedNumber);
+ intent.putExtra(ShowBlockReportSpamDialogReceiver.EXTRA_COUNTRY_ISO, countryIso);
+ intent.putExtra(ShowBlockReportSpamDialogReceiver.EXTRA_CALL_TYPE, callType);
+
+ LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
+ }
+
+ /**
+ * Notifies that a dialog for reporting a number as not spam should be shown.
+ *
+ * @param context Context
+ * @param normalizedNumber The number to be reported as not spam
+ * @param countryIso The ISO 3166-1 two letters country code for the number
+ * @param callType Call type defined in {@link android.provider.CallLog.Calls}
+ */
+ public static void notifyShowDialogToReportNotSpam(
+ Context context, String normalizedNumber, String countryIso, int callType) {
+ LogUtil.enterBlock("ShowBlockReportSpamDialogNotifier.notifyShowDialogToReportNotSpam");
+
+ Intent intent = new Intent();
+ intent.setAction(ShowBlockReportSpamDialogReceiver.ACTION_SHOW_DIALOG_TO_REPORT_NOT_SPAM);
+ intent.putExtra(ShowBlockReportSpamDialogReceiver.EXTRA_NUMBER, normalizedNumber);
+ intent.putExtra(ShowBlockReportSpamDialogReceiver.EXTRA_COUNTRY_ISO, countryIso);
+ intent.putExtra(ShowBlockReportSpamDialogReceiver.EXTRA_CALL_TYPE, callType);
+
+ LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
+ }
+}
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);
+ }
+}
diff --git a/java/com/android/dialer/blocking/res/layout/block_report_spam_dialog.xml b/java/com/android/dialer/blockreportspam/res/layout/block_report_spam_dialog.xml
index 82e8d80b3..82e8d80b3 100644
--- a/java/com/android/dialer/blocking/res/layout/block_report_spam_dialog.xml
+++ b/java/com/android/dialer/blockreportspam/res/layout/block_report_spam_dialog.xml
diff --git a/java/com/android/dialer/blockreportspam/res/values/colors.xml b/java/com/android/dialer/blockreportspam/res/values/colors.xml
new file mode 100644
index 000000000..5fa45eba3
--- /dev/null
+++ b/java/com/android/dialer/blockreportspam/res/values/colors.xml
@@ -0,0 +1,21 @@
+<!--
+ ~ Copyright (C) 2012 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
+-->
+<resources>
+
+ <!-- 87% black -->
+ <color name="block_report_spam_primary_text_color">#de000000</color>
+
+</resources>
diff --git a/java/com/android/dialer/blocking/res/values/dimens.xml b/java/com/android/dialer/blockreportspam/res/values/dimens.xml
index cd7cfe2fd..cd7cfe2fd 100644
--- a/java/com/android/dialer/blocking/res/values/dimens.xml
+++ b/java/com/android/dialer/blockreportspam/res/values/dimens.xml
diff --git a/java/com/android/dialer/blockreportspam/res/values/strings.xml b/java/com/android/dialer/blockreportspam/res/values/strings.xml
new file mode 100644
index 000000000..e803a162f
--- /dev/null
+++ b/java/com/android/dialer/blockreportspam/res/values/strings.xml
@@ -0,0 +1,63 @@
+<!--
+ ~ Copyright (C) 2016 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
+ -->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+ <!-- Confirmation dialog title for blocking a number. [CHAR LIMIT=NONE] -->
+ <string name="block_number_confirmation_title">
+ Block<xliff:g example="(555) 555-5555" id="number">%1$s</xliff:g>?
+ </string>
+
+ <!-- Confirmation dialog message for blocking a number with new filtering enabled.
+ [CHAR LIMIT=NONE] -->
+ <string name="block_number_confirmation_message_new_filtering">
+ You will no longer receive calls or texts from this number.
+ </string>
+
+ <!-- Block number alert dialog button [CHAR LIMIT=32] -->
+ <string name="block_number_ok">BLOCK</string>
+
+ <!-- Unblock number alert dialog button [CHAR LIMIT=32] -->
+ <string name="unblock_number_ok">UNBLOCK</string>
+
+ <!-- Title of alert dialog after clicking on Block/report as spam. [CHAR LIMIT=100] -->
+ <string name="block_report_number_alert_title">Block <xliff:g id="number">%1$s</xliff:g>?</string>
+
+ <!-- Text in alert dialog after clicking on Block/report as spam. [CHAR LIMIT=100] -->
+ <string name="block_report_number_alert_details">You will no longer receive calls from this number.</string>
+
+ <!-- Text in alert dialog after clicking on Block. [CHAR LIMIT=100] -->
+ <string name="block_number_alert_details"><xliff:g id="text">%1$s</xliff:g> This call will be reported as spam.</string>
+
+ <!-- Text in alert dialog after clicking on Unblock. [CHAR LIMIT=100] -->
+ <string name="unblock_number_alert_details">This number will be unblocked and reported as not spam. Future calls won\'t be identified as spam.</string>
+
+ <!-- Title of alert dialog after clicking on Unblock. [CHAR LIMIT=100] -->
+ <string name="unblock_report_number_alert_title">Unblock <xliff:g id="number">%1$s</xliff:g>?</string>
+
+ <!-- Report not spam number alert dialog button [CHAR LIMIT=32] -->
+ <string name="report_not_spam_alert_button">Report</string>
+
+ <!-- Title of alert dialog after clicking on Report as not spam. [CHAR LIMIT=100] -->
+ <string name="report_not_spam_alert_title">Report a mistake?</string>
+
+ <!-- Text in alert dialog after clicking on Report as not spam. [CHAR LIMIT=100] -->
+ <string name="report_not_spam_alert_details">Future calls from <xliff:g id="number">%1$s</xliff:g> will no longer be identified as spam.</string>
+
+ <!-- Label for checkbox in the Alert dialog to allow the user to report the number as spam as well. [CHAR LIMIT=30] -->
+ <string name="checkbox_report_as_spam_action">Report call as spam</string>
+
+</resources>
diff --git a/java/com/android/dialer/calllog/ui/menu/Modules.java b/java/com/android/dialer/calllog/ui/menu/Modules.java
index a13f2e333..48de03e60 100644
--- a/java/com/android/dialer/calllog/ui/menu/Modules.java
+++ b/java/com/android/dialer/calllog/ui/menu/Modules.java
@@ -75,7 +75,9 @@ final class Modules {
SharedModules.addModulesHandlingBlockedOrSpamNumber(
context,
modules,
- normalizedNumber,
+ row.number().getNormalizedNumber(),
+ row.number().getCountryIso(),
+ row.callType(),
row.numberAttributes().getIsBlocked(),
row.numberAttributes().getIsSpam());
SharedModules.maybeAddModuleForCopyingNumber(context, modules, normalizedNumber);
diff --git a/java/com/android/dialer/contactactions/SharedModules.java b/java/com/android/dialer/contactactions/SharedModules.java
index 6d97fcb61..0689f98fc 100644
--- a/java/com/android/dialer/contactactions/SharedModules.java
+++ b/java/com/android/dialer/contactactions/SharedModules.java
@@ -24,6 +24,7 @@ import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.widget.Toast;
import com.android.dialer.DialerPhoneNumber;
+import com.android.dialer.blockreportspam.ShowBlockReportSpamDialogNotifier;
import com.android.dialer.clipboard.ClipboardUtils;
import com.android.dialer.util.IntentUtil;
import com.android.dialer.util.UriUtils;
@@ -38,7 +39,7 @@ public class SharedModules {
public static void maybeAddModuleForAddingToContacts(
Context context,
List<ContactActionModule> modules,
- DialerPhoneNumber number,
+ DialerPhoneNumber dialerPhoneNumber,
String name,
String lookupUri,
boolean isBlocked,
@@ -54,7 +55,7 @@ public class SharedModules {
}
// Skip showing the menu item if there is no number.
- String normalizedNumber = number.getNormalizedNumber();
+ String normalizedNumber = dialerPhoneNumber.getNormalizedNumber();
if (TextUtils.isEmpty(normalizedNumber)) {
return;
}
@@ -111,17 +112,26 @@ public class SharedModules {
}
}
+ /**
+ * Add modules related to blocking/unblocking a number and/or reporting it as spam/not spam.
+ *
+ * @param normalizedNumber The number to be blocked / unblocked / marked as spam/not spam
+ * @param countryIso The ISO 3166-1 two letters country code for the number
+ * @param callType Call type defined in {@link android.provider.CallLog.Calls}
+ */
public static void addModulesHandlingBlockedOrSpamNumber(
Context context,
List<ContactActionModule> modules,
String normalizedNumber,
+ String countryIso,
+ int callType,
boolean isBlocked,
boolean isSpam) {
// For a spam number, add two options:
// (1) "Not spam" and "Block", or
// (2) "Not spam" and "Unblock".
if (isSpam) {
- addModuleForMarkingNumberAsNonSpam(context, modules, normalizedNumber);
+ addModuleForMarkingNumberAsNonSpam(context, modules, normalizedNumber, countryIso, callType);
addModuleForBlockingOrUnblockingNumber(context, modules, normalizedNumber, isBlocked);
return;
}
@@ -133,11 +143,23 @@ public class SharedModules {
}
// For a number that is neither a spam number nor blocked, add "Block/Report spam" option.
- addModuleForBlockingNumberAndOptionallyReportingSpam(context, modules, normalizedNumber);
+ addModuleForBlockingNumberAndOptionallyReportingSpam(
+ context, modules, normalizedNumber, countryIso, callType);
}
+ /**
+ * Add "Not spam" module.
+ *
+ * @param normalizedNumber The number to be marked as not spam
+ * @param countryIso The ISO 3166-1 two letters country code for the number
+ * @param callType Call type defined in {@link android.provider.CallLog.Calls}
+ */
private static void addModuleForMarkingNumberAsNonSpam(
- Context context, List<ContactActionModule> modules, String normalizedNumber) {
+ Context context,
+ List<ContactActionModule> modules,
+ String normalizedNumber,
+ String countryIso,
+ int callType) {
modules.add(
new ContactActionModule() {
@Override
@@ -152,12 +174,8 @@ public class SharedModules {
@Override
public boolean onClick() {
- // TODO(a bug): implement this method.
- Toast.makeText(
- context,
- String.format(Locale.ENGLISH, "TODO: Report %s as non-spam", normalizedNumber),
- Toast.LENGTH_SHORT)
- .show();
+ ShowBlockReportSpamDialogNotifier.notifyShowDialogToReportNotSpam(
+ context, normalizedNumber, countryIso, callType);
return true; // Close the bottom sheet.
}
});
@@ -198,8 +216,19 @@ public class SharedModules {
});
}
+ /**
+ * Add "Block/Report spam" module
+ *
+ * @param normalizedNumber The number to be blocked / unblocked / marked as spam/not spam
+ * @param countryIso The ISO 3166-1 two letters country code for the number
+ * @param callType Call type defined in {@link android.provider.CallLog.Calls}
+ */
private static void addModuleForBlockingNumberAndOptionallyReportingSpam(
- Context context, List<ContactActionModule> modules, String normalizedNumber) {
+ Context context,
+ List<ContactActionModule> modules,
+ String normalizedNumber,
+ String countryIso,
+ int callType) {
modules.add(
new ContactActionModule() {
@Override
@@ -214,15 +243,8 @@ public class SharedModules {
@Override
public boolean onClick() {
- // TODO(a bug): implement this method.
- Toast.makeText(
- context,
- String.format(
- Locale.ENGLISH,
- "TODO: Block and optionally report as spam %s.",
- normalizedNumber),
- Toast.LENGTH_SHORT)
- .show();
+ ShowBlockReportSpamDialogNotifier.notifyShowDialogToBlockNumberAndOptionallyReportSpam(
+ context, normalizedNumber, countryIso, callType);
return true; // Close the bottom sheet.
}
});
diff --git a/java/com/android/dialer/main/MainActivityPeer.java b/java/com/android/dialer/main/MainActivityPeer.java
index 9c5627be8..31af9adbd 100644
--- a/java/com/android/dialer/main/MainActivityPeer.java
+++ b/java/com/android/dialer/main/MainActivityPeer.java
@@ -28,6 +28,8 @@ public interface MainActivityPeer {
void onUserLeaveHint();
+ void onActivityPause();
+
void onActivityStop();
void onActivityDestroyed();
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 1646becf4..fbcbeff38 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -99,6 +99,12 @@ public class MainActivity extends TransactionSafeActivity
}
@Override
+ protected void onPause() {
+ super.onPause();
+ activePeer.onActivityPause();
+ }
+
+ @Override
protected void onStop() {
super.onStop();
activePeer.onActivityStop();
diff --git a/java/com/android/dialer/main/impl/NewMainActivityPeer.java b/java/com/android/dialer/main/impl/NewMainActivityPeer.java
index 6f5c18623..081559a2b 100644
--- a/java/com/android/dialer/main/impl/NewMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/NewMainActivityPeer.java
@@ -22,6 +22,8 @@ import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
+import android.support.v4.content.LocalBroadcastManager;
+import com.android.dialer.blockreportspam.ShowBlockReportSpamDialogReceiver;
import com.android.dialer.calllog.CallLogComponent;
import com.android.dialer.calllog.ui.NewCallLogFragment;
import com.android.dialer.common.concurrent.DefaultFutureCallback;
@@ -37,9 +39,12 @@ import com.google.common.util.concurrent.MoreExecutors;
public class NewMainActivityPeer implements MainActivityPeer {
private final MainActivity mainActivity;
+ private final ShowBlockReportSpamDialogReceiver showBlockReportSpamDialogReceiver;
public NewMainActivityPeer(MainActivity mainActivity) {
this.mainActivity = mainActivity;
+ this.showBlockReportSpamDialogReceiver =
+ new ShowBlockReportSpamDialogReceiver(mainActivity.getFragmentManager());
}
@Override
@@ -54,12 +59,22 @@ public class NewMainActivityPeer implements MainActivityPeer {
}
@Override
- public void onActivityResume() {}
+ public void onActivityResume() {
+ LocalBroadcastManager.getInstance(mainActivity)
+ .registerReceiver(
+ showBlockReportSpamDialogReceiver, ShowBlockReportSpamDialogReceiver.getIntentFilter());
+ }
@Override
public void onUserLeaveHint() {}
@Override
+ public void onActivityPause() {
+ LocalBroadcastManager.getInstance(mainActivity)
+ .unregisterReceiver(showBlockReportSpamDialogReceiver);
+ }
+
+ @Override
public void onActivityStop() {}
@Override
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index cdbab5cc1..9ceea28bf 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -398,6 +398,9 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen
}
@Override
+ public void onActivityPause() {}
+
+ @Override
public void onActivityStop() {
lastTabController.onActivityStop();
callLogFragmentListener.onActivityStop(
diff --git a/java/com/android/dialer/voicemail/listui/menu/Modules.java b/java/com/android/dialer/voicemail/listui/menu/Modules.java
index 7254ad651..84921bd65 100644
--- a/java/com/android/dialer/voicemail/listui/menu/Modules.java
+++ b/java/com/android/dialer/voicemail/listui/menu/Modules.java
@@ -56,7 +56,9 @@ final class Modules {
SharedModules.addModulesHandlingBlockedOrSpamNumber(
context,
modules,
- normalizedNumber,
+ voicemailEntry.number().getNormalizedNumber(),
+ voicemailEntry.number().getCountryIso(),
+ voicemailEntry.callType(),
voicemailEntry.numberAttributes().getIsBlocked(),
voicemailEntry.numberAttributes().getIsSpam());
diff --git a/java/com/android/incallui/spam/SpamNotificationActivity.java b/java/com/android/incallui/spam/SpamNotificationActivity.java
index f6da2a3b0..6ba7c30f8 100644
--- a/java/com/android/incallui/spam/SpamNotificationActivity.java
+++ b/java/com/android/incallui/spam/SpamNotificationActivity.java
@@ -28,10 +28,10 @@ import android.provider.ContactsContract;
import android.support.v4.app.FragmentActivity;
import android.telephony.PhoneNumberUtils;
import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.dialer.blocking.BlockReportSpamDialogs;
import com.android.dialer.blocking.BlockedNumbersMigrator;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.blocking.FilteredNumberCompat;
+import com.android.dialer.blockreportspam.BlockReportSpamDialogs;
import com.android.dialer.common.LogUtil;
import com.android.dialer.location.GeoUtil;
import com.android.dialer.logging.ContactLookupResult;