6/ Update pip to use shell main thread

- Remove some currently unused pip interface methods
- Remove some usages of handler
- Remove update thread (will eventually run on shell main thread)

Bug: 161979899
Test: atest WMShellUnitTests
Change-Id: If97e5182e396029120f0d0fb9e730ece93cddcc8
Signed-off-by: Winson Chung <winsonc@google.com>
This commit is contained in:
Winson Chung
2021-01-11 21:22:24 -08:00
parent 77bb0b7291
commit d19e69d0bc
27 changed files with 603 additions and 676 deletions

View File

@@ -46,7 +46,7 @@ public class TestShellExecutor implements ShellExecutor {
@Override
public boolean hasCallback(Runnable r) {
return !mRunnables.isEmpty();
return mRunnables.contains(r);
}
@Override
@@ -55,8 +55,8 @@ public class TestShellExecutor implements ShellExecutor {
}
public void flushAll() {
for (int i = mRunnables.size() - 1; i >= 0; --i) {
mRunnables.get(i).run();
for (Runnable r : mRunnables) {
r.run();
}
mRunnables.clear();
}

View File

@@ -43,7 +43,9 @@ import android.window.WindowContainerToken;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.TestShellExecutor;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.pip.phone.PhonePipMenuController;
import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
@@ -71,6 +73,7 @@ public class PipTaskOrganizerTest extends ShellTestCase {
@Mock private PipUiEventLogger mMockPipUiEventLogger;
@Mock private Optional<LegacySplitScreen> mMockOptionalSplitScreen;
@Mock private ShellTaskOrganizer mMockShellTaskOrganizer;
private TestShellExecutor mMainExecutor;
private PipBoundsState mPipBoundsState;
private ComponentName mComponent1;
@@ -82,10 +85,12 @@ public class PipTaskOrganizerTest extends ShellTestCase {
mComponent1 = new ComponentName(mContext, "component1");
mComponent2 = new ComponentName(mContext, "component2");
mPipBoundsState = new PipBoundsState(mContext);
mMainExecutor = new TestShellExecutor();
mSpiedPipTaskOrganizer = spy(new PipTaskOrganizer(mContext, mPipBoundsState,
mMockPipBoundsAlgorithm, mMockPhonePipMenuController,
mMockPipSurfaceTransactionHelper, mMockOptionalSplitScreen, mMockdDisplayController,
mMockPipUiEventLogger, mMockShellTaskOrganizer));
mMockPipUiEventLogger, mMockShellTaskOrganizer, mMainExecutor));
mMainExecutor.flushAll();
preparePipTaskOrg();
}

View File

@@ -24,18 +24,15 @@ import static android.view.MotionEvent.ACTION_UP;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import androidx.test.filters.SmallTest;
import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.TestShellExecutor;
import org.junit.Before;
import org.junit.Test;
@@ -45,23 +42,22 @@ import java.util.concurrent.CountDownLatch;
@RunWith(AndroidTestingRunner.class)
@SmallTest
@RunWithLooper
public class PipTouchStateTest extends ShellTestCase {
private PipTouchState mTouchState;
private CountDownLatch mDoubleTapCallbackTriggeredLatch;
private CountDownLatch mHoverExitCallbackTriggeredLatch;
private TestShellExecutor mShellMainExecutor;
@Before
public void setUp() throws Exception {
mShellMainExecutor = new TestShellExecutor();
mDoubleTapCallbackTriggeredLatch = new CountDownLatch(1);
mHoverExitCallbackTriggeredLatch = new CountDownLatch(1);
mTouchState = new PipTouchState(ViewConfiguration.get(getContext()),
Handler.createAsync(Looper.myLooper()), () -> {
mDoubleTapCallbackTriggeredLatch.countDown();
}, () -> {
mHoverExitCallbackTriggeredLatch.countDown();
});
mDoubleTapCallbackTriggeredLatch::countDown,
mHoverExitCallbackTriggeredLatch::countDown,
mShellMainExecutor);
assertFalse(mTouchState.isDoubleTap());
assertFalse(mTouchState.isWaitingForDoubleTap());
}
@@ -91,9 +87,7 @@ public class PipTouchStateTest extends ShellTestCase {
assertTrue(mTouchState.getDoubleTapTimeoutCallbackDelay() == 10);
mTouchState.scheduleDoubleTapTimeoutCallback();
// TODO: Remove this sleep. Its only being added because it speeds up this test a bit.
Thread.sleep(15);
TestableLooper.get(this).processAllMessages();
mShellMainExecutor.flushAll();
assertTrue(mDoubleTapCallbackTriggeredLatch.getCount() == 0);
}
@@ -128,17 +122,13 @@ public class PipTouchStateTest extends ShellTestCase {
@Test
public void testHoverExitTimeout_timeoutCallbackCalled() throws Exception {
mTouchState.scheduleHoverExitTimeoutCallback();
// TODO: Remove this sleep. Its only being added because it speeds up this test a bit.
Thread.sleep(50);
TestableLooper.get(this).processAllMessages();
mShellMainExecutor.flushAll();
assertTrue(mHoverExitCallbackTriggeredLatch.getCount() == 0);
}
@Test
public void testHoverExitTimeout_timeoutCallbackNotCalled() throws Exception {
mTouchState.scheduleHoverExitTimeoutCallback();
TestableLooper.get(this).processAllMessages();
assertTrue(mHoverExitCallbackTriggeredLatch.getCount() == 1);
}
@@ -147,14 +137,12 @@ public class PipTouchStateTest extends ShellTestCase {
mTouchState.scheduleHoverExitTimeoutCallback();
mTouchState.onTouchEvent(createMotionEvent(ACTION_BUTTON_PRESS, SystemClock.uptimeMillis(),
0, 0));
// TODO: Remove this sleep. Its only being added because it speeds up this test a bit.
Thread.sleep(50);
TestableLooper.get(this).processAllMessages();
mShellMainExecutor.flushAll();
assertTrue(mHoverExitCallbackTriggeredLatch.getCount() == 1);
}
private MotionEvent createMotionEvent(int action, long eventTime, float x, float y) {
return MotionEvent.obtain(0, eventTime, action, x, y, 0);
}
}