Added ackAllMilestones api to PausableExecutor
am: 90820a50b6

* commit '90820a50b614e8b5f6a9830536553167e1914faa':
  Added ackAllMilestones api to PausableExecutor
diff --git a/InCallUI/src/com/android/incallui/async/PausableExecutor.java b/InCallUI/src/com/android/incallui/async/PausableExecutor.java
index fdeef36..1b8201a 100644
--- a/InCallUI/src/com/android/incallui/async/PausableExecutor.java
+++ b/InCallUI/src/com/android/incallui/async/PausableExecutor.java
@@ -45,6 +45,14 @@
     void ackMilestoneForTesting();
 
     /**
+     * Method called from the test code to inform this executor that the tests are finished with all
+     * milestones. Future calls to {@link #milestone()} or {@link #awaitMilestoneForTesting()}
+     * should return immediately.
+     */
+    @NeededForTesting
+    void ackAllMilestonesForTesting();
+
+    /**
      * Method called from the test code to block until a milestone has been reached in the
      * production code.
      */
diff --git a/InCallUI/src/com/android/incallui/async/PausableExecutorImpl.java b/InCallUI/src/com/android/incallui/async/PausableExecutorImpl.java
index e493feb..15900e5 100644
--- a/InCallUI/src/com/android/incallui/async/PausableExecutorImpl.java
+++ b/InCallUI/src/com/android/incallui/async/PausableExecutorImpl.java
@@ -30,6 +30,9 @@
     public void ackMilestoneForTesting() {}
 
     @Override
+    public void ackAllMilestonesForTesting() {}
+
+    @Override
     public void awaitMilestoneForTesting() {}
 
     @Override
diff --git a/InCallUI/tests/src/com/android/incallui/async/SingleProdThreadExecutor.java b/InCallUI/tests/src/com/android/incallui/async/SingleProdThreadExecutor.java
index 839bb2e..5717c94 100644
--- a/InCallUI/tests/src/com/android/incallui/async/SingleProdThreadExecutor.java
+++ b/InCallUI/tests/src/com/android/incallui/async/SingleProdThreadExecutor.java
@@ -30,12 +30,13 @@
 
     private int mMilestonesReached;
     private int mMilestonesAcked;
+    private boolean mHasAckedAllMilestones;
 
     @Override
     public synchronized void milestone() {
         ++mMilestonesReached;
         notify();
-        while (mMilestonesReached > mMilestonesAcked) {
+        while (!mHasAckedAllMilestones && mMilestonesReached > mMilestonesAcked) {
             try {
                 wait();
             } catch (InterruptedException e) {}
@@ -49,8 +50,14 @@
     }
 
     @Override
+    public synchronized void ackAllMilestonesForTesting() {
+        mHasAckedAllMilestones = true;
+        notify();
+    }
+
+    @Override
     public synchronized void awaitMilestoneForTesting() throws InterruptedException {
-        while (mMilestonesReached <= mMilestonesAcked) {
+        while (!mHasAckedAllMilestones && mMilestonesReached <= mMilestonesAcked) {
             wait();
         }
     }
diff --git a/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java b/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java
index 096d211..59611f7 100644
--- a/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java
+++ b/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java
@@ -61,11 +61,8 @@
         super.tearDown();
         // Stop any playing so the InCallTonePlayer isn't stuck waiting for the tone to complete
         mInCallTonePlayer.stop();
-        // 3 milestones in InCallTonePlayer, ack them to ensure that the prod thread doesn't block
-        // forever. It's fine to ack for more milestones than are hit
-        mExecutor.ackMilestoneForTesting();
-        mExecutor.ackMilestoneForTesting();
-        mExecutor.ackMilestoneForTesting();
+        // Ack all milestones to ensure that the prod thread doesn't block forever
+        mExecutor.ackAllMilestonesForTesting();
     }
 
     public void testIsPlayingTone_False() {