Loading java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java +3 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import com.android.dialer.common.LogUtil; import com.android.dialer.location.GeoUtil; import com.android.dialer.notification.DialerNotificationManager; import com.android.dialer.notification.NotificationChannelManager; import com.android.dialer.notification.VoicemailChannelUtils; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.telecom.TelecomUtil; import com.android.dialer.theme.base.ThemeComponent; Loading Loading @@ -181,7 +182,8 @@ public final class LegacyVoicemailNotifier { if (context.getSystemService(TelephonyManager.class).getPhoneCount() <= 1) { return NOTIFICATION_TAG; } return NOTIFICATION_TAG_PREFIX + phoneAccountHandle.getId(); return NOTIFICATION_TAG_PREFIX + VoicemailChannelUtils.getHashedPhoneAccountId(phoneAccountHandle.getId()); } private LegacyVoicemailNotifier() {} Loading java/com/android/dialer/notification/VoicemailChannelUtils.java +34 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.dialer.notification; import static java.nio.charset.StandardCharsets.UTF_8; import android.Manifest.permission; import android.annotation.TargetApi; import android.app.NotificationChannel; Loading @@ -38,15 +40,35 @@ import android.util.ArraySet; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.util.PermissionsUtil; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import java.util.Set; /** Utilities for working with voicemail channels. */ @TargetApi(VERSION_CODES.O) /* package */ final class VoicemailChannelUtils { public final class VoicemailChannelUtils { @VisibleForTesting static final String GLOBAL_VOICEMAIL_CHANNEL_ID = "phone_voicemail"; private static final String PER_ACCOUNT_VOICEMAIL_CHANNEL_ID_PREFIX = "phone_voicemail_account_"; private static final char[] hexDigits = "0123456789abcdef".toCharArray(); /** * Returns a String representation of the hashed value of the PhoneAccountHandle's id (the * Sim ICC ID). * In case it fails to hash the id it will return an empty string. */ public static String getHashedPhoneAccountId(@NonNull PhoneAccountHandle handle) { byte[] handleBytes = handle.getId().getBytes(UTF_8); try { byte[] hashedBytes = MessageDigest.getInstance("SHA-256").digest(handleBytes); return byteArrayToHexString(hashedBytes); } catch (NoSuchAlgorithmException e) { LogUtil.e("VoicemailChannelUtils.getHashedPhoneAccountId", "NoSuchAlgorithmException throw! Returning empty string!"); return ""; } } @SuppressWarnings("MissingPermission") // isSingleSimDevice() returns true if no permission static Set<String> getAllChannelIds(@NonNull Context context) { Loading Loading @@ -124,7 +146,17 @@ import java.util.Set; private static String getChannelIdForAccount(@NonNull PhoneAccountHandle handle) { Assert.isNotNull(handle); return PER_ACCOUNT_VOICEMAIL_CHANNEL_ID_PREFIX + ":" + handle.getId(); return PER_ACCOUNT_VOICEMAIL_CHANNEL_ID_PREFIX + ":" + getHashedPhoneAccountId(handle); } private static String byteArrayToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(2 * bytes.length); for (byte b : bytes) { sb.append(hexDigits[(b >> 4) & 0xf]).append(hexDigits[b & 0xf]); } return sb.toString(); } /** Loading Loading
java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java +3 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import com.android.dialer.common.LogUtil; import com.android.dialer.location.GeoUtil; import com.android.dialer.notification.DialerNotificationManager; import com.android.dialer.notification.NotificationChannelManager; import com.android.dialer.notification.VoicemailChannelUtils; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.telecom.TelecomUtil; import com.android.dialer.theme.base.ThemeComponent; Loading Loading @@ -181,7 +182,8 @@ public final class LegacyVoicemailNotifier { if (context.getSystemService(TelephonyManager.class).getPhoneCount() <= 1) { return NOTIFICATION_TAG; } return NOTIFICATION_TAG_PREFIX + phoneAccountHandle.getId(); return NOTIFICATION_TAG_PREFIX + VoicemailChannelUtils.getHashedPhoneAccountId(phoneAccountHandle.getId()); } private LegacyVoicemailNotifier() {} Loading
java/com/android/dialer/notification/VoicemailChannelUtils.java +34 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.dialer.notification; import static java.nio.charset.StandardCharsets.UTF_8; import android.Manifest.permission; import android.annotation.TargetApi; import android.app.NotificationChannel; Loading @@ -38,15 +40,35 @@ import android.util.ArraySet; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.util.PermissionsUtil; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import java.util.Set; /** Utilities for working with voicemail channels. */ @TargetApi(VERSION_CODES.O) /* package */ final class VoicemailChannelUtils { public final class VoicemailChannelUtils { @VisibleForTesting static final String GLOBAL_VOICEMAIL_CHANNEL_ID = "phone_voicemail"; private static final String PER_ACCOUNT_VOICEMAIL_CHANNEL_ID_PREFIX = "phone_voicemail_account_"; private static final char[] hexDigits = "0123456789abcdef".toCharArray(); /** * Returns a String representation of the hashed value of the PhoneAccountHandle's id (the * Sim ICC ID). * In case it fails to hash the id it will return an empty string. */ public static String getHashedPhoneAccountId(@NonNull PhoneAccountHandle handle) { byte[] handleBytes = handle.getId().getBytes(UTF_8); try { byte[] hashedBytes = MessageDigest.getInstance("SHA-256").digest(handleBytes); return byteArrayToHexString(hashedBytes); } catch (NoSuchAlgorithmException e) { LogUtil.e("VoicemailChannelUtils.getHashedPhoneAccountId", "NoSuchAlgorithmException throw! Returning empty string!"); return ""; } } @SuppressWarnings("MissingPermission") // isSingleSimDevice() returns true if no permission static Set<String> getAllChannelIds(@NonNull Context context) { Loading Loading @@ -124,7 +146,17 @@ import java.util.Set; private static String getChannelIdForAccount(@NonNull PhoneAccountHandle handle) { Assert.isNotNull(handle); return PER_ACCOUNT_VOICEMAIL_CHANNEL_ID_PREFIX + ":" + handle.getId(); return PER_ACCOUNT_VOICEMAIL_CHANNEL_ID_PREFIX + ":" + getHashedPhoneAccountId(handle); } private static String byteArrayToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(2 * bytes.length); for (byte b : bytes) { sb.append(hexDigits[(b >> 4) & 0xf]).append(hexDigits[b & 0xf]); } return sb.toString(); } /** Loading