Loading src/com/android/server/telecom/CallsManager.java +14 −5 Original line number Diff line number Diff line Loading @@ -1529,6 +1529,9 @@ public class CallsManager extends Call.ListenerBase return CompletableFuture.completedFuture(Arrays.asList(targetPhoneAccountHandle)); } } if (accounts.isEmpty() || accounts.size() == 1) { return CompletableFuture.completedFuture(accounts); } // Do the query for whether there's a preferred contact final CompletableFuture<PhoneAccountHandle> userPreferredAccountForContact = Loading @@ -1538,9 +1541,18 @@ public class CallsManager extends Call.ListenerBase new CallerInfoLookupHelper.OnQueryCompleteListener() { @Override public void onCallerInfoQueryComplete(Uri handle, CallerInfo info) { // TODO: construct the acct handle from caller info if (info.preferredPhoneAccountComponent != null && info.preferredPhoneAccountId != null && !info.preferredPhoneAccountId.isEmpty()) { PhoneAccountHandle contactDefaultHandle = new PhoneAccountHandle( info.preferredPhoneAccountComponent, info.preferredPhoneAccountId, initiatingUser); userPreferredAccountForContact.complete(contactDefaultHandle); } else { userPreferredAccountForContact.complete(null); } } @Override public void onContactPhotoQueryComplete(Uri handle, CallerInfo info) { Loading @@ -1552,9 +1564,6 @@ public class CallsManager extends Call.ListenerBase if (phoneAccountHandle != null) { return Collections.singletonList(phoneAccountHandle); } if (possibleAccounts.isEmpty() || possibleAccounts.size() == 1) { return possibleAccounts; } // No preset account, check if default exists that supports the URI scheme for the // handle and verify it can be used. PhoneAccountHandle defaultPhoneAccountHandle = Loading tests/src/com/android/server/telecom/tests/CallsManagerTest.java +41 −1 Original line number Diff line number Diff line Loading @@ -35,8 +35,10 @@ import static org.mockito.Mockito.when; import android.content.ComponentName; import android.net.Uri; import android.os.Bundle; import android.os.Process; import android.os.SystemClock; import android.telecom.Connection; import android.telecom.Log; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; Loading @@ -44,6 +46,8 @@ import android.telecom.VideoProfile; import android.telephony.TelephonyManager; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; import com.android.internal.telephony.CallerInfo; import com.android.server.telecom.AsyncRingtonePlayer; import com.android.server.telecom.Call; import com.android.server.telecom.CallAudioManager; Loading Loading @@ -95,7 +99,9 @@ import org.mockito.stubbing.Answer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @RunWith(JUnit4.class) public class CallsManagerTest extends TelecomTestCase { Loading @@ -122,6 +128,13 @@ public class CallsManagerTest extends TelecomTestCase { .setIsEnabled(true) .build(); private static final Uri TEST_ADDRESS = Uri.parse("tel:555-1212"); private static final Uri TEST_ADDRESS2 = Uri.parse("tel:555-1213"); private static final Uri TEST_ADDRESS3 = Uri.parse("tel:555-1214"); private static final Map<Uri, PhoneAccountHandle> CONTACT_PREFERRED_ACCOUNT = new HashMap<Uri, PhoneAccountHandle>() {{ put(TEST_ADDRESS2, SIM_1_HANDLE); put(TEST_ADDRESS3, SIM_2_HANDLE); }}; private final TelecomSystem.SyncRoot mLock = new TelecomSystem.SyncRoot() { }; @Mock private CallerInfoLookupHelper mCallerInfoLookupHelper; Loading Loading @@ -272,7 +285,13 @@ public class CallsManagerTest extends TelecomTestCase { doAnswer(invocation -> { Uri handle = invocation.getArgument(0); CallerInfoLookupHelper.OnQueryCompleteListener listener = invocation.getArgument(1); listener.onCallerInfoQueryComplete(handle, null); CallerInfo info = new CallerInfo(); if (CONTACT_PREFERRED_ACCOUNT.get(handle) != null) { PhoneAccountHandle pah = CONTACT_PREFERRED_ACCOUNT.get(handle); info.preferredPhoneAccountComponent = pah.getComponentName(); info.preferredPhoneAccountId = pah.getId(); } listener.onCallerInfoQueryComplete(handle, info); return null; }).when(mCallerInfoLookupHelper).startLookup(any(Uri.class), any(CallerInfoLookupHelper.OnQueryCompleteListener.class)); Loading Loading @@ -413,6 +432,27 @@ public class CallsManagerTest extends TelecomTestCase { assertTrue(accounts.contains(SIM_2_HANDLE)); } /** * Tests that we will use the provided target phone account if it exists. * @throws Exception */ @MediumTest @Test public void testUseContactSpecificAcct() throws Exception { setupCallerInfoLookupHelper(); when(mPhoneAccountRegistrar.getOutgoingPhoneAccountForScheme(any(), any())).thenReturn( null); when(mPhoneAccountRegistrar.getCallCapablePhoneAccounts(any(), anyBoolean(), any(), anyInt())).thenReturn( new ArrayList<>(Arrays.asList(SIM_1_HANDLE, SIM_2_HANDLE))); List<PhoneAccountHandle> accounts = mCallsManager.findOutgoingCallPhoneAccount( null, TEST_ADDRESS2, false /* isVideo */, Process.myUserHandle()).get(); assertEquals(1, accounts.size()); assertTrue(accounts.contains(SIM_1_HANDLE)); } /** * Verifies that an active call will result in playing a DTMF tone when requested. * @throws Exception Loading Loading
src/com/android/server/telecom/CallsManager.java +14 −5 Original line number Diff line number Diff line Loading @@ -1529,6 +1529,9 @@ public class CallsManager extends Call.ListenerBase return CompletableFuture.completedFuture(Arrays.asList(targetPhoneAccountHandle)); } } if (accounts.isEmpty() || accounts.size() == 1) { return CompletableFuture.completedFuture(accounts); } // Do the query for whether there's a preferred contact final CompletableFuture<PhoneAccountHandle> userPreferredAccountForContact = Loading @@ -1538,9 +1541,18 @@ public class CallsManager extends Call.ListenerBase new CallerInfoLookupHelper.OnQueryCompleteListener() { @Override public void onCallerInfoQueryComplete(Uri handle, CallerInfo info) { // TODO: construct the acct handle from caller info if (info.preferredPhoneAccountComponent != null && info.preferredPhoneAccountId != null && !info.preferredPhoneAccountId.isEmpty()) { PhoneAccountHandle contactDefaultHandle = new PhoneAccountHandle( info.preferredPhoneAccountComponent, info.preferredPhoneAccountId, initiatingUser); userPreferredAccountForContact.complete(contactDefaultHandle); } else { userPreferredAccountForContact.complete(null); } } @Override public void onContactPhotoQueryComplete(Uri handle, CallerInfo info) { Loading @@ -1552,9 +1564,6 @@ public class CallsManager extends Call.ListenerBase if (phoneAccountHandle != null) { return Collections.singletonList(phoneAccountHandle); } if (possibleAccounts.isEmpty() || possibleAccounts.size() == 1) { return possibleAccounts; } // No preset account, check if default exists that supports the URI scheme for the // handle and verify it can be used. PhoneAccountHandle defaultPhoneAccountHandle = Loading
tests/src/com/android/server/telecom/tests/CallsManagerTest.java +41 −1 Original line number Diff line number Diff line Loading @@ -35,8 +35,10 @@ import static org.mockito.Mockito.when; import android.content.ComponentName; import android.net.Uri; import android.os.Bundle; import android.os.Process; import android.os.SystemClock; import android.telecom.Connection; import android.telecom.Log; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; Loading @@ -44,6 +46,8 @@ import android.telecom.VideoProfile; import android.telephony.TelephonyManager; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; import com.android.internal.telephony.CallerInfo; import com.android.server.telecom.AsyncRingtonePlayer; import com.android.server.telecom.Call; import com.android.server.telecom.CallAudioManager; Loading Loading @@ -95,7 +99,9 @@ import org.mockito.stubbing.Answer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @RunWith(JUnit4.class) public class CallsManagerTest extends TelecomTestCase { Loading @@ -122,6 +128,13 @@ public class CallsManagerTest extends TelecomTestCase { .setIsEnabled(true) .build(); private static final Uri TEST_ADDRESS = Uri.parse("tel:555-1212"); private static final Uri TEST_ADDRESS2 = Uri.parse("tel:555-1213"); private static final Uri TEST_ADDRESS3 = Uri.parse("tel:555-1214"); private static final Map<Uri, PhoneAccountHandle> CONTACT_PREFERRED_ACCOUNT = new HashMap<Uri, PhoneAccountHandle>() {{ put(TEST_ADDRESS2, SIM_1_HANDLE); put(TEST_ADDRESS3, SIM_2_HANDLE); }}; private final TelecomSystem.SyncRoot mLock = new TelecomSystem.SyncRoot() { }; @Mock private CallerInfoLookupHelper mCallerInfoLookupHelper; Loading Loading @@ -272,7 +285,13 @@ public class CallsManagerTest extends TelecomTestCase { doAnswer(invocation -> { Uri handle = invocation.getArgument(0); CallerInfoLookupHelper.OnQueryCompleteListener listener = invocation.getArgument(1); listener.onCallerInfoQueryComplete(handle, null); CallerInfo info = new CallerInfo(); if (CONTACT_PREFERRED_ACCOUNT.get(handle) != null) { PhoneAccountHandle pah = CONTACT_PREFERRED_ACCOUNT.get(handle); info.preferredPhoneAccountComponent = pah.getComponentName(); info.preferredPhoneAccountId = pah.getId(); } listener.onCallerInfoQueryComplete(handle, info); return null; }).when(mCallerInfoLookupHelper).startLookup(any(Uri.class), any(CallerInfoLookupHelper.OnQueryCompleteListener.class)); Loading Loading @@ -413,6 +432,27 @@ public class CallsManagerTest extends TelecomTestCase { assertTrue(accounts.contains(SIM_2_HANDLE)); } /** * Tests that we will use the provided target phone account if it exists. * @throws Exception */ @MediumTest @Test public void testUseContactSpecificAcct() throws Exception { setupCallerInfoLookupHelper(); when(mPhoneAccountRegistrar.getOutgoingPhoneAccountForScheme(any(), any())).thenReturn( null); when(mPhoneAccountRegistrar.getCallCapablePhoneAccounts(any(), anyBoolean(), any(), anyInt())).thenReturn( new ArrayList<>(Arrays.asList(SIM_1_HANDLE, SIM_2_HANDLE))); List<PhoneAccountHandle> accounts = mCallsManager.findOutgoingCallPhoneAccount( null, TEST_ADDRESS2, false /* isVideo */, Process.myUserHandle()).get(); assertEquals(1, accounts.size()); assertTrue(accounts.contains(SIM_1_HANDLE)); } /** * Verifies that an active call will result in playing a DTMF tone when requested. * @throws Exception Loading