From a215e3009810cb3ca6376f6eaf01e9e29210dd5c Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Thu, 19 Jun 2014 01:10:08 +0200 Subject: [PATCH] Use Runnable instead of AsyncTask to poll for syncthing web gui (fixes #41). This works around a problem with pre-Jellybean devices, where AsyncTask must be created on the main thread, --- .../com/nutomic/syncthingandroid/WebGuiActivity.java | 7 ++++++- .../syncthingandroid/syncthing/SyncthingService.java | 12 +++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/nutomic/syncthingandroid/WebGuiActivity.java b/src/main/java/com/nutomic/syncthingandroid/WebGuiActivity.java index 2c461de5..a06ab4c2 100644 --- a/src/main/java/com/nutomic/syncthingandroid/WebGuiActivity.java +++ b/src/main/java/com/nutomic/syncthingandroid/WebGuiActivity.java @@ -99,7 +99,12 @@ public class WebGuiActivity extends Activity implements SyncthingService.OnWebGu */ @Override public void onWebGuiAvailable() { - mWebView.loadUrl(mSyncthingService.getApi().getUrl()); + runOnUiThread(new Runnable() { + @Override + public void run() { + mWebView.loadUrl(mSyncthingService.getApi().getUrl()); + } + }); } @Override diff --git a/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingService.java b/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingService.java index 26ddfc1d..f588413e 100644 --- a/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingService.java +++ b/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingService.java @@ -200,9 +200,9 @@ public class SyncthingService extends Service { * Polls SYNCTHING_URL until it returns HTTP status OK, then calls all listeners * in mOnWebGuiAvailableListeners and clears it. */ - private class PollWebGuiAvailableTask extends AsyncTask { + private class PollWebGuiAvailableRunnable implements Runnable { @Override - protected Void doInBackground(Void... voids) { + public void run() { int status = 0; HttpClient httpclient = new DefaultHttpClient(); HttpHead head = new HttpHead(mApi.getUrl()); @@ -225,11 +225,7 @@ public class SyncthingService extends Service { Log.w(TAG, "Failed to poll for web interface", e); } } while(status != HttpStatus.SC_OK); - return null; - } - @Override - protected void onPostExecute(Void aVoid) { Log.i(TAG, "Web GUI has come online at " + mApi.getUrl()); mIsWebGuiAvailable = true; for (OnWebGuiAvailableListener listener : mOnWebGuiAvailableListeners) { @@ -332,7 +328,7 @@ public class SyncthingService extends Service { new PostTask().execute(mApi.getUrl(), PostTask.URI_SHUTDOWN, apiKey); registerOnWebGuiAvailableListener(mApi); } - new PollWebGuiAvailableTask().execute(); + new Thread(new PollWebGuiAvailableRunnable()).start(); runNative(); } }).start(); @@ -362,6 +358,8 @@ public class SyncthingService extends Service { * * If the web gui is already available, listener will be called immediately. * Listeners are unregistered automatically after being called. + * + * Note that the listener might be called on a background thread. */ public void registerOnWebGuiAvailableListener(OnWebGuiAvailableListener listener) { if (mIsWebGuiAvailable) {