diff options
Diffstat (limited to 'java/com/android/voicemail/impl/sync')
3 files changed, 59 insertions, 9 deletions
diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java index ef6f6322c..b2ec49e9f 100644 --- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java +++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java @@ -35,7 +35,7 @@ public class OmtpVvmSyncReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) { - // ACTION_SYNC_VOICEMAIL is available pre-O + // ACTION_SYNC_VOICEMAIL is available pre-O, ignore if received. return; } diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java index 25325eeb7..83a3960dd 100644 --- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java +++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java @@ -24,9 +24,9 @@ import android.support.v4.os.BuildCompat; import android.telecom.PhoneAccountHandle; import android.text.TextUtils; import android.util.ArrayMap; -import com.android.dialer.common.ConfigProviderBindings; import com.android.dialer.logging.Logger; import com.android.dialer.logging.nano.DialerImpression; +import com.android.voicemail.VoicemailComponent; import com.android.voicemail.impl.ActivationTask; import com.android.voicemail.impl.Assert; import com.android.voicemail.impl.OmtpEvents; @@ -153,9 +153,7 @@ public class OmtpVvmSyncService { private void autoDeleteAndArchiveVM( ImapHelper imapHelper, PhoneAccountHandle phoneAccountHandle) { - if (ConfigProviderBindings.get(mContext) - .getBoolean(VisualVoicemailSettingsUtil.ALLOW_VOICEMAIL_ARCHIVE, true) - && isArchiveEnabled(mContext, phoneAccountHandle)) { + if (isArchiveAllowedAndEnabled(mContext, phoneAccountHandle)) { if ((float) imapHelper.getOccuupiedQuota() / (float) imapHelper.getTotalQuota() > AUTO_DELETE_ARCHIVE_VM_THRESHOLD) { deleteAndArchiveVM(imapHelper); @@ -166,14 +164,29 @@ public class OmtpVvmSyncService { VvmLog.i(TAG, "no need to archive and auto delete VM, quota below threshold"); } } else { - VvmLog.i(TAG, "autoDeleteAndArchiveVM is turned off"); + VvmLog.i(TAG, "isArchiveAllowedAndEnabled is false"); Logger.get(mContext).logImpression(DialerImpression.Type.VVM_ARCHIVE_AUTO_DELETE_TURNED_OFF); } } - private static boolean isArchiveEnabled(Context context, PhoneAccountHandle phoneAccountHandle) { - return VisualVoicemailSettingsUtil.isArchiveEnabled(context, phoneAccountHandle) - && VisualVoicemailSettingsUtil.isEnabled(context, phoneAccountHandle); + private static boolean isArchiveAllowedAndEnabled( + Context context, PhoneAccountHandle phoneAccountHandle) { + + if (!VoicemailComponent.get(context) + .getVoicemailClient() + .isVoicemailArchiveAvailable(context)) { + VvmLog.i("isArchiveAllowedAndEnabled", "voicemail archive is not available"); + return false; + } + if (!VisualVoicemailSettingsUtil.isArchiveEnabled(context, phoneAccountHandle)) { + VvmLog.i("isArchiveAllowedAndEnabled", "voicemail archive is turned off"); + return false; + } + if (!VisualVoicemailSettingsUtil.isEnabled(context, phoneAccountHandle)) { + VvmLog.i("isArchiveAllowedAndEnabled", "voicemail is turned off"); + return false; + } + return true; } private void deleteAndArchiveVM(ImapHelper imapHelper) { diff --git a/java/com/android/voicemail/impl/sync/VvmAccountManager.java b/java/com/android/voicemail/impl/sync/VvmAccountManager.java index 05f649450..cc4e31fe3 100644 --- a/java/com/android/voicemail/impl/sync/VvmAccountManager.java +++ b/java/com/android/voicemail/impl/sync/VvmAccountManager.java @@ -16,16 +16,20 @@ package com.android.voicemail.impl.sync; import android.content.Context; +import android.support.annotation.MainThread; import android.support.annotation.NonNull; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; +import android.util.ArraySet; import com.android.dialer.common.Assert; +import com.android.dialer.common.concurrent.ThreadUtil; import com.android.voicemail.impl.OmtpConstants; import com.android.voicemail.impl.VisualVoicemailPreferences; import com.android.voicemail.impl.VoicemailStatus; import com.android.voicemail.impl.sms.StatusMessage; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * Tracks the activation state of a visual voicemail phone account. An account is considered @@ -39,13 +43,28 @@ import java.util.List; public class VvmAccountManager { public static final String TAG = "VvmAccountManager"; + /** Listener for activation state changes. Will be called on the main thread. */ + public interface Listener { + @MainThread + void onActivationStateChanged(PhoneAccountHandle phoneAccountHandle, boolean isActivated); + } + private static final String IS_ACCOUNT_ACTIVATED = "is_account_activated"; + private static Set<Listener> listeners = new ArraySet<>(); + public static void addAccount( Context context, PhoneAccountHandle phoneAccountHandle, StatusMessage statusMessage) { VisualVoicemailPreferences preferences = new VisualVoicemailPreferences(context, phoneAccountHandle); statusMessage.putStatus(preferences.edit()).putBoolean(IS_ACCOUNT_ACTIVATED, true).apply(); + + ThreadUtil.postOnUiThread( + () -> { + for (Listener listener : listeners) { + listener.onActivationStateChanged(phoneAccountHandle, true); + } + }); } public static void removeAccount(Context context, PhoneAccountHandle phoneAccount) { @@ -57,6 +76,12 @@ public class VvmAccountManager { .putString(OmtpConstants.IMAP_USER_NAME, null) .putString(OmtpConstants.IMAP_PASSWORD, null) .apply(); + ThreadUtil.postOnUiThread( + () -> { + for (Listener listener : listeners) { + listener.onActivationStateChanged(phoneAccount, false); + } + }); } public static boolean isAccountActivated(Context context, PhoneAccountHandle phoneAccount) { @@ -76,4 +101,16 @@ public class VvmAccountManager { } return results; } + + @MainThread + public static void addListener(Listener listener) { + Assert.isMainThread(); + listeners.add(listener); + } + + @MainThread + public static void removeListener(Listener listener) { + Assert.isMainThread(); + listeners.remove(listener); + } } |