Fix work telephony voicemail notification
Send voicemail notification from the user associated with the
SubID, and send the ACTION_DIAL intent from the same user
Test: manually tested, steps to test:
1) set up work telephony (go/work-telephony-bug-bash) and insert sim card
2) call the test device and leave a voicemail
3) wait for voicemail notification and tap notification to start
voicemail call
Important note: Not all carriers support the voicemail notification.
I used an 02-UK sim card which does. It may not be possible to test this
with other carriers.
Bug: 269593365
Bug: 269595323
Change-Id: I4dd3541c76388c43308aac7bddecb18de6ebff48
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index d2c0e6b..b28bd5c 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -365,10 +365,16 @@
null));
intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
}
-
- PendingIntent pendingIntent =
- PendingIntent.getActivity(mContext, subId /* requestCode */, intent,
- PendingIntent.FLAG_IMMUTABLE);
+ PendingIntent pendingIntent;
+ UserHandle subAssociatedUserHandle =
+ mSubscriptionManager.getSubscriptionUserHandle(subId);
+ if (subAssociatedUserHandle == null) {
+ pendingIntent = PendingIntent.getActivity(mContext, subId /* requestCode */, intent,
+ PendingIntent.FLAG_IMMUTABLE);
+ } else {
+ pendingIntent = PendingIntent.getActivityAsUser(mContext, subId /* requestCode */,
+ intent, PendingIntent.FLAG_IMMUTABLE, null, subAssociatedUserHandle);
+ }
Resources res = mContext.getResources();
PersistableBundle carrierConfig = PhoneGlobals.getInstance().getCarrierConfigForSubId(
@@ -389,34 +395,21 @@
final Notification notification = builder.build();
List<UserHandle> users = getUsersExcludeDying();
for (UserHandle userHandle : users) {
- if (!hasUserRestriction(
- UserManager.DISALLOW_OUTGOING_CALLS, userHandle)
- && !mUserManager.isManagedProfile(userHandle.getIdentifier())) {
- if (!maybeSendVoicemailNotificationUsingDefaultDialer(phone, vmCount, vmNumber,
- pendingIntent, isSettingsIntent, userHandle, isRefresh)) {
- notifyAsUser(
- Integer.toString(subId) /* tag */,
- VOICEMAIL_NOTIFICATION,
- notification,
- userHandle);
- }
+ boolean isManagedUser = mUserManager.isManagedProfile(userHandle.getIdentifier());
+ if (!hasUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS, userHandle)
+ && (userHandle.equals(subAssociatedUserHandle)
+ || (subAssociatedUserHandle == null && !isManagedUser))
+ && !maybeSendVoicemailNotificationUsingDefaultDialer(phone, vmCount,
+ vmNumber, pendingIntent, isSettingsIntent, userHandle, isRefresh)) {
+ notifyAsUser(
+ Integer.toString(subId) /* tag */,
+ VOICEMAIL_NOTIFICATION,
+ notification,
+ userHandle);
}
}
} else {
- List<UserHandle> users = getUsersExcludeDying();
- for (UserHandle userHandle : users) {
- if (!hasUserRestriction(
- UserManager.DISALLOW_OUTGOING_CALLS, userHandle)
- && !mUserManager.isManagedProfile(userHandle.getIdentifier())) {
- if (!maybeSendVoicemailNotificationUsingDefaultDialer(phone, 0, null, null,
- false, userHandle, isRefresh)) {
- cancelAsUser(
- Integer.toString(subId) /* tag */,
- VOICEMAIL_NOTIFICATION,
- userHandle);
- }
- }
- }
+ cancelAsUser(Integer.toString(subId) /* tag */, VOICEMAIL_NOTIFICATION, UserHandle.ALL);
}
}