diff --git a/travis/configs/twidere_private_config.tar.gz.enc b/travis/configs/twidere_private_config.tar.gz.enc index e553529d1..5cc7a8671 100644 Binary files a/travis/configs/twidere_private_config.tar.gz.enc and b/travis/configs/twidere_private_config.tar.gz.enc differ diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/UserAgentUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/UserAgentUtils.java index 9ca29be4f..98db59bba 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/UserAgentUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/UserAgentUtils.java @@ -31,6 +31,11 @@ import android.webkit.WebSettings; import android.webkit.WebView; import java.lang.reflect.Constructor; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; /** * Created by mariotaku on 15/4/12. @@ -73,48 +78,32 @@ public class UserAgentUtils { @WorkerThread @Nullable - public static String getDefaultUserAgentStringSafe(Context context) { + public static String getDefaultUserAgentStringSafe(final Context context) { if (Looper.myLooper() == Looper.getMainLooper()) { //noinspection ResourceType return getDefaultUserAgentString(context); } final Handler handler = new Handler(Looper.getMainLooper()); + FutureTask task = new FutureTask<>(new Callable() { + @Override + public String call() throws Exception { + return getDefaultUserAgentString(context); + } + }); try { - final FetchUserAgentRunnable runnable = new FetchUserAgentRunnable(context); - handler.post(runnable); - runnable.waitForExecution(); - return runnable.getUserAgent(); + handler.post(task); + return task.get(1, TimeUnit.SECONDS); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } catch (ExecutionException e) { + throw new RuntimeException(e); + } catch (TimeoutException e) { + throw new RuntimeException(e); } finally { handler.removeCallbacksAndMessages(null); } } - private static class FetchUserAgentRunnable implements Runnable { - - private final Context context; - private String userAgent; - private boolean userAgentSet; - - public FetchUserAgentRunnable(Context context) { - this.context = context; - } - - @Override - public void run() { - userAgent = getDefaultUserAgentString(context); - userAgentSet = true; - } - - public String getUserAgent() { - return userAgent; - } - - public void waitForExecution() { - //noinspection StatementWithEmptyBody - while (!userAgentSet) ; - } - } - @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) static class NewApiWrapper { private NewApiWrapper() { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/AccountExtensions.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/AccountExtensions.kt index 546579823..860de0127 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/AccountExtensions.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/AccountExtensions.kt @@ -169,7 +169,7 @@ internal object AccountDataQueue { } else handler.post { future.run() } - return future.get() + return future.get(1, TimeUnit.SECONDS) } fun peekAuthToken(manager: AccountManager, account: Account, authTokenType: String): String? { @@ -179,7 +179,7 @@ internal object AccountDataQueue { } else handler.post { future.run() } - return future.get() + return future.get(1, TimeUnit.SECONDS) } }