summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/spam
diff options
context:
space:
mode:
authorAndroid Dialer <noreply@google.com>2018-03-19 18:19:04 -0700
committerCopybara-Service <copybara-piper@google.com>2018-03-19 19:06:46 -0700
commit3e97f65b217c4b9e64c33e083b451ba83f239f6a (patch)
treecd0b7c02d458d96060c9c01e2fd8f685503ea995 /java/com/android/dialer/spam
parent9239dd2e7e62c15002860f90730d3cc63deae179 (diff)
Show spam blocking promo after block spam dialog
Test: SpamBlockingPromoHelperTest PiperOrigin-RevId: 189674918 Change-Id: I0b22eb9b8128125cc5b439674099820a01c3889f
Diffstat (limited to 'java/com/android/dialer/spam')
-rw-r--r--java/com/android/dialer/spam/promo/AndroidManifest.xml19
-rw-r--r--java/com/android/dialer/spam/promo/SpamBlockingPromoDialogFragment.java69
-rw-r--r--java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java117
-rw-r--r--java/com/android/dialer/spam/promo/res/values/strings.xml39
4 files changed, 244 insertions, 0 deletions
diff --git a/java/com/android/dialer/spam/promo/AndroidManifest.xml b/java/com/android/dialer/spam/promo/AndroidManifest.xml
new file mode 100644
index 000000000..7d766b853
--- /dev/null
+++ b/java/com/android/dialer/spam/promo/AndroidManifest.xml
@@ -0,0 +1,19 @@
+<!--
+ ~ 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.spam.promo">
+</manifest>
diff --git a/java/com/android/dialer/spam/promo/SpamBlockingPromoDialogFragment.java b/java/com/android/dialer/spam/promo/SpamBlockingPromoDialogFragment.java
new file mode 100644
index 000000000..0ea17d395
--- /dev/null
+++ b/java/com/android/dialer/spam/promo/SpamBlockingPromoDialogFragment.java
@@ -0,0 +1,69 @@
+/*
+ * 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.spam.promo;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.os.Bundle;
+
+/** Dialog for spam blocking on-boarding promotion. */
+public class SpamBlockingPromoDialogFragment extends DialogFragment {
+
+ public static final String SPAM_BLOCKING_PROMO_DIALOG_TAG = "SpamBlockingPromoDialog";
+
+ /** Called when dialog positive button is pressed. */
+ protected OnEnableListener positiveListener;
+
+ public static DialogFragment newInstance(OnEnableListener positiveListener) {
+ SpamBlockingPromoDialogFragment fragment = new SpamBlockingPromoDialogFragment();
+ fragment.positiveListener = positiveListener;
+ return fragment;
+ }
+
+ @Override
+ public void onPause() {
+ // The dialog is dismissed onPause, i.e. rotation.
+ dismiss();
+ super.onPause();
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ super.onCreateDialog(savedInstanceState);
+ // Return the newly created dialog
+ return new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme)
+ .setCancelable(true)
+ .setTitle(R.string.spam_blocking_promo_title)
+ .setMessage(R.string.spam_blocking_promo_text)
+ .setNegativeButton(
+ R.string.spam_blocking_promo_action_dismiss, (dialog, which) -> dismiss())
+ .setPositiveButton(
+ R.string.spam_blocking_promo_action_filter_spam,
+ (dialog, which) -> {
+ dismiss();
+ positiveListener.onClick();
+ })
+ .create();
+ }
+
+ /** Positive listener for spam blocking promotion dialog. */
+ public interface OnEnableListener {
+ /** Called when user clicks on positive button in the spam blocking promo dialog. */
+ void onClick();
+ }
+}
diff --git a/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java b/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
new file mode 100644
index 000000000..9349577c5
--- /dev/null
+++ b/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
@@ -0,0 +1,117 @@
+/*
+ * 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.spam.promo;
+
+import android.app.FragmentManager;
+import android.content.Context;
+import android.preference.PreferenceManager;
+import android.support.annotation.VisibleForTesting;
+import android.support.design.widget.Snackbar;
+import android.view.View;
+import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
+import com.android.dialer.spam.Spam;
+
+/** Helper class for showing spam blocking on-boarding promotions. */
+public class SpamBlockingPromoHelper {
+
+ static final String SPAM_BLOCKING_PROMO_PERIOD_MILLIS = "spam_blocking_promo_period_millis";
+ static final String SPAM_BLOCKING_PROMO_LAST_SHOW_MILLIS = "spam_blocking_promo_last_show_millis";
+
+ private final Context context;
+ private final Spam spam;
+
+ public SpamBlockingPromoHelper(Context context, Spam spam) {
+ this.context = context;
+ this.spam = spam;
+ }
+
+ /** Shows a spam blocking promo dialog with on complete snackbar if all the prerequisites meet. */
+ public void showSpamBlockingPromoDialog(View view, FragmentManager fragmentManager) {
+ if (!shouldShowSpamBlockingPromo()) {
+ return;
+ }
+
+ updateLastShowSpamTimestamp();
+ Logger.get(context).logImpression(DialerImpression.Type.SPAM_BLOCKING_CALL_LOG_PROMO_SHOWN);
+ SpamBlockingPromoDialogFragment.newInstance(
+ () -> {
+ Logger.get(context)
+ .logImpression(
+ DialerImpression.Type.SPAM_BLOCKING_ENABLED_THROUGH_CALL_LOG_PROMO);
+ spam.modifySpamBlockingSetting(
+ true, success -> showModifySettingOnCompleteSnackbar(view, success));
+ })
+ .show(fragmentManager, SpamBlockingPromoDialogFragment.SPAM_BLOCKING_PROMO_DIALOG_TAG);
+ }
+
+ /**
+ * Returns true if we should show a spam blocking promo.
+ *
+ * <p>Should show spam blocking promo only when all of the following criteria meet 1. Spam
+ * blocking setting is available. 2. Spam blocking setting is not yet enabled. 3. Time since last
+ * spam blocking promo exceeds the threshold.
+ *
+ * @return true if we should show a spam blocking promo.
+ */
+ @VisibleForTesting
+ boolean shouldShowSpamBlockingPromo() {
+ if (!spam.isSpamEnabled() || !spam.isSpamBlockingAvailable() || spam.isSpamBlockingEnabled()) {
+ return false;
+ }
+
+ long lastShowMillis =
+ PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext())
+ .getLong(SPAM_BLOCKING_PROMO_LAST_SHOW_MILLIS, 0);
+ long showPeriodMillis =
+ ConfigProviderBindings.get(context)
+ .getLong(SPAM_BLOCKING_PROMO_PERIOD_MILLIS, Long.MAX_VALUE);
+ return lastShowMillis == 0 || System.currentTimeMillis() - lastShowMillis > showPeriodMillis;
+ }
+
+ private void updateLastShowSpamTimestamp() {
+ PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext())
+ .edit()
+ .putLong(SPAM_BLOCKING_PROMO_LAST_SHOW_MILLIS, System.currentTimeMillis())
+ .commit();
+ }
+
+ /**
+ * Shows a modify setting on complete snackbar and a link to redirect to setting page
+ *
+ * @param view the view to attach on-complete notice snackbar
+ * @param success whether the modify setting operation succceeds
+ */
+ private void showModifySettingOnCompleteSnackbar(View view, boolean success) {
+ if (!success) {
+ Logger.get(context)
+ .logImpression(DialerImpression.Type.SPAM_BLOCKING_MODIFY_FAILURE_THROUGH_CALL_LOG_PROMO);
+ }
+ String snackBarText =
+ success
+ ? context.getString(R.string.spam_blocking_settings_enable_complete_text)
+ : context.getString(R.string.spam_blocking_settings_enable_error_text);
+ Snackbar.make(view, snackBarText, Snackbar.LENGTH_LONG)
+ .setAction(
+ R.string.spam_blocking_setting_prompt,
+ v -> context.startActivity(spam.getSpamBlockingSettingIntent(context)))
+ .setActionTextColor(
+ context.getResources().getColor(R.color.dialer_snackbar_action_text_color))
+ .show();
+ }
+}
diff --git a/java/com/android/dialer/spam/promo/res/values/strings.xml b/java/com/android/dialer/spam/promo/res/values/strings.xml
new file mode 100644
index 000000000..bef73812c
--- /dev/null
+++ b/java/com/android/dialer/spam/promo/res/values/strings.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 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>
+ <!-- Title for the spam blocking promo dialog. [CHAR LIMIT=100] -->
+ <string name="spam_blocking_promo_title">Filter suspected spam calls?</string>
+ <!-- Text for the spam blocking promo dialog. [CHAR LIMIT=100] -->
+ <string name="spam_blocking_promo_text">Filtered spam calls will go straight to your voicemail</string>
+ <!-- Label for filter spam dialog action. [CHAR LIMIT=32] -->
+ <string name="spam_blocking_promo_action_filter_spam">Filter Spam</string>
+ <!-- Label for "Dismiss" dialog action. [CHAR LIMIT=32] -->
+ <string name="spam_blocking_promo_action_dismiss">Dismiss</string>
+ <!-- Button text to prompt a user to open spam blocking setting [CHAR LIMIT=NONE] -->
+ <string name="spam_blocking_setting_prompt">Settings</string>
+
+ <!-- Spam blocking error text, shown when error happens during setting enabling. -->
+ <string name="spam_blocking_settings_enable_error_text">Problem turning on spam filtering</string>
+ <!-- Spam blocking error text, shown when error happens during setting disabling. -->
+ <string name="spam_blocking_settings_disable_error_text">Problem turning off spam filtering</string>
+
+ <!-- On complete text shown when spam blocking is enabled successfully. -->
+ <string name="spam_blocking_settings_enable_complete_text">Spam filtering turned on</string>
+ <!-- On complete text shown when spam blocking is disabled successfully. -->
+ <string name="spam_blocking_settings_disable_complete_text">Spam filtering turned off</string>
+</resources>