From 91429f1b036df2c3d3ef07bc92089ea7bba5746c Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sun, 25 Feb 2018 14:49:35 +0100 Subject: [PATCH] Fix a crash --- .../util/AndroidHandlerThread.kt | 162 +++++++++++------- 1 file changed, 98 insertions(+), 64 deletions(-) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/AndroidHandlerThread.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/AndroidHandlerThread.kt index 3af062e48..eda3dd352 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/AndroidHandlerThread.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/AndroidHandlerThread.kt @@ -8,7 +8,8 @@ import android.util.Printer class AndroidHandlerThread(name: String) : HandlerThread(name) { @Volatile - private var handler: Handler? = null + private var handler: Handler? = + null fun started(): AndroidHandlerThread { onCreate() @@ -41,97 +42,130 @@ class AndroidHandlerThread(name: String) : HandlerThread(name) { } } - fun handleMessage(msg: Message) - = handler?.handleMessage(msg) ?: throw RuntimeException("Thread not started") + fun handleMessage(msg: Message) = + started().let { handler?.handleMessage(msg) } + ?: throw RuntimeException("Thread not started") - fun dispatchMessage(msg: Message) - = handler?.dispatchMessage(msg) ?: throw RuntimeException("Thread not started") + fun dispatchMessage(msg: Message) = + started().let { handler?.dispatchMessage(msg) } + ?: throw RuntimeException("Thread not started") - fun getMessageName(message: Message): String - = handler?.getMessageName(message) ?: throw RuntimeException("Thread not started") + fun getMessageName(message: Message): String = + started().let { handler?.getMessageName(message) } + ?: throw RuntimeException("Thread not started") - fun obtainMessage(): Message - = handler?.obtainMessage() ?: throw RuntimeException("Thread not started") + fun obtainMessage(): Message = + started().let { handler?.obtainMessage() } + ?: throw RuntimeException("Thread not started") - fun obtainMessage(what: Int): Message - = handler?.obtainMessage(what) ?: throw RuntimeException("Thread not started") + fun obtainMessage(what: Int): Message = + started().let { handler?.obtainMessage(what) } + ?: throw RuntimeException("Thread not started") - fun obtainMessage(what: Int, obj: Any): Message - = handler?.obtainMessage(what, obj) ?: throw RuntimeException("Thread not started") + fun obtainMessage(what: Int, obj: Any): Message = + started().let { handler?.obtainMessage(what, obj) } + ?: throw RuntimeException("Thread not started") - fun obtainMessage(what: Int, arg1: Int, arg2: Int): Message - = handler?.obtainMessage(what, arg1, arg2) ?: throw RuntimeException("Thread not started") + fun obtainMessage(what: Int, arg1: Int, arg2: Int): Message = + started().let { handler?.obtainMessage(what, arg1, arg2) } + ?: throw RuntimeException("Thread not started") - fun obtainMessage(what: Int, arg1: Int, arg2: Int, obj: Any): Message - = handler?.obtainMessage(what, arg1, arg2, obj) ?: throw RuntimeException("Thread not started") + fun obtainMessage(what: Int, arg1: Int, arg2: Int, obj: Any): Message = + started().let { handler?.obtainMessage(what, arg1, arg2, obj) } + ?: throw RuntimeException("Thread not started") - fun post(r: () -> Unit): Boolean - = handler?.post(r) ?: throw RuntimeException("Thread not started") + fun post(r: () -> Unit): Boolean = + started().let { handler?.post(r) } + ?: throw RuntimeException("Thread not started") - fun postAtTime(r: () -> Unit, uptimeMillis: Long): Boolean - = handler?.postAtTime(r, uptimeMillis) ?: throw RuntimeException("Thread not started") + fun postAtTime(r: () -> Unit, uptimeMillis: Long): Boolean = + started().let { handler?.postAtTime(r, uptimeMillis) } + ?: throw RuntimeException("Thread not started") - fun postAtTime(r: () -> Unit, token: Any, uptimeMillis: Long): Boolean - = handler?.postAtTime(r, token, uptimeMillis) ?: throw RuntimeException("Thread not started") + fun postAtTime(r: () -> Unit, token: Any, uptimeMillis: Long): Boolean = + started().let { handler?.postAtTime(r, token, uptimeMillis) } + ?: throw RuntimeException("Thread not started") - fun postDelayed(r: () -> Unit, delayMillis: Long): Boolean - = handler?.postDelayed(r, delayMillis) ?: throw RuntimeException("Thread not started") + fun postDelayed(r: () -> Unit, delayMillis: Long): Boolean = + started().let { handler?.postDelayed(r, delayMillis) } + ?: throw RuntimeException("Thread not started") - fun postAtFrontOfQueue(r: () -> Unit): Boolean - = handler?.postAtFrontOfQueue(r) ?: throw RuntimeException("Thread not started") + fun postAtFrontOfQueue(r: () -> Unit): Boolean = + started().let { handler?.postAtFrontOfQueue(r) } + ?: throw RuntimeException("Thread not started") - fun removeCallbacks(r: () -> Unit) - = handler?.removeCallbacks(r) ?: throw RuntimeException("Thread not started") + fun removeCallbacks(r: () -> Unit) = + started().let { handler?.removeCallbacks(r) } + ?: throw RuntimeException("Thread not started") - fun removeCallbacks(r: () -> Unit, token: Any) - = handler?.removeCallbacks(r, token) ?: throw RuntimeException("Thread not started") + fun removeCallbacks(r: () -> Unit, token: Any) = + started().let { handler?.removeCallbacks(r, token) } + ?: throw RuntimeException("Thread not started") - fun sendMessage(msg: Message): Boolean - = handler?.sendMessage(msg) ?: throw RuntimeException("Thread not started") + fun sendMessage(msg: Message): Boolean = + started().let { handler?.sendMessage(msg) } + ?: throw RuntimeException("Thread not started") - fun sendEmptyMessage(what: Int): Boolean - = handler?.sendEmptyMessage(what) ?: throw RuntimeException("Thread not started") + fun sendEmptyMessage(what: Int): Boolean = + started().let { handler?.sendEmptyMessage(what) } + ?: throw RuntimeException("Thread not started") - fun sendEmptyMessageDelayed(what: Int, delayMillis: Long): Boolean - = handler?.sendEmptyMessageDelayed(what, delayMillis) ?: throw RuntimeException( - "Thread not started" - ) + fun sendEmptyMessageDelayed(what: Int, delayMillis: Long): Boolean = + started().let { handler?.sendEmptyMessageDelayed(what, delayMillis) } + ?: throw RuntimeException( + "Thread not started" + ) - fun sendEmptyMessageAtTime(what: Int, uptimeMillis: Long): Boolean - = handler?.sendEmptyMessageAtTime(what, uptimeMillis) ?: throw RuntimeException( - "Thread not started" - ) + fun sendEmptyMessageAtTime(what: Int, uptimeMillis: Long): Boolean = + started().let { handler?.sendEmptyMessageAtTime(what, uptimeMillis) } + ?: throw RuntimeException( + "Thread not started" + ) - fun sendMessageDelayed(msg: Message, delayMillis: Long): Boolean - = handler?.sendMessageDelayed(msg, delayMillis) ?: throw RuntimeException("Thread not started") + fun sendMessageDelayed(msg: Message, delayMillis: Long): Boolean = + started().let { handler?.sendMessageDelayed(msg, delayMillis) } + ?: throw RuntimeException("Thread not started") - fun sendMessageAtTime(msg: Message, uptimeMillis: Long): Boolean - = handler?.sendMessageAtTime(msg, uptimeMillis) ?: throw RuntimeException("Thread not started") + fun sendMessageAtTime(msg: Message, uptimeMillis: Long): Boolean = + started().let { handler?.sendMessageAtTime(msg, uptimeMillis) } + ?: throw RuntimeException("Thread not started") - fun sendMessageAtFrontOfQueue(msg: Message): Boolean - = handler?.sendMessageAtFrontOfQueue(msg) ?: throw RuntimeException("Thread not started") + fun sendMessageAtFrontOfQueue(msg: Message): Boolean = + started().let { handler?.sendMessageAtFrontOfQueue(msg) } + ?: throw RuntimeException("Thread not started") - fun removeMessages(what: Int) - = handler?.removeMessages(what) ?: throw RuntimeException("Thread not started") + fun removeMessages(what: Int) = + started().let { handler?.removeMessages(what) } + ?: throw RuntimeException("Thread not started") - fun removeMessages(what: Int, `object`: Any) - = handler?.removeMessages(what, `object`) ?: throw RuntimeException("Thread not started") + fun removeMessages(what: Int, `object`: Any) = + started().let { handler?.removeMessages(what, `object`) } + ?: throw RuntimeException("Thread not started") - fun removeCallbacksAndMessages(token: Any) - = handler?.removeCallbacksAndMessages(token) ?: throw RuntimeException("Thread not started") + fun removeCallbacksAndMessages(token: Any) = + started().let { handler?.removeCallbacksAndMessages(token) } + ?: throw RuntimeException("Thread not started") - fun hasMessages(what: Int): Boolean - = handler?.hasMessages(what) ?: throw RuntimeException("Thread not started") + fun hasMessages(what: Int): Boolean = + started().let { handler?.hasMessages(what) } + ?: throw RuntimeException("Thread not started") - fun hasMessages(what: Int, `object`: Any): Boolean - = handler?.hasMessages(what, `object`) ?: throw RuntimeException("Thread not started") + fun hasMessages(what: Int, `object`: Any): Boolean = + started().let { handler?.hasMessages(what, `object`) } + ?: throw RuntimeException("Thread not started") val handlerLooper: Looper - get() = handler?.looper ?: throw RuntimeException("Thread not started") + get() - fun dump(pw: Printer, prefix: String) - = handler?.dump(pw, prefix) ?: throw RuntimeException("Thread not started") + = + started().let { handler?.looper } + ?: throw RuntimeException("Thread not started") - override fun toString(): String - = handler?.toString() ?: throw RuntimeException("Thread not started") + fun dump(pw: Printer, prefix: String) = + started().let { handler?.dump(pw, prefix) } + ?: throw RuntimeException("Thread not started") + + override fun toString(): String = + started().let { handler?.toString() } + ?: throw RuntimeException("Thread not started") } -- GitLab