summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java')
-rw-r--r--java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java62
1 files changed, 40 insertions, 22 deletions
diff --git a/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java b/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java
index 4100521ab..a81d8665a 100644
--- a/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java
+++ b/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java
@@ -23,15 +23,15 @@ import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Build.VERSION_CODES;
-import android.preference.PreferenceManager;
+import android.support.annotation.VisibleForTesting;
import android.support.v4.os.BuildCompat;
-import android.support.v4.os.UserManagerCompat;
import android.telecom.PhoneAccountHandle;
import android.telephony.TelephonyManager;
import com.android.dialer.app.calllog.LegacyVoicemailNotifier;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.PerAccountSharedPreferences;
+import com.android.dialer.util.DialerUtils;
import com.android.voicemail.VoicemailComponent;
/**
@@ -43,15 +43,14 @@ import com.android.voicemail.VoicemailComponent;
public class LegacyVoicemailNotificationReceiver extends BroadcastReceiver {
private static final String LEGACY_VOICEMAIL_COUNT = "legacy_voicemail_count";
+ @VisibleForTesting static final String LEGACY_VOICEMAIL_DISMISSED = "legacy_voicemail_dismissed";
/**
- * Hidden extra for {@link TelephonyManager#ACTION_SHOW_VOICEMAIL_NOTIFICATION} for whether the
- * notification is just a refresh or for a new voicemail. The phone should not play a ringtone or
- * vibrate during a refresh if the notification is already showing.
- *
- * <p>TODO(b/62202833): make public
+ * Whether the notification is just a refresh or for a new voicemail. The phone should not play a
+ * ringtone or vibrate during a refresh if the notification is already showing. This is Hidden in
+ * O and public in O MR1.
*/
- private static final String EXTRA_IS_REFRESH = "is_refresh";
+ @VisibleForTesting static final String EXTRA_IS_REFRESH = "is_refresh";
@Override
public void onReceive(Context context, Intent intent) {
@@ -72,8 +71,21 @@ public class LegacyVoicemailNotificationReceiver extends BroadcastReceiver {
PhoneAccountHandle phoneAccountHandle =
Assert.isNotNull(intent.getParcelableExtra(TelephonyManager.EXTRA_PHONE_ACCOUNT_HANDLE));
int count = intent.getIntExtra(TelephonyManager.EXTRA_NOTIFICATION_COUNT, -1);
+ boolean isRefresh = intent.getBooleanExtra(EXTRA_IS_REFRESH, false);
+ LogUtil.i("LegacyVoicemailNotificationReceiver.onReceive", "isRefresh: " + isRefresh);
+ PerAccountSharedPreferences preferences = getSharedPreferences(context, phoneAccountHandle);
+ if (isRefresh) {
+ if (preferences.getBoolean(LEGACY_VOICEMAIL_DISMISSED, false)) {
+ LogUtil.i(
+ "LegacyVoicemailNotificationReceiver.onReceive",
+ "notification dismissed, ignoring refresh");
+ return;
+ }
+ } else {
+ setDismissed(context, phoneAccountHandle, false);
+ }
- if (!hasVoicemailCountChanged(context, phoneAccountHandle, count)) {
+ if (!hasVoicemailCountChanged(preferences, count)) {
LogUtil.i(
"LegacyVoicemailNotificationReceiver.onReceive",
"voicemail count hasn't changed, ignoring");
@@ -116,27 +128,24 @@ public class LegacyVoicemailNotificationReceiver extends BroadcastReceiver {
voicemailNumber,
callVoicemailIntent,
voicemailSettingIntent,
- intent.getBooleanExtra(EXTRA_IS_REFRESH, false));
+ isRefresh);
}
- private static boolean hasVoicemailCountChanged(
- Context context, PhoneAccountHandle phoneAccountHandle, int newCount) {
- // Need credential encrypted storage to access preferences.
- if (!UserManagerCompat.isUserUnlocked(context)) {
- LogUtil.i(
- "LegacyVoicemailNotificationReceiver.onReceive",
- "User locked, bypassing voicemail count check");
- return true;
- }
+ public static void setDismissed(
+ Context context, PhoneAccountHandle phoneAccountHandle, boolean dismissed) {
+ getSharedPreferences(context, phoneAccountHandle)
+ .edit()
+ .putBoolean(LEGACY_VOICEMAIL_DISMISSED, dismissed)
+ .apply();
+ }
+ private static boolean hasVoicemailCountChanged(
+ PerAccountSharedPreferences preferences, int newCount) {
if (newCount == -1) {
// Carrier does not report voicemail count
return true;
}
- PerAccountSharedPreferences preferences =
- new PerAccountSharedPreferences(
- context, phoneAccountHandle, PreferenceManager.getDefaultSharedPreferences(context));
// Carriers may send multiple notifications for the same voicemail.
if (newCount != 0 && newCount == preferences.getInt(LEGACY_VOICEMAIL_COUNT, -1)) {
return false;
@@ -144,4 +153,13 @@ public class LegacyVoicemailNotificationReceiver extends BroadcastReceiver {
preferences.edit().putInt(LEGACY_VOICEMAIL_COUNT, newCount).apply();
return true;
}
+
+ @VisibleForTesting
+ static PerAccountSharedPreferences getSharedPreferences(
+ Context context, PhoneAccountHandle phoneAccountHandle) {
+ return new PerAccountSharedPreferences(
+ context,
+ phoneAccountHandle,
+ DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context));
+ }
}