diff options
Diffstat (limited to 'java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java')
-rw-r--r-- | java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java | 184 |
1 files changed, 101 insertions, 83 deletions
diff --git a/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java b/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java index b56d568b7..2b19bd7bb 100644 --- a/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java +++ b/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java @@ -22,7 +22,6 @@ 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; @@ -136,92 +135,122 @@ public class OmtpVoicemailMessageCreator { Context context, VoicemailStatus status, VoicemailStatusReader statusReader) { if (status.quotaOccupied != Status.QUOTA_UNAVAILABLE && status.quotaTotal != Status.QUOTA_UNAVAILABLE) { + return createInboxErrorMessage(context, status, statusReader); + } + Logger.get(context).logImpression(DialerImpression.Type.VVM_QUOTA_CHECK_UNAVAILABLE); + return null; + } - PhoneAccountHandle phoneAccountHandle = status.getPhoneAccountHandle(); + @Nullable + private static VoicemailErrorMessage createInboxErrorMessage( + Context context, VoicemailStatus status, VoicemailStatusReader statusReader) { - VoicemailClient voicemailClient = VoicemailComponent.get(context).getVoicemailClient(); + float voicemailOccupiedFraction = (float) status.quotaOccupied / (float) status.quotaTotal; - PerAccountSharedPreferences sharedPreferenceForAccount = - new PerAccountSharedPreferences( - context, phoneAccountHandle, PreferenceManager.getDefaultSharedPreferences(context)); + if (voicemailOccupiedFraction < QUOTA_NEAR_FULL_THRESHOLD) { + return null; + } - boolean isVoicemailArchiveEnabled = - VoicemailComponent.get(context) - .getVoicemailClient() - .isVoicemailArchiveEnabled(context, phoneAccountHandle); + boolean isFull = voicemailOccupiedFraction >= QUOTA_FULL_THRESHOLD; - if ((float) status.quotaOccupied / (float) status.quotaTotal >= QUOTA_FULL_THRESHOLD) { - return createInboxErrorMessage( - context, - status, - status.getPhoneAccountHandle(), - statusReader, - sharedPreferenceForAccount, - voicemailClient, - isVoicemailArchiveEnabled, - context.getString(R.string.voicemail_error_inbox_full_turn_archive_on_title), - context.getText(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), - VOICEMAIL_PROMO_DISMISSED_KEY); - } + PhoneAccountHandle phoneAccountHandle = status.getPhoneAccountHandle(); - if ((float) status.quotaOccupied / (float) status.quotaTotal >= QUOTA_NEAR_FULL_THRESHOLD) { - return createInboxErrorMessage( - context, - status, - status.getPhoneAccountHandle(), - statusReader, - sharedPreferenceForAccount, - voicemailClient, - isVoicemailArchiveEnabled, - context.getString(R.string.voicemail_error_inbox_almost_full_turn_archive_on_title), - context.getText(R.string.voicemail_error_inbox_almost_full_turn_archive_on_message), + PerAccountSharedPreferences sharedPreferenceForAccount = + new PerAccountSharedPreferences( + context, phoneAccountHandle, PreferenceManager.getDefaultSharedPreferences(context)); + + VoicemailClient voicemailClient = VoicemailComponent.get(context).getVoicemailClient(); + + boolean shouldShowPromoForArchive = + !isPromoForArchiveDismissed(sharedPreferenceForAccount, isFull) + && !voicemailClient.isVoicemailArchiveEnabled(context, phoneAccountHandle) + && voicemailClient.isVoicemailArchiveAvailable(context); + + if (!shouldShowPromoForArchive) { + if (isFull) { + Logger.get(context) + .logImpression(DialerImpression.Type.VVM_USER_SHOWN_VM_FULL_ERROR_MESSAGE); + return new VoicemailErrorMessage( + context.getString(R.string.voicemail_error_inbox_full_title), + context.getString(R.string.voicemail_error_inbox_full_message)); + } else { + Logger.get(context) + .logImpression(DialerImpression.Type.VVM_USER_SHOWN_VM_ALMOST_FULL_ERROR_MESSAGE); + return new VoicemailErrorMessage( context.getString(R.string.voicemail_error_inbox_near_full_title), - context.getString(R.string.voicemail_error_inbox_near_full_message), - VOICEMAIL_PROMO_ALMOST_FULL_DISMISSED_KEY); + context.getString(R.string.voicemail_error_inbox_near_full_message)); } } - return null; + + String title; + CharSequence message; + int enabledImpression; + int dismissedImpression; + String dismissedKey; + + if (isFull) { + Logger.get(context).logImpression(DialerImpression.Type.VVM_USER_SHOWN_VM_FULL_PROMO); + title = context.getString(R.string.voicemail_error_inbox_full_turn_archive_on_title); + message = context.getText(R.string.voicemail_error_inbox_full_turn_archive_on_message); + enabledImpression = DialerImpression.Type.VVM_USER_ENABLED_ARCHIVE_FROM_VM_FULL_PROMO; + dismissedImpression = DialerImpression.Type.VVM_USER_DISMISSED_VM_FULL_PROMO; + dismissedKey = VOICEMAIL_PROMO_DISMISSED_KEY; + } else { + Logger.get(context).logImpression(DialerImpression.Type.VVM_USER_SHOWN_VM_ALMOST_FULL_PROMO); + title = context.getString(R.string.voicemail_error_inbox_almost_full_turn_archive_on_title); + message = context.getText(R.string.voicemail_error_inbox_almost_full_turn_archive_on_message); + enabledImpression = DialerImpression.Type.VVM_USER_ENABLED_ARCHIVE_FROM_VM_ALMOST_FULL_PROMO; + dismissedImpression = DialerImpression.Type.VVM_USER_DISMISSED_VM_ALMOST_FULL_PROMO; + dismissedKey = VOICEMAIL_PROMO_ALMOST_FULL_DISMISSED_KEY; + } + + return createVMQuotaPromo( + context, + phoneAccountHandle, + status, + statusReader, + voicemailClient, + sharedPreferenceForAccount, + title, + message, + enabledImpression, + dismissedImpression, + dismissedKey); } - private static VoicemailErrorMessage createInboxErrorMessage( + private static boolean isPromoForArchiveDismissed( + PerAccountSharedPreferences sharedPreferenceForAccount, boolean isFull) { + if (isFull) { + return sharedPreferenceForAccount.getBoolean(VOICEMAIL_PROMO_DISMISSED_KEY, false); + } else { + return sharedPreferenceForAccount.getBoolean( + VOICEMAIL_PROMO_ALMOST_FULL_DISMISSED_KEY, false); + } + } + + private static VoicemailErrorMessage createVMQuotaPromo( Context context, - VoicemailStatus status, PhoneAccountHandle phoneAccountHandle, + VoicemailStatus status, VoicemailStatusReader statusReader, - PerAccountSharedPreferences sharedPreferenceForAccount, VoicemailClient voicemailClient, - boolean isVoicemailArchiveEnabled, - String promoTitle, - CharSequence 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); - } + PerAccountSharedPreferences sharedPreferenceForAccount, + String title, + CharSequence message, + int impressionToLogOnEnable, + int impressionToLogOnDismiss, + String preferenceKeyToUpdate) { + return new VoicemailErrorMessage( + title, + message, + VoicemailErrorMessage.createDismissTurnArchiveOnAction( + context, + impressionToLogOnDismiss, + statusReader, + sharedPreferenceForAccount, + preferenceKeyToUpdate), + VoicemailErrorMessage.createTurnArchiveOnAction( + context, impressionToLogOnEnable, status, voicemailClient, phoneAccountHandle)); } @Nullable @@ -260,15 +289,4 @@ 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); - } - } } |