From e9e366875992baf60caf5baaec302e2f1de013b2 Mon Sep 17 00:00:00 2001 From: Magnus Jedvert Date: Mon, 12 Oct 2015 09:15:45 +0200 Subject: [PATCH] Android: Add helper function to synchronously execute Callables on Handler TBR=hbos Review URL: https://codereview.webrtc.org/1398283002 . Cr-Commit-Position: refs/heads/master@{#10246} --- .../java/android/org/webrtc/ThreadUtils.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/talk/app/webrtc/java/android/org/webrtc/ThreadUtils.java b/talk/app/webrtc/java/android/org/webrtc/ThreadUtils.java index 5e6cc52895..33402f700b 100644 --- a/talk/app/webrtc/java/android/org/webrtc/ThreadUtils.java +++ b/talk/app/webrtc/java/android/org/webrtc/ThreadUtils.java @@ -27,6 +27,9 @@ package org.webrtc; +import android.os.Handler; + +import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; final class ThreadUtils { @@ -100,4 +103,27 @@ final class ThreadUtils { } }); } + + /** + * Post |callable| to |handler| and wait for the result. + */ + public static V invokeUninterruptibly(final Handler handler, final Callable callable) { + class Result { + public V value; + } + final Result result = new Result(); + final CountDownLatch barrier = new CountDownLatch(1); + handler.post(new Runnable() { + @Override public void run() { + try { + result.value = callable.call(); + } catch (Exception e) { + throw new RuntimeException("Callable threw exception: " + e); + } + barrier.countDown(); + } + }); + awaitUninterruptibly(barrier); + return result.value; + } }