diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-04-08 16:03:09 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-04-08 16:03:09 +0000 |
commit | c96ad72fd58e2b00d0f66440d8e118764722a235 (patch) | |
tree | 0799f3c7933e54557c5eff4c092a2dad6ae69e01 | |
parent | eb5f9ca7b8d8ff768a322a851148bcc0d8617cec (diff) | |
parent | 421fa54f2c852a8cf7ff00a48eec7de8ec38b127 (diff) | |
download | Dialer-android12-mainline-tzdata2-release.tar.gz |
Snap for 8426163 from 421fa54f2c852a8cf7ff00a48eec7de8ec38b127 to mainline-tzdata2-releaseandroid-mainline-12.0.0_r112aml_tz2_305400500aml_tz2_305400300aml_tz2_305400100aml_tz2_304500300aml_tz2_303900110aml_tz2_303900102aml_tz2_303800002aml_tz2_303800001aml_tz2_303200001android12-mainline-tzdata2-releaseaml_tz2_305400100
Change-Id: I8523fecb6f3d1a6966d3c0012e3f6da2453291c6
15 files changed, 78 insertions, 39 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index fe8147f07..b50aa28a7 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -74,6 +74,10 @@ presses home. --> <uses-permission android:name="android.permission.STOP_APP_SWITCHES"/> + <!-- Used for sending PendingIntents to dynamically registered receivers --> + <uses-permission android:name="com.android.dialer.permission.DIALER_ORIGIN" + android:protectionLevel="signature" /> + <!-- Permissions needed for badger count showing on launch icon. --> <!--for Samsung--> diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java index e044460c5..05011d102 100644 --- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java +++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java @@ -560,7 +560,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder case CallbackAction.VOICE: if (callLogCache.isVoicemailNumber(accountHandle, number)) { // Call to generic voicemail number, in case there are multiple accounts - primaryActionButtonView.setTag(IntentProvider.getReturnVoicemailCallIntentProvider(null)); + primaryActionButtonView.setTag(IntentProvider.getReturnVoicemailCallIntentProvider()); } else if (canSupportAssistedDialing()) { primaryActionButtonView.setTag( IntentProvider.getAssistedDialIntentProvider( diff --git a/java/com/android/dialer/app/calllog/IntentProvider.java b/java/com/android/dialer/app/calllog/IntentProvider.java index 21f341815..423b49c22 100644 --- a/java/com/android/dialer/app/calllog/IntentProvider.java +++ b/java/com/android/dialer/app/calllog/IntentProvider.java @@ -161,14 +161,13 @@ public abstract class IntentProvider { }; } - public static IntentProvider getReturnVoicemailCallIntentProvider( - @Nullable PhoneAccountHandle phoneAccountHandle) { + public static IntentProvider getReturnVoicemailCallIntentProvider() { return new IntentProvider() { @Override public Intent getIntent(Context context) { return PreCall.getIntent( context, - CallIntentBuilder.forVoicemail(phoneAccountHandle, CallInitiationType.Type.CALL_LOG)); + CallIntentBuilder.forVoicemail(CallInitiationType.Type.CALL_LOG)); } }; } diff --git a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java index 31e9edc6a..1388f43a5 100644 --- a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java +++ b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java @@ -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; @@ -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); } private LegacyVoicemailNotifier() {} diff --git a/java/com/android/dialer/callintent/CallIntentBuilder.java b/java/com/android/dialer/callintent/CallIntentBuilder.java index 613fdf6a3..7cc589123 100644 --- a/java/com/android/dialer/callintent/CallIntentBuilder.java +++ b/java/com/android/dialer/callintent/CallIntentBuilder.java @@ -117,10 +117,10 @@ public class CallIntentBuilder implements Parcelable { } public static CallIntentBuilder forVoicemail( - @Nullable PhoneAccountHandle phoneAccountHandle, CallInitiationType.Type callInitiationType) { + CallInitiationType.Type callInitiationType) { return new CallIntentBuilder( Uri.fromParts(PhoneAccount.SCHEME_VOICEMAIL, "", null), callInitiationType) - .setPhoneAccountHandle(phoneAccountHandle); + .setPhoneAccountHandle(null); } public void setUri(@NonNull Uri uri) { diff --git a/java/com/android/dialer/commandline/impl/CallCommand.java b/java/com/android/dialer/commandline/impl/CallCommand.java index b3ea8601f..5bcf78548 100644 --- a/java/com/android/dialer/commandline/impl/CallCommand.java +++ b/java/com/android/dialer/commandline/impl/CallCommand.java @@ -72,7 +72,7 @@ public class CallCommand implements Command { CallIntentBuilder callIntentBuilder; if ("voicemail".equals(number)) { callIntentBuilder = - CallIntentBuilder.forVoicemail(phoneAccountHandle, CallInitiationType.Type.DIALPAD); + CallIntentBuilder.forVoicemail(CallInitiationType.Type.DIALPAD); } else { callIntentBuilder = new CallIntentBuilder(number, CallInitiationType.Type.DIALPAD); } diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java index 2d0eff543..12c82c98f 100644 --- a/java/com/android/dialer/dialpadview/DialpadFragment.java +++ b/java/com/android/dialer/dialpadview/DialpadFragment.java @@ -1136,7 +1136,7 @@ public class DialpadFragment extends Fragment public void callVoicemail() { PreCall.start( - getContext(), CallIntentBuilder.forVoicemail(null, CallInitiationType.Type.DIALPAD)); + getContext(), CallIntentBuilder.forVoicemail(CallInitiationType.Type.DIALPAD)); hideAndClearDialpad(); } diff --git a/java/com/android/dialer/notification/VoicemailChannelUtils.java b/java/com/android/dialer/notification/VoicemailChannelUtils.java index ddc0f773c..83bda0f18 100644 --- a/java/com/android/dialer/notification/VoicemailChannelUtils.java +++ b/java/com/android/dialer/notification/VoicemailChannelUtils.java @@ -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; @@ -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) { @@ -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(); } /** diff --git a/java/com/android/dialer/voicemail/listui/error/OmtpVoicemailMessageCreator.java b/java/com/android/dialer/voicemail/listui/error/OmtpVoicemailMessageCreator.java index 29b698942..850b93895 100644 --- a/java/com/android/dialer/voicemail/listui/error/OmtpVoicemailMessageCreator.java +++ b/java/com/android/dialer/voicemail/listui/error/OmtpVoicemailMessageCreator.java @@ -66,7 +66,7 @@ public class OmtpVoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.voicemail_error_activating_title), context.getString(R.string.voicemail_error_activating_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle())); + VoicemailErrorMessage.createCallVoicemailAction(context)); } if (Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION == status.notificationChannelState) { @@ -77,7 +77,7 @@ public class OmtpVoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.voicemail_error_activation_failed_title), context.getString(R.string.voicemail_error_activation_failed_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), VoicemailErrorMessage.createRetryAction(context, status)); } @@ -85,7 +85,7 @@ public class OmtpVoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.voicemail_error_no_data_title), context.getString(R.string.voicemail_error_no_data_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), VoicemailErrorMessage.createRetryAction(context, status)); } @@ -93,7 +93,7 @@ public class OmtpVoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.voicemail_error_no_data_title), context.getString(R.string.voicemail_error_no_data_cellular_required_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), VoicemailErrorMessage.createRetryAction(context, status)); } @@ -101,7 +101,7 @@ public class OmtpVoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.voicemail_error_bad_config_title), context.getString(R.string.voicemail_error_bad_config_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), VoicemailErrorMessage.createRetryAction(context, status)); } @@ -109,7 +109,7 @@ public class OmtpVoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.voicemail_error_communication_title), context.getString(R.string.voicemail_error_communication_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), VoicemailErrorMessage.createRetryAction(context, status)); } @@ -117,7 +117,7 @@ public class OmtpVoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.voicemail_error_server_title), context.getString(R.string.voicemail_error_server_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), VoicemailErrorMessage.createRetryAction(context, status)); } @@ -125,7 +125,7 @@ public class OmtpVoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.voicemail_error_server_connection_title), context.getString(R.string.voicemail_error_server_connection_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), VoicemailErrorMessage.createRetryAction(context, status)); } diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailErrorMessage.java b/java/com/android/dialer/voicemail/listui/error/VoicemailErrorMessage.java index 14d6cffdc..e22f30656 100644 --- a/java/com/android/dialer/voicemail/listui/error/VoicemailErrorMessage.java +++ b/java/com/android/dialer/voicemail/listui/error/VoicemailErrorMessage.java @@ -150,7 +150,7 @@ public class VoicemailErrorMessage { public void onClick(View v) { Logger.get(context) .logImpression(DialerImpression.Type.VOICEMAIL_ALERT_SET_PIN_CLICKED); - Intent intent = new Intent(VoicemailChangePinActivity.ACTION_CHANGE_PIN); + Intent intent = new Intent(context, VoicemailChangePinActivity.class); intent.putExtra(VoicemailClient.PARAM_PHONE_ACCOUNT_HANDLE, phoneAccountHandle); context.startActivity(intent); } @@ -159,7 +159,7 @@ public class VoicemailErrorMessage { @NonNull public static Action createCallVoicemailAction( - final Context context, final PhoneAccountHandle phoneAccountHandle) { + final Context context) { return new Action( context.getString(R.string.voicemail_action_call_voicemail), new OnClickListener() { @@ -169,7 +169,7 @@ public class VoicemailErrorMessage { PreCall.start( context, CallIntentBuilder.forVoicemail( - phoneAccountHandle, CallInitiationType.Type.VOICEMAIL_ERROR_MESSAGE)); + CallInitiationType.Type.VOICEMAIL_ERROR_MESSAGE)); } }); } diff --git a/java/com/android/dialer/voicemail/listui/error/Vvm3VoicemailMessageCreator.java b/java/com/android/dialer/voicemail/listui/error/Vvm3VoicemailMessageCreator.java index 17173d82b..863c586b1 100644 --- a/java/com/android/dialer/voicemail/listui/error/Vvm3VoicemailMessageCreator.java +++ b/java/com/android/dialer/voicemail/listui/error/Vvm3VoicemailMessageCreator.java @@ -167,7 +167,7 @@ public class Vvm3VoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.vvm3_error_unknown_user_title), getCustomerSupportString(context, R.string.vvm3_error_unknown_user_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), createCallCustomerSupportAction(context)); } @@ -175,7 +175,7 @@ public class Vvm3VoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.vvm3_error_unknown_device_title), getCustomerSupportString(context, R.string.vvm3_error_unknown_device_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), createCallCustomerSupportAction(context)); } @@ -183,7 +183,7 @@ public class Vvm3VoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.vvm3_error_invalid_password_title), getCustomerSupportString(context, R.string.vvm3_error_invalid_password_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), createCallCustomerSupportAction(context)); } @@ -219,7 +219,7 @@ public class Vvm3VoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.vvm3_error_subscriber_unknown_title), getCustomerSupportString(context, R.string.vvm3_error_subscriber_unknown_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), createCallCustomerSupportAction(context)); } @@ -227,7 +227,7 @@ public class Vvm3VoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.vvm3_error_imap_getquota_error_title), getCustomerSupportString(context, R.string.vvm3_error_imap_getquota_error_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), createCallCustomerSupportAction(context)); } @@ -235,7 +235,7 @@ public class Vvm3VoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.vvm3_error_imap_select_error_title), getCustomerSupportString(context, R.string.vvm3_error_imap_select_error_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), createCallCustomerSupportAction(context)); } @@ -243,7 +243,7 @@ public class Vvm3VoicemailMessageCreator { return new VoicemailErrorMessage( context.getString(R.string.vvm3_error_imap_error_title), getCustomerSupportString(context, R.string.vvm3_error_imap_error_message), - VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()), + VoicemailErrorMessage.createCallVoicemailAction(context), createCallCustomerSupportAction(context)); } diff --git a/java/com/android/dialer/voicemail/settings/AndroidManifest.xml b/java/com/android/dialer/voicemail/settings/AndroidManifest.xml index 8506ddd41..f25858e9d 100644 --- a/java/com/android/dialer/voicemail/settings/AndroidManifest.xml +++ b/java/com/android/dialer/voicemail/settings/AndroidManifest.xml @@ -29,10 +29,6 @@ android:parentActivityName="com.android.dialer.app.settings.DialerSettingsActivity" android:theme="@style/SettingsStyle" android:windowSoftInputMode="stateVisible|adjustResize"> - <intent-filter> - <action android:name="com.android.dialer.action.CHANGE_PIN"/> - <category android:name="android.intent.category.DEFAULT"/> - </intent-filter> </activity> <activity android:name=".RecordVoicemailGreetingActivity" diff --git a/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java b/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java index 4e22fb335..ebebdf7d4 100644 --- a/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java +++ b/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java @@ -67,7 +67,6 @@ public class VoicemailChangePinActivity extends Activity implements OnClickListener, OnEditorActionListener, TextWatcher { private static final String TAG = "VmChangePinActivity"; - public static final String ACTION_CHANGE_PIN = "com.android.dialer.action.CHANGE_PIN"; private static final int MESSAGE_HANDLE_RESULT = 1; diff --git a/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java b/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java index 29d376b35..5a16f8671 100644 --- a/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java +++ b/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java @@ -108,8 +108,8 @@ public class LegacyModeSmsHandler { PreCall.getIntent( context, CallIntentBuilder.forVoicemail( - phoneAccountHandle, CallInitiationType.Type.LEGACY_VOICEMAIL_NOTIFICATION)), - PendingIntent.FLAG_UPDATE_CURRENT); + CallInitiationType.Type.LEGACY_VOICEMAIL_NOTIFICATION)), + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); } else { Intent launchVoicemailSettingsIntent = new Intent(TelephonyManager.ACTION_CONFIGURE_VOICEMAIL); @@ -122,7 +122,7 @@ public class LegacyModeSmsHandler { context, LAUNCH_VOICEMAIL_SETTINGS_REQUEST_CODE, launchVoicemailSettingsIntent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); } intent.putExtra(TelephonyManager.EXTRA_VOICEMAIL_NUMBER, voicemailNumber); diff --git a/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java b/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java index 7ddf64607..335ec3e03 100644 --- a/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java +++ b/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java @@ -53,8 +53,12 @@ public class StatusSmsFetcher extends BroadcastReceiver implements Closeable { private static final long STATUS_SMS_TIMEOUT_MILLIS = 60_000; + private static final String PERMISSION_DIALER_ORIGIN = + "com.android.dialer.permission.DIALER_ORIGIN"; + private static final String ACTION_REQUEST_SENT_INTENT = "com.android.voicemailomtp.sms.REQUEST_SENT"; + private static final int ACTION_REQUEST_SENT_REQUEST_CODE = 0; private CompletableFuture<Bundle> future = new CompletableFuture<>(); @@ -67,7 +71,7 @@ public class StatusSmsFetcher extends BroadcastReceiver implements Closeable { this.phoneAccountHandle = phoneAccountHandle; IntentFilter filter = new IntentFilter(ACTION_REQUEST_SENT_INTENT); filter.addAction(OmtpService.ACTION_SMS_RECEIVED); - context.registerReceiver(this, filter); + context.registerReceiver(this, filter, PERMISSION_DIALER_ORIGIN, /* scheduler= */ null); } @Override @@ -89,7 +93,10 @@ public class StatusSmsFetcher extends BroadcastReceiver implements Closeable { // Because the receiver is registered dynamically, implicit intent must be used. // There should only be a single status SMS request at a time. return PendingIntent.getBroadcast( - context, ACTION_REQUEST_SENT_REQUEST_CODE, intent, PendingIntent.FLAG_CANCEL_CURRENT); + context, + ACTION_REQUEST_SENT_REQUEST_CODE, + intent, + PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE); } @Override |