diff options
author | Vitalii Tomkiv <vitalit@google.com> | 2016-10-04 14:08:56 -0700 |
---|---|---|
committer | Vitalii Tomkiv <vitalit@google.com> | 2016-10-04 18:04:10 -0700 |
commit | d15d88777f07265b258f637e4967942d98bd6333 (patch) | |
tree | af0c12da14bcbdee5974fae1ad7699fea7b89dfa /tests/android_support_car_api_test | |
parent | d72b53500006e84b0c69e650878267c693c164a3 (diff) | |
download | Car-d15d88777f07265b258f637e4967942d98bd6333.tar.gz |
Change CarAppFocusManager to be asynchronous
bug: 31867090
Test: run tests
Change-Id: I5ea7719460ee29934efde8aa77c7a367bc86eb12
Diffstat (limited to 'tests/android_support_car_api_test')
2 files changed, 61 insertions, 13 deletions
diff --git a/tests/android_support_car_api_test/src/com/android/support/car/apitest/CarAppFocusManagerTest.java b/tests/android_support_car_api_test/src/com/android/support/car/apitest/CarAppFocusManagerTest.java index 6b5ec52eca..de66cbbefb 100644 --- a/tests/android_support_car_api_test/src/com/android/support/car/apitest/CarAppFocusManagerTest.java +++ b/tests/android_support_car_api_test/src/com/android/support/car/apitest/CarAppFocusManagerTest.java @@ -36,7 +36,7 @@ public class CarAppFocusManagerTest extends CarApiTestBase { // Request all application focuses and abandon them to ensure no active context is present // when test starts. - FocusOwnershipLostListener owner = new FocusOwnershipLostListener(); + FocusOwnershipCallback owner = new FocusOwnershipCallback(); mManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner); mManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, owner); mManager.abandonAppFocus(owner); @@ -82,14 +82,17 @@ public class CarAppFocusManagerTest extends CarApiTestBase { FocusChangedListener change = new FocusChangedListener(); FocusChangedListener change2 = new FocusChangedListener(); - FocusOwnershipLostListener owner = new FocusOwnershipLostListener(); - FocusOwnershipLostListener owner2 = new FocusOwnershipLostListener(); + FocusOwnershipCallback owner = new FocusOwnershipCallback(); + FocusOwnershipCallback owner2 = new FocusOwnershipCallback(); mManager.addFocusListener(change, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION); mManager.addFocusListener(change, CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND); manager2.addFocusListener(change2, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION); manager2.addFocusListener(change2, CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND); mManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner); + assertTrue(owner.waitForOwnershipGrantAndAssert(DEFAULT_WAIT_TIMEOUT_MS, + CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION)); + assertTrue(mManager.isOwningFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner)); assertFalse(mManager.isOwningFocus(CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, owner)); assertFalse(manager2.isOwningFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner2)); @@ -101,6 +104,8 @@ public class CarAppFocusManagerTest extends CarApiTestBase { CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, true)); mManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, owner); + assertTrue(owner.waitForOwnershipGrantAndAssert(DEFAULT_WAIT_TIMEOUT_MS, + CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND)); assertTrue(mManager.isOwningFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner)); assertTrue(mManager.isOwningFocus(CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, owner)); assertFalse(manager2.isOwningFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner2)); @@ -115,12 +120,18 @@ public class CarAppFocusManagerTest extends CarApiTestBase { change.reset(); change2.reset(); mManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner); + assertTrue(owner.waitForOwnershipGrantAndAssert(DEFAULT_WAIT_TIMEOUT_MS, + CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION)); + assertFalse(change2.waitForFocusChangeAndAssert(DEFAULT_WAIT_TIMEOUT_MS, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, true)); assertFalse(change.waitForFocusChangeAndAssert(DEFAULT_WAIT_TIMEOUT_MS, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, true)); manager2.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner2); + assertTrue(owner2.waitForOwnershipGrantAndAssert(DEFAULT_WAIT_TIMEOUT_MS, + CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION)); + assertFalse(mManager.isOwningFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner)); assertTrue(mManager.isOwningFocus(CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, owner)); assertTrue(manager2.isOwningFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner2)); @@ -174,12 +185,15 @@ public class CarAppFocusManagerTest extends CarApiTestBase { FocusChangedListener listener = new FocusChangedListener(); FocusChangedListener listener2 = new FocusChangedListener(); - FocusOwnershipLostListener owner = new FocusOwnershipLostListener(); + FocusOwnershipCallback owner = new FocusOwnershipCallback(); mManager.addFocusListener(listener, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION); mManager.addFocusListener(listener, CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND); manager2.addFocusListener(listener2, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION); mManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner); + assertTrue(owner.waitForOwnershipGrantAndAssert(DEFAULT_WAIT_TIMEOUT_MS, + CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION)); + assertTrue(listener.waitForFocusChangeAndAssert(DEFAULT_WAIT_TIMEOUT_MS, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, true)); assertTrue(listener2.waitForFocusChangeAndAssert(DEFAULT_WAIT_TIMEOUT_MS, @@ -188,6 +202,9 @@ public class CarAppFocusManagerTest extends CarApiTestBase { listener.reset(); listener2.reset(); mManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, owner); + assertTrue(owner.waitForOwnershipGrantAndAssert(DEFAULT_WAIT_TIMEOUT_MS, + CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND)); + assertTrue(listener.waitForFocusChangeAndAssert(DEFAULT_WAIT_TIMEOUT_MS, CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, true)); assertFalse(listener2.waitForFocusChangeAndAssert(DEFAULT_WAIT_TIMEOUT_MS, @@ -213,12 +230,15 @@ public class CarAppFocusManagerTest extends CarApiTestBase { public void testMultipleChangeListenersPerManager() throws Exception { FocusChangedListener listener = new FocusChangedListener(); FocusChangedListener listener2 = new FocusChangedListener(); - FocusOwnershipLostListener owner = new FocusOwnershipLostListener(); + FocusOwnershipCallback owner = new FocusOwnershipCallback(); mManager.addFocusListener(listener, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION); mManager.addFocusListener(listener, CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND); mManager.addFocusListener(listener2, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION); mManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, owner); + assertTrue(owner.waitForOwnershipGrantAndAssert(DEFAULT_WAIT_TIMEOUT_MS, + CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION)); + assertTrue(listener.waitForFocusChangeAndAssert(DEFAULT_WAIT_TIMEOUT_MS, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, true)); assertTrue(listener2.waitForFocusChangeAndAssert(DEFAULT_WAIT_TIMEOUT_MS, @@ -227,6 +247,9 @@ public class CarAppFocusManagerTest extends CarApiTestBase { listener.reset(); listener2.reset(); mManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, owner); + assertTrue(owner.waitForOwnershipGrantAndAssert(DEFAULT_WAIT_TIMEOUT_MS, + CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND)); + assertTrue(listener.waitForFocusChangeAndAssert(DEFAULT_WAIT_TIMEOUT_MS, CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, true)); assertFalse(listener2.waitForFocusChangeAndAssert(DEFAULT_WAIT_TIMEOUT_MS, @@ -279,11 +302,14 @@ public class CarAppFocusManagerTest extends CarApiTestBase { } } - private class FocusOwnershipLostListener - implements CarAppFocusManager.OnAppFocusOwnershipLostListener { + private class FocusOwnershipCallback + implements CarAppFocusManager.OnAppFocusOwnershipCallback { private int mLastLossEvent; private final Semaphore mLossEventWait = new Semaphore(0); + private int mLastGrantEvent; + private final Semaphore mGrantEventWait = new Semaphore(0); + public boolean waitForOwnershipLossAndAssert(long timeoutMs, int expectedAppType) throws Exception { if (!mLossEventWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) { @@ -293,6 +319,15 @@ public class CarAppFocusManagerTest extends CarApiTestBase { return true; } + public boolean waitForOwnershipGrantAndAssert(long timeoutMs, int expectedAppType) + throws Exception { + if (!mGrantEventWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) { + return false; + } + assertEquals(expectedAppType, mLastGrantEvent); + return true; + } + @Override public void onAppFocusOwnershipLost(CarAppFocusManager manager, int appType) { Log.i(TAG, "onAppFocusOwnershipLost " + appType); @@ -300,5 +335,13 @@ public class CarAppFocusManagerTest extends CarApiTestBase { mLastLossEvent = appType; mLossEventWait.release(); } + + @Override + public void onAppFocusOwnershipGranted(CarAppFocusManager manager, int appType) { + Log.i(TAG, "onAppFocusOwnershipGranted " + appType); + assertMainThread(); + mLastGrantEvent = appType; + mGrantEventWait.release(); + } } } diff --git a/tests/android_support_car_api_test/src/com/android/support/car/apitest/CarNavigationStatusManagerTest.java b/tests/android_support_car_api_test/src/com/android/support/car/apitest/CarNavigationStatusManagerTest.java index adebe70d39..718d1a8196 100644 --- a/tests/android_support_car_api_test/src/com/android/support/car/apitest/CarNavigationStatusManagerTest.java +++ b/tests/android_support_car_api_test/src/com/android/support/car/apitest/CarNavigationStatusManagerTest.java @@ -20,7 +20,7 @@ import static android.support.car.CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION; import android.support.car.Car; import android.support.car.CarAppFocusManager; import android.support.car.CarAppFocusManager.OnAppFocusChangedListener; -import android.support.car.CarAppFocusManager.OnAppFocusOwnershipLostListener; +import android.support.car.CarAppFocusManager.OnAppFocusOwnershipCallback; import android.support.car.navigation.CarNavigationInstrumentCluster; import android.support.car.navigation.CarNavigationStatusManager; @@ -83,15 +83,20 @@ public class CarNavigationStatusManagerTest extends CarApiTestBase { // Nothing to do here. } }, APP_FOCUS_TYPE_NAVIGATION); - CarAppFocusManager.OnAppFocusOwnershipLostListener - ownershipListener = new OnAppFocusOwnershipLostListener() { + CarAppFocusManager.OnAppFocusOwnershipCallback + ownershipCallback = new OnAppFocusOwnershipCallback() { @Override - public void onAppFocusOwnershipLost(CarAppFocusManager manager, int focus) { + public void onAppFocusOwnershipLost(CarAppFocusManager manager, int focusType) { + // Nothing to do here. + } + + @Override + public void onAppFocusOwnershipGranted(CarAppFocusManager manager, int focusType) { // Nothing to do here. } }; - mCarAppFocusManager.requestAppFocus(APP_FOCUS_TYPE_NAVIGATION, ownershipListener); - assertTrue(mCarAppFocusManager.isOwningFocus(APP_FOCUS_TYPE_NAVIGATION, ownershipListener)); + mCarAppFocusManager.requestAppFocus(APP_FOCUS_TYPE_NAVIGATION, ownershipCallback); + assertTrue(mCarAppFocusManager.isOwningFocus(APP_FOCUS_TYPE_NAVIGATION, ownershipCallback)); // TODO: we should use mocked HAL to be able to verify this, right now just make sure that // it is not crashing and logcat has appropriate traces. |