| package com.android.launcher3.util; |
| |
| import androidx.test.uiautomator.UiObject2; |
| |
| import com.android.launcher3.MainThreadExecutor; |
| |
| import java.util.concurrent.CountDownLatch; |
| import java.util.concurrent.TimeUnit; |
| import java.util.concurrent.atomic.AtomicBoolean; |
| |
| public interface Condition { |
| |
| boolean isTrue() throws Throwable; |
| |
| /** |
| * Converts the condition to be run on UI thread. |
| */ |
| static Condition runOnUiThread(final Condition condition) { |
| final MainThreadExecutor executor = new MainThreadExecutor(); |
| return () -> { |
| final AtomicBoolean value = new AtomicBoolean(false); |
| final Throwable[] exceptions = new Throwable[1]; |
| final CountDownLatch latch = new CountDownLatch(1); |
| executor.execute(() -> { |
| try { |
| value.set(condition.isTrue()); |
| } catch (Throwable e) { |
| exceptions[0] = e; |
| } |
| |
| }); |
| latch.await(1, TimeUnit.SECONDS); |
| if (exceptions[0] != null) { |
| throw exceptions[0]; |
| } |
| return value.get(); |
| }; |
| } |
| |
| static Condition minChildCount(final UiObject2 obj, final int childCount) { |
| return () -> obj.getChildCount() >= childCount; |
| } |
| } |