summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java')
-rw-r--r--java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java113
1 files changed, 105 insertions, 8 deletions
diff --git a/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java b/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java
index e36406d17..190426e6e 100644
--- a/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java
+++ b/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java
@@ -17,10 +17,18 @@
package com.android.dialer.app.voicemail.error;
import android.content.Context;
+import android.preference.PreferenceManager;
import android.provider.VoicemailContract.Status;
import android.support.annotation.Nullable;
+import android.telecom.PhoneAccountHandle;
import com.android.dialer.app.voicemail.error.VoicemailErrorMessage.Action;
+import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.PerAccountSharedPreferences;
+import com.android.dialer.logging.Logger;
+import com.android.dialer.logging.nano.DialerImpression;
+import com.android.voicemail.VoicemailClient;
+import com.android.voicemail.VoicemailComponent;
import java.util.ArrayList;
import java.util.List;
@@ -32,14 +40,18 @@ public class OmtpVoicemailMessageCreator {
private static final float QUOTA_NEAR_FULL_THRESHOLD = 0.9f;
private static final float QUOTA_FULL_THRESHOLD = 0.99f;
+ protected static final String VOICEMAIL_PROMO_DISMISSED_KEY =
+ "voicemail_archive_promo_was_dismissed";
+ protected static final String VOICEMAIL_PROMO_ALMOST_FULL_DISMISSED_KEY =
+ "voicemail_archive_almost_full_promo_was_dismissed";
@Nullable
- public static VoicemailErrorMessage create(Context context, VoicemailStatus status) {
+ public static VoicemailErrorMessage create(
+ Context context, VoicemailStatus status, final VoicemailStatusReader statusReader) {
if (Status.CONFIGURATION_STATE_OK == status.configurationState
&& Status.DATA_CHANNEL_STATE_OK == status.dataChannelState
&& Status.NOTIFICATION_CHANNEL_STATE_OK == status.notificationChannelState) {
-
- return checkQuota(context, status);
+ return checkQuota(context, status, statusReader);
}
// Initial state when the source is activating. Other error might be written into data and
// notification channel during activation.
@@ -120,24 +132,98 @@ public class OmtpVoicemailMessageCreator {
}
@Nullable
- private static VoicemailErrorMessage checkQuota(Context context, VoicemailStatus status) {
+ private static VoicemailErrorMessage checkQuota(
+ Context context, VoicemailStatus status, VoicemailStatusReader statusReader) {
if (status.quotaOccupied != Status.QUOTA_UNAVAILABLE
&& status.quotaTotal != Status.QUOTA_UNAVAILABLE) {
+
+ PhoneAccountHandle phoneAccountHandle = status.getPhoneAccountHandle();
+
+ VoicemailClient voicemailClient = VoicemailComponent.get(context).getVoicemailClient();
+
+ PerAccountSharedPreferences sharedPreferenceForAccount =
+ new PerAccountSharedPreferences(
+ context, phoneAccountHandle, PreferenceManager.getDefaultSharedPreferences(context));
+
+ boolean isVoicemailArchiveEnabled =
+ VoicemailComponent.get(context)
+ .getVoicemailClient()
+ .isVoicemailArchiveEnabled(context, phoneAccountHandle);
+
if ((float) status.quotaOccupied / (float) status.quotaTotal >= QUOTA_FULL_THRESHOLD) {
- return new VoicemailErrorMessage(
+ return createInboxErrorMessage(
+ context,
+ status,
+ status.getPhoneAccountHandle(),
+ statusReader,
+ sharedPreferenceForAccount,
+ voicemailClient,
+ isVoicemailArchiveEnabled,
+ context.getString(R.string.voicemail_error_inbox_full_turn_archive_on_title),
+ context.getString(R.string.voicemail_error_inbox_full_turn_archive_on_message),
context.getString(R.string.voicemail_error_inbox_full_title),
- context.getString(R.string.voicemail_error_inbox_full_message));
+ context.getString(R.string.voicemail_error_inbox_full_message),
+ VOICEMAIL_PROMO_DISMISSED_KEY);
}
if ((float) status.quotaOccupied / (float) status.quotaTotal >= QUOTA_NEAR_FULL_THRESHOLD) {
- return new VoicemailErrorMessage(
+ return createInboxErrorMessage(
+ context,
+ status,
+ status.getPhoneAccountHandle(),
+ statusReader,
+ sharedPreferenceForAccount,
+ voicemailClient,
+ isVoicemailArchiveEnabled,
+ context.getString(R.string.voicemail_error_inbox_almost_full_turn_archive_on_title),
+ context.getString(R.string.voicemail_error_inbox_almost_full_turn_archive_on_message),
context.getString(R.string.voicemail_error_inbox_near_full_title),
- context.getString(R.string.voicemail_error_inbox_near_full_message));
+ context.getString(R.string.voicemail_error_inbox_near_full_message),
+ VOICEMAIL_PROMO_ALMOST_FULL_DISMISSED_KEY);
}
}
return null;
}
+ private static VoicemailErrorMessage createInboxErrorMessage(
+ Context context,
+ VoicemailStatus status,
+ PhoneAccountHandle phoneAccountHandle,
+ VoicemailStatusReader statusReader,
+ PerAccountSharedPreferences sharedPreferenceForAccount,
+ VoicemailClient voicemailClient,
+ boolean isVoicemailArchiveEnabled,
+ String promoTitle,
+ String promoMessage,
+ String nonPromoTitle,
+ String nonPromoMessage,
+ String preferenceKey) {
+
+ boolean wasPromoDismissed = sharedPreferenceForAccount.getBoolean(preferenceKey, false);
+
+ if (!wasPromoDismissed && !isVoicemailArchiveEnabled) {
+ logArchiveImpression(
+ context,
+ preferenceKey,
+ DialerImpression.Type.VVM_USER_SHOWN_VM_ALMOST_FULL_PROMO,
+ DialerImpression.Type.VVM_USER_SHOWN_VM_FULL_PROMO);
+ return new VoicemailErrorMessage(
+ promoTitle,
+ promoMessage,
+ VoicemailErrorMessage.createDismissTurnArchiveOnAction(
+ context, statusReader, sharedPreferenceForAccount, preferenceKey),
+ VoicemailErrorMessage.createTurnArchiveOnAction(
+ context, status, voicemailClient, phoneAccountHandle, preferenceKey));
+ } else {
+ logArchiveImpression(
+ context,
+ preferenceKey,
+ DialerImpression.Type.VVM_USER_SHOWN_VM_ALMOST_FULL_ERROR_MESSAGE,
+ DialerImpression.Type.VVM_USER_SHOWN_VM_FULL_ERROR_MESSAGE);
+ return new VoicemailErrorMessage(nonPromoTitle, nonPromoMessage);
+ }
+ }
+
@Nullable
private static VoicemailErrorMessage createNoSignalMessage(
Context context, VoicemailStatus status) {
@@ -174,4 +260,15 @@ public class OmtpVoicemailMessageCreator {
}
return new VoicemailErrorMessage(title, description, actions);
}
+
+ protected static void logArchiveImpression(
+ Context context, String preference, int vmAlmostFullImpression, int vmFullImpression) {
+ if (preference.equals(VOICEMAIL_PROMO_DISMISSED_KEY)) {
+ Logger.get(context).logImpression(vmAlmostFullImpression);
+ } else if (preference.equals(VOICEMAIL_PROMO_ALMOST_FULL_DISMISSED_KEY)) {
+ Logger.get(context).logImpression(vmFullImpression);
+ } else {
+ throw Assert.createAssertionFailException("Invalid preference key " + preference);
+ }
+ }
}