From 2dbf35771643d7799bdc96fe9cd5c0a465f75c71 Mon Sep 17 00:00:00 2001 From: Damyan Ivanov <dam+mobileledger@ktnx.net> Date: Wed, 2 Jan 2019 20:45:07 +0000 Subject: [PATCH] handle cancellation --- .../mobileledger/async/RetrieveAccountsTask.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveAccountsTask.java b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveAccountsTask.java index 83f15fb7..94eaa1bd 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveAccountsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveAccountsTask.java @@ -19,6 +19,7 @@ package net.ktnx.mobileledger.async; import android.content.SharedPreferences; import android.database.sqlite.SQLiteDatabase; +import android.os.OperationCanceledException; import android.util.Log; import net.ktnx.mobileledger.R; @@ -90,6 +91,8 @@ public class RetrieveAccountsTask extends android.os.AsyncTask<Void, Integer, Vo Pattern.compile("\"value\":\"([^\"]+)\""); int count = 0; while ((line = buf.readLine()) != null) { + throwIfCancelled(); + Matcher m = account_name_re.matcher(line); if (m.find()) { String acct_encoded = m.group(1); @@ -116,6 +119,8 @@ public class RetrieveAccountsTask extends android.os.AsyncTask<Void, Integer, Vo m = value_re.matcher(line); boolean match_found = false; while (m.find()) { + throwIfCancelled(); + match_found = true; String value = m.group(1); String currency = m.group(2); @@ -137,6 +142,8 @@ public class RetrieveAccountsTask extends android.os.AsyncTask<Void, Integer, Vo db.execSQL("update description_history set keep=0;"); m = description_items_re.matcher(line); while (m.find()) { + throwIfCancelled(); + String description = m.group(1); if (description.isEmpty()) continue; @@ -153,13 +160,14 @@ public class RetrieveAccountsTask extends android.os.AsyncTask<Void, Integer, Vo db.execSQL("delete from account_values where keep=0;"); db.execSQL("delete from accounts where keep=0;"); -// db.execSQL("delete from description_history where keep=0;"); db.setTransactionSuccessful(); } + catch (OperationCanceledException e) { + Log.w("async", "Account retrieval cancelled"); + } finally { db.endTransaction(); } - } } } @@ -183,6 +191,9 @@ public class RetrieveAccountsTask extends android.os.AsyncTask<Void, Integer, Vo return null; } + private void throwIfCancelled() { + if (isCancelled()) throw new OperationCanceledException(null); + } private void addAccount(SQLiteDatabase db, String name) { do { -- 2.39.5