Files
lawnchair/tests/src/com/android/launcher3/util/Wait.java
vadimt bf41844ad4 Allowing having only SysUI views before pressHome()
pressHome can be called just after another test that
can, for example, pull down the status bar to
occupy the whole screen.

Bug: 201005881
Test: presubmit
Change-Id: Ifc0ae4d66d573720f70aa4e734da03add3d86b57
2021-09-23 19:19:53 -07:00

67 lines
1.9 KiB
Java

package com.android.launcher3.util;
import android.os.SystemClock;
import android.util.Log;
import com.android.launcher3.tapl.LauncherInstrumentation;
import org.junit.Assert;
import java.util.function.Supplier;
/**
* A utility class for waiting for a condition to be true.
*/
public class Wait {
private static final long DEFAULT_SLEEP_MS = 200;
public static void atMost(String message, Condition condition, long timeout,
LauncherInstrumentation launcher) {
atMost(() -> message, condition, timeout, DEFAULT_SLEEP_MS, launcher);
}
public static void atMost(Supplier<String> message, Condition condition, long timeout,
LauncherInstrumentation launcher) {
atMost(message, condition, timeout, DEFAULT_SLEEP_MS, launcher);
}
public static void atMost(Supplier<String> message, Condition condition, long timeout,
long sleepMillis,
LauncherInstrumentation launcher) {
final long startTime = SystemClock.uptimeMillis();
long endTime = startTime + timeout;
Log.d("Wait", "atMost: " + startTime + " - " + endTime);
while (SystemClock.uptimeMillis() < endTime) {
try {
if (condition.isTrue()) {
return;
}
} catch (Throwable t) {
throw new RuntimeException(t);
}
SystemClock.sleep(sleepMillis);
}
// Check once more before returning false.
try {
if (condition.isTrue()) {
return;
}
} catch (Throwable t) {
throw new RuntimeException(t);
}
Log.d("Wait", "atMost: timed out: " + SystemClock.uptimeMillis());
launcher.checkForAnomaly(false, false);
Assert.fail(message.get());
}
/**
* Interface representing a generic condition
*/
public interface Condition {
boolean isTrue() throws Throwable;
}
}