Split CountDownLatch in TvInputManagerTest.

- To share a CountDownLatch makes hard to write a complex test.
- Fix a test failure of testCreateSessionFailure().

Change-Id: I4c0371d88ff8564d8d324151f9044268f1ae6277
diff --git a/tests/tests/tv/src/android/tv/cts/TvInputManagerTest.java b/tests/tests/tv/src/android/tv/cts/TvInputManagerTest.java
index bb42488..931b38f 100644
--- a/tests/tests/tv/src/android/tv/cts/TvInputManagerTest.java
+++ b/tests/tests/tv/src/android/tv/cts/TvInputManagerTest.java
@@ -50,7 +50,8 @@
     private TvInputListener mTvInputListener;
     private HandlerThread mCallbackThread;
     private Handler mCallbackHandler;
-    private CountDownLatch mEventLatch;
+    private CountDownLatch mAvailabilityChangeLatch;
+    private CountDownLatch mSessionCreationLatch;
 
     public TvInputManagerTest() {
         mSessionCallback = new MockSessionCreateCallback();
@@ -72,10 +73,10 @@
         mSession = null;
         MockTvInputService.sInstance = null;
         MockTvInputService.sSession = null;
+        MockTvInputService.sFailOnCreateSession = false;
         mCallbackThread = new HandlerThread("CallbackThread");
         mCallbackThread.start();
         mCallbackHandler = new Handler(mCallbackThread.getLooper());
-        mEventLatch = new CountDownLatch(1);
     }
 
     @Override
@@ -102,47 +103,50 @@
     }
 
     public void testCreateSession() throws Exception {
+        mSessionCreationLatch = new CountDownLatch(1);
         // Make the mock service return a session on request.
         mManager.createSession(MockTvInputService.sComponentName, mSessionCallback,
                 mCallbackHandler);
 
         // Verify the result.
-        assertTrue(mEventLatch.await(OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS));
+        assertTrue(mSessionCreationLatch.await(OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertNotNull(mSession);
         mSession.release();
     }
 
     public void testCreateSessionFailure() throws Exception {
+        mSessionCreationLatch = new CountDownLatch(1);
         // Make the mock service return {@code null} on request.
-        MockTvInputService.sSession = null;
+        MockTvInputService.sFailOnCreateSession = true;
         mManager.createSession(MockTvInputService.sComponentName, mSessionCallback,
                 mCallbackHandler);
 
         // Verify the result.
-        assertTrue(mEventLatch.await(OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS));
+        assertTrue(mSessionCreationLatch.await(OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertNull(mSession);
     }
 
     public void testAvailabilityChanged() throws Exception {
         // Register a listener for availability change.
-        MockTvInputService.sInstanceLatch = mEventLatch;
+        MockTvInputService.sInstanceLatch = new CountDownLatch(1);
         mTvInputListener = new MockTvInputListener();
         mManager.registerListener(MockTvInputService.sComponentName, mTvInputListener,
                 mCallbackHandler);
 
         // Make sure that the mock service is created.
         if (MockTvInputService.sInstance == null) {
-            assertTrue(mEventLatch.await(OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS));
+            assertTrue(MockTvInputService.sInstanceLatch.await(
+                    OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS));
         }
 
         // Change the availability of the mock service.
         mAvailability = mManager.getAvailability(MockTvInputService.sComponentName);
         boolean newAvailiability = !mAvailability;
-        mEventLatch = new CountDownLatch(1);
+        mAvailabilityChangeLatch = new CountDownLatch(1);
         MockTvInputService.sInstance.setAvailable(newAvailiability);
 
         // Verify the result.
-        assertTrue(mEventLatch.await(OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS));
+        assertTrue(mAvailabilityChangeLatch.await(OPERATION_TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertEquals(newAvailiability, mAvailability);
     }
 
@@ -151,7 +155,9 @@
         public void onAvailabilityChanged(ComponentName name, boolean isAvailable) {
             assertEquals(MockTvInputService.sComponentName, name);
             mAvailability = isAvailable;
-            mEventLatch.countDown();
+            if (mAvailabilityChangeLatch != null) {
+                mAvailabilityChangeLatch.countDown();
+            }
         }
     }
 
@@ -159,7 +165,9 @@
         @Override
         public void onSessionCreated(Session session) {
             mSession = session;
-            mEventLatch.countDown();
+            if (mSessionCreationLatch != null) {
+                mSessionCreationLatch.countDown();
+            }
         }
     }
 
@@ -169,10 +177,13 @@
         static MockTvInputService sInstance;
         static TvInputSessionImpl sSession;
 
+        static boolean sFailOnCreateSession;
+
         @Override
         public void onCreate() {
             super.onCreate();
             sInstance = this;
+            sSession = new MockTvInputSessionImpl();
             if (sInstanceLatch != null) {
                 sInstanceLatch.countDown();
             }
@@ -180,8 +191,7 @@
 
         @Override
         public TvInputSessionImpl onCreateSession() {
-            sSession = new MockTvInputSessionImpl();
-            return sSession;
+            return sFailOnCreateSession ? null : sSession;
         }
 
         class MockTvInputSessionImpl extends TvInputSessionImpl {