Merge "Don't set connection manager for call providers" into lmp-dev
diff --git a/src/com/android/telecomm/CreateConnectionProcessor.java b/src/com/android/telecomm/CreateConnectionProcessor.java
index 5a186f4..8ba73bf 100644
--- a/src/com/android/telecomm/CreateConnectionProcessor.java
+++ b/src/com/android/telecomm/CreateConnectionProcessor.java
@@ -18,6 +18,7 @@
import android.telecomm.ConnectionRequest;
import android.telecomm.ParcelableConnection;
+import android.telecomm.PhoneAccount;
import android.telecomm.PhoneAccountHandle;
import android.telephony.DisconnectCause;
@@ -78,10 +79,10 @@
Log.v(this, "process");
mAttemptRecords = new ArrayList<>();
if (mCall.getTargetPhoneAccount() != null) {
- mAttemptRecords.add(
- new CallAttemptRecord(mCall.getTargetPhoneAccount(), mCall.getTargetPhoneAccount()));
+ mAttemptRecords.add(new CallAttemptRecord(
+ mCall.getTargetPhoneAccount(), mCall.getTargetPhoneAccount()));
}
- adjustAttemptsForWifi();
+ adjustAttemptsForConnectionManager();
adjustAttemptsForEmergency();
mAttemptRecordIterator = mAttemptRecords.iterator();
attemptNextPhoneAccount();
@@ -134,28 +135,50 @@
}
}
- // If there exists a registered Wi-Fi calling service, use it.
- private void adjustAttemptsForWifi() {
- switch (mAttemptRecords.size()) {
- case 0:
- return;
- case 1:
- break;
- default:
- Log.d(this, "Unexpectedly have > 1 attempt: %s", mAttemptRecords);
- return;
+ private boolean shouldSetConnectionManager() {
+ if (mAttemptRecords.size() == 0) {
+ return false;
}
- PhoneAccountHandle simCallManager =
- TelecommApp.getInstance().getPhoneAccountRegistrar().getSimCallManager();
- Log.d(this, "adjustAttemptsForWifi finds simCallManager = %s", simCallManager);
- if (simCallManager != null &&
- !Objects.equals(simCallManager, mAttemptRecords.get(0).targetPhoneAccount)) {
- mAttemptRecords.set(
- 0,
- new CallAttemptRecord(
- simCallManager,
- mAttemptRecords.get(0).targetPhoneAccount));
+ if (mAttemptRecords.size() > 1) {
+ Log.d(this, "shouldSetConnectionManager, error, mAttemptRecords should not have more "
+ + "than 1 record");
+ return false;
+ }
+
+ PhoneAccountRegistrar registrar = TelecommApp.getInstance().getPhoneAccountRegistrar();
+ PhoneAccountHandle connectionManager = registrar.getSimCallManager();
+ if (connectionManager == null) {
+ return false;
+ }
+
+ PhoneAccountHandle targetPhoneAccountHandle = mAttemptRecords.get(0).targetPhoneAccount;
+ if (Objects.equals(connectionManager, targetPhoneAccountHandle)) {
+ return false;
+ }
+
+ // Connection managers are only allowed to manage SIM subscriptions.
+ PhoneAccount targetPhoneAccount = registrar.getPhoneAccount(targetPhoneAccountHandle);
+ boolean isSimSubscription = (targetPhoneAccount.getCapabilities() &
+ PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION) != 0;
+ if (!isSimSubscription) {
+ return false;
+ }
+
+ return true;
+ }
+
+ // If there exists a registered connection manager then use it.
+ private void adjustAttemptsForConnectionManager() {
+ if (shouldSetConnectionManager()) {
+ CallAttemptRecord record = new CallAttemptRecord(
+ TelecommApp.getInstance().getPhoneAccountRegistrar().getSimCallManager(),
+ mAttemptRecords.get(0).targetPhoneAccount);
+ Log.v(this, "setConnectionManager, changing %s -> %s",
+ mAttemptRecords.get(0).targetPhoneAccount, record);
+ mAttemptRecords.set(0, record);
+ } else {
+ Log.v(this, "setConnectionManager, not changing");
}
}