package it.niedermann.nextcloud.deck; import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; public class TestUtil { private TestUtil() { // Util class } /** * @see Source */ public static T getOrAwaitValue(final LiveData liveData) throws InterruptedException { final Object[] data = new Object[1]; final CountDownLatch latch = new CountDownLatch(1); Observer observer = new Observer() { @Override public void onChanged(@Nullable T o) { data[0] = o; latch.countDown(); liveData.removeObserver(this); } }; liveData.observeForever(observer); // Don't wait indefinitely if the LiveData is not set. if (!latch.await(2, TimeUnit.SECONDS)) { throw new RuntimeException("LiveData value was never set."); } //noinspection unchecked return (T) data[0]; } }