Merge "Sync phoneAccountHandle when phone is changed" am: a301f8adc3
Original change: https://android-review.googlesource.com/c/platform/packages/services/Telephony/+/1428428
Change-Id: I352101d8fd2d8815109498778ba9417becbe98cb
diff --git a/src/com/android/services/telephony/TelecomAccountRegistry.java b/src/com/android/services/telephony/TelecomAccountRegistry.java
index 8b5b64f..4fe5fb9 100644
--- a/src/com/android/services/telephony/TelecomAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecomAccountRegistry.java
@@ -1412,6 +1412,17 @@
return false;
}
+ PhoneAccountHandle getPhoneAccountHandleForSubId(int subId) {
+ synchronized (mAccountsLock) {
+ for (AccountEntry entry : mAccounts) {
+ if (entry.getSubId() == subId) {
+ return entry.getPhoneAccountHandle();
+ }
+ }
+ }
+ return null;
+ }
+
/**
* Un-registers any {@link PhoneAccount}s which are no longer present in the list
* {@code AccountEntry}(s).
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 0b1d56d..56012c8 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -1162,9 +1162,9 @@
phone.getPhoneId()));
}
-
+ PhoneAccountHandle accountHandle = adjustAccountHandle(phone, request.getAccountHandle());
final TelephonyConnection connection =
- createConnectionFor(phone, null, true /* isOutgoing */, request.getAccountHandle(),
+ createConnectionFor(phone, null, true /* isOutgoing */, accountHandle,
request.getTelecomCallId(), request.isAdhocConferenceCall());
if (connection == null) {
return Connection.createFailedConnection(
@@ -2483,4 +2483,20 @@
addConference(conference);
conference.addTelephonyConferenceListener(mTelephonyConferenceListener);
}
+
+ private PhoneAccountHandle adjustAccountHandle(Phone phone,
+ PhoneAccountHandle origAccountHandle) {
+ int origSubId = PhoneUtils.getSubIdForPhoneAccountHandle(origAccountHandle);
+ int subId = phone.getSubId();
+ if (origSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
+ && subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
+ && origSubId != subId) {
+ PhoneAccountHandle handle = TelecomAccountRegistry.getInstance(this)
+ .getPhoneAccountHandleForSubId(subId);
+ if (handle != null) {
+ return handle;
+ }
+ }
+ return origAccountHandle;
+ }
}