From 6d27e0dfe92751058a01d151c221c4e39839d8d3 Mon Sep 17 00:00:00 2001 From: Graham Jones Date: Wed, 23 Dec 2015 22:14:19 +0000 Subject: [PATCH] Forced faultTimer to run on UI thread using handler, because otherwise using pebble datasource gave an error about not having run Looper.prepare... --- .../uk/org/openseizuredetector/SdServer.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/uk/org/openseizuredetector/SdServer.java b/app/src/main/java/uk/org/openseizuredetector/SdServer.java index 9801a2a..9c9d9c1 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdServer.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdServer.java @@ -42,6 +42,7 @@ import android.media.AudioManager; import android.media.ToneGenerator; import android.os.CountDownTimer; import android.os.Environment; +import android.os.Handler; import android.os.HandlerThread; import android.os.Binder; import android.os.IBinder; @@ -106,6 +107,7 @@ public class SdServer extends Service implements SdDataReceiver { private boolean mLogData = false; private File mOutFile; private OsdUtil mUtil; + private Handler mHandler; private final IBinder mBinder = new SdBinder(); @@ -135,6 +137,10 @@ public class SdServer extends Service implements SdDataReceiver { return mBinder; } + /** used to make suer timers run on UI thread */ + private void runOnUiThread(Runnable runnable) { + mHandler.post(runnable); + } /** * onCreate() - called when services is created. Starts message @@ -143,6 +149,7 @@ public class SdServer extends Service implements SdDataReceiver { @Override public void onCreate() { Log.v(TAG, "onCreate()"); + mHandler = new Handler(); mUtil = new OsdUtil(getApplicationContext()); @@ -741,11 +748,15 @@ public class SdServer extends Service implements SdDataReceiver { Log.v(TAG, "startFaultTimer(): fault timer already running - not doing anything."); } else { Log.v(TAG, "startFaultTimer(): starting fault timer."); - mFaultTimerCompleted = false; - mFaultTimer = - // convert to ms. - new FaultTimer(mFaultTimerPeriod * 1000, 1000); - mFaultTimer.start(); + runOnUiThread(new Runnable() { + public void run() { + mFaultTimerCompleted = false; + mFaultTimer = + // convert to ms. + new FaultTimer(mFaultTimerPeriod * 1000, 1000); + mFaultTimer.start(); + } + }); } }