Merge "Undo a fix and de-flake a test"
am: e5a02966d8

Change-Id: I1f7d14d2eebee431aafd6c1f38aae8705cc0a321
diff --git a/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java b/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java
index fed3233..4aaa4e6 100644
--- a/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallAudioRouteStateMachineTest.java
@@ -55,6 +55,7 @@
 import static org.mockito.Matchers.same;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.timeout;
@@ -1145,7 +1146,8 @@
 
     private void resetMocks() {
         reset(mockAudioManager, mockBluetoothRouteManager, mockCallsManager,
-                mockConnectionServiceWrapper, fakeCall);
+                mockConnectionServiceWrapper);
+        fakeCall = mock(Call.class);
         when(mockCallsManager.getForegroundCall()).thenReturn(fakeCall);
         when(fakeCall.getConnectionService()).thenReturn(mockConnectionServiceWrapper);
         when(fakeCall.isAlive()).thenReturn(true);
diff --git a/tests/src/com/android/server/telecom/tests/InCallServiceFixture.java b/tests/src/com/android/server/telecom/tests/InCallServiceFixture.java
index 7635427..f851162 100644
--- a/tests/src/com/android/server/telecom/tests/InCallServiceFixture.java
+++ b/tests/src/com/android/server/telecom/tests/InCallServiceFixture.java
@@ -25,7 +25,6 @@
 import android.os.IBinder;
 import android.os.IInterface;
 import android.os.RemoteException;
-import android.telecom.AudioState;
 import android.telecom.CallAudioState;
 import android.telecom.ParcelableCall;
 
@@ -49,7 +48,8 @@
     public boolean mShowDialpad;
     public boolean mCanAddCall;
     public boolean mSilenceRinger;
-    public CountDownLatch mLock = new CountDownLatch(1);
+    public CountDownLatch mUpdateCallLock = new CountDownLatch(1);
+    public CountDownLatch mAddCallLock = new CountDownLatch(1);
 
     public class FakeInCallService extends IInCallService.Stub {
         @Override
@@ -68,8 +68,9 @@
             if (mCallById.containsKey(call.getId())) {
                 throw new RuntimeException("Call " + call.getId() + " already added");
             }
-            mCallById.put(call.getId(), call);
             mLatestCallId = call.getId();
+            mCallById.put(call.getId(), call);
+            mAddCallLock.countDown();
         }
 
         @Override
@@ -77,9 +78,9 @@
             if (!mCallById.containsKey(call.getId())) {
                 throw new RuntimeException("Call " + call.getId() + " not added yet");
             }
-            mCallById.put(call.getId(), call);
             mLatestCallId = call.getId();
-            mLock.countDown();
+            mCallById.put(call.getId(), call);
+            mUpdateCallLock.countDown();
         }
 
         @Override
@@ -159,10 +160,23 @@
 
     public void waitForUpdate() {
         try {
-            mLock.await(5000, TimeUnit.MILLISECONDS);
+            mUpdateCallLock.await(5000, TimeUnit.MILLISECONDS);
         } catch (InterruptedException ie) {
             return;
         }
-        mLock = new CountDownLatch(1);
+        mUpdateCallLock = new CountDownLatch(1);
+    }
+
+    public void waitUntilNumCalls(int numCalls) {
+        if (mCallById.size() == numCalls) {
+            return;
+        }
+        mAddCallLock = new CountDownLatch(1);
+
+        try {
+            mAddCallLock.await(5000, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException ie) {
+            return;
+        }
     }
 }
diff --git a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
index 475b550..b84f9d5 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
@@ -578,13 +578,8 @@
         int startingNumConnections = connectionServiceFixture.mConnectionById.size();
         int startingNumCalls = mInCallServiceFixtureX.mCallById.size();
 
-        String callId = startOutgoingPhoneCallPendingCreateConnection(number, phoneAccountHandle,
+        startOutgoingPhoneCallPendingCreateConnection(number, phoneAccountHandle,
                 connectionServiceFixture, initiatingUser, videoState);
-        // Set the phone account if there is one specified
-        if (phoneAccountHandle != null) {
-            mInCallServiceFixtureX.getInCallAdapter().phoneAccountSelected(
-                    callId, phoneAccountHandle, false);
-        }
 
         return outgoingCallCreateConnectionComplete(startingNumConnections, startingNumCalls,
                 phoneAccountHandle, connectionServiceFixture);
@@ -847,34 +842,35 @@
         // is added, future interactions as triggered by the ConnectionService, through the various
         // test fixtures, will be synchronous.
 
-        if (!hasInCallAdapter
-                && phoneAccountHandle != mPhoneAccountSelfManaged.getAccountHandle()) {
-            verify(mInCallServiceFixtureX.getTestDouble(), timeout(TEST_TIMEOUT))
-                    .setInCallAdapter(any(IInCallAdapter.class));
-            verify(mInCallServiceFixtureY.getTestDouble(), timeout(TEST_TIMEOUT))
-                    .setInCallAdapter(any(IInCallAdapter.class));
+        if (phoneAccountHandle != mPhoneAccountSelfManaged.getAccountHandle()) {
+            if (!hasInCallAdapter) {
+                verify(mInCallServiceFixtureX.getTestDouble(), timeout(TEST_TIMEOUT))
+                        .setInCallAdapter(any(IInCallAdapter.class));
+                verify(mInCallServiceFixtureY.getTestDouble(), timeout(TEST_TIMEOUT))
+                        .setInCallAdapter(any(IInCallAdapter.class));
 
-            // Give the InCallService time to respond
-            assertTrueWithTimeout(new Predicate<Void>() {
-                @Override
-                public boolean apply(Void v) {
-                    return mInCallServiceFixtureX.mInCallAdapter != null;
-                }
-            });
+                // Give the InCallService time to respond
+                assertTrueWithTimeout(new Predicate<Void>() {
+                    @Override
+                    public boolean apply(Void v) {
+                        return mInCallServiceFixtureX.mInCallAdapter != null;
+                    }
+                });
 
-            assertTrueWithTimeout(new Predicate<Void>() {
-                @Override
-                public boolean apply(Void v) {
-                    return mInCallServiceFixtureY.mInCallAdapter != null;
-                }
-            });
+                assertTrueWithTimeout(new Predicate<Void>() {
+                    @Override
+                    public boolean apply(Void v) {
+                        return mInCallServiceFixtureY.mInCallAdapter != null;
+                    }
+                });
 
-            verify(mInCallServiceFixtureX.getTestDouble(), timeout(TEST_TIMEOUT))
-                    .addCall(any(ParcelableCall.class));
-            verify(mInCallServiceFixtureY.getTestDouble(), timeout(TEST_TIMEOUT))
-                    .addCall(any(ParcelableCall.class));
+                verify(mInCallServiceFixtureX.getTestDouble(), timeout(TEST_TIMEOUT))
+                        .addCall(any(ParcelableCall.class));
+                verify(mInCallServiceFixtureY.getTestDouble(), timeout(TEST_TIMEOUT))
+                        .addCall(any(ParcelableCall.class));
 
-            // Give the InCallService time to respond
+                // Give the InCallService time to respond
+            }
 
             assertTrueWithTimeout(new Predicate<Void>() {
                 @Override
@@ -883,18 +879,11 @@
                             connectionServiceFixture.mConnectionById.size();
                 }
             });
-            assertTrueWithTimeout(new Predicate<Void>() {
-                @Override
-                public boolean apply(Void v) {
-                    return startingNumCalls + 1 == mInCallServiceFixtureX.mCallById.size();
-                }
-            });
-            assertTrueWithTimeout(new Predicate<Void>() {
-                @Override
-                public boolean apply(Void v) {
-                    return startingNumCalls + 1 == mInCallServiceFixtureY.mCallById.size();
-                }
-            });
+
+            mInCallServiceFixtureX.waitUntilNumCalls(startingNumCalls + 1);
+            mInCallServiceFixtureY.waitUntilNumCalls(startingNumCalls + 1);
+            assertEquals(startingNumCalls + 1, mInCallServiceFixtureX.mCallById.size());
+            assertEquals(startingNumCalls + 1, mInCallServiceFixtureY.mCallById.size());
 
             assertEquals(mInCallServiceFixtureX.mLatestCallId,
                     mInCallServiceFixtureY.mLatestCallId);