summaryrefslogtreecommitdiff
path: root/java/com/android/voicemail/impl/sync
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/voicemail/impl/sync')
-rw-r--r--java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java2
-rw-r--r--java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java29
-rw-r--r--java/com/android/voicemail/impl/sync/VvmAccountManager.java37
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);
+ }
}