in core/src/main/java/com/facebook/testing/screenshot/internal/ScreenshotImpl.java [319:352]
private <T> T runCallableOnUiThread(final Callable<T> callable) {
final T[] ret = (T[]) new Object[1];
final Exception[] e = new Exception[1];
final Object lock = new Object();
Handler handler = new Handler(Looper.getMainLooper());
synchronized (lock) {
handler.post(
new Runnable() {
@Override
public void run() {
try {
ret[0] = callable.call();
} catch (Exception ee) {
e[0] = ee;
}
synchronized (lock) {
lock.notifyAll();
}
}
});
try {
lock.wait();
} catch (InterruptedException ee) {
throw new RuntimeException(ee);
}
}
if (e[0] != null) {
throw new RuntimeException(e[0]);
}
return ret[0];
}