diff --git a/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java b/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java index cb118292..7bada810 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java @@ -26,13 +26,12 @@ import io.github.sspanak.tt9.util.Timer; public class WordStore { private final String LOG_TAG = "sqlite.WordStore"; - private static WordStore self; private SQLiteOpener sqlite = null; private ReadOps readOps = null; - private WordStore(@NonNull Context context) { + WordStore(@NonNull Context context) { try { sqlite = SQLiteOpener.getInstance(context); sqlite.getDb(); @@ -40,16 +39,6 @@ public class WordStore { } catch (Exception e) { Logger.w(LOG_TAG, "Database connection failure. All operations will return empty results. " + e.getMessage()); } - self = this; - } - - - public static synchronized WordStore getInstance(@NonNull Context context) { - if (self == null) { - self = new WordStore(context); - } - - return self; } diff --git a/app/src/main/java/io/github/sspanak/tt9/db/WordStoreAsync.java b/app/src/main/java/io/github/sspanak/tt9/db/WordStoreAsync.java index 2336b3b1..16c521a6 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/WordStoreAsync.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/WordStoreAsync.java @@ -15,35 +15,32 @@ public class WordStoreAsync { private static WordStore store; private static final Handler asyncHandler = new Handler(); - public static synchronized void init(Context context) { - store = WordStore.getInstance(context); + + public static void init(Context context) { + store = new WordStore(context); } - public static synchronized void init() { - init(null); - } - - - private static WordStore getStore() { - init(); - return store; + public static void destroy() { + if (store != null) { + store = null; + } } public static void normalizeNext() { - new Thread(() -> getStore().normalizeNext()).start(); + new Thread(() -> store.normalizeNext()).start(); } public static void getLastLanguageUpdateTime(ConsumerCompat notification, Language language) { - new Thread(() -> notification.accept(getStore().getLanguageFileHash(language))).start(); + new Thread(() -> notification.accept(store.getLanguageFileHash(language))).start(); } public static void deleteCustomWord(Runnable notification, Language language, String word) { new Thread(() -> { - getStore().removeCustomWord(language, word); + store.removeCustomWord(language, word); notification.run(); }).start(); } @@ -51,46 +48,46 @@ public class WordStoreAsync { public static void deleteWords(Runnable notification, @NonNull ArrayList languageIds) { new Thread(() -> { - getStore().remove(languageIds); + store.remove(languageIds); notification.run(); }).start(); } public static void put(ConsumerCompat statusHandler, Language language, String word) { - new Thread(() -> statusHandler.accept(getStore().put(language, word))).start(); + new Thread(() -> statusHandler.accept(store.put(language, word))).start(); } public static void makeTopWord(@NonNull Language language, @NonNull String word, @NonNull String sequence) { - new Thread(() -> getStore().makeTopWord(language, word, sequence)).start(); + new Thread(() -> store.makeTopWord(language, word, sequence)).start(); } public static void getWords(ConsumerCompat> dataHandler, Language language, String sequence, String filter, int minWords, int maxWords) { new Thread(() -> asyncHandler.post(() -> dataHandler.accept( - getStore().getSimilar(language, sequence, filter, minWords, maxWords))) + store.getSimilar(language, sequence, filter, minWords, maxWords))) ).start(); } public static void getCustomWords(ConsumerCompat> dataHandler, String wordFilter, int maxWords) { new Thread(() -> asyncHandler.post(() -> dataHandler.accept( - getStore().getSimilarCustom(wordFilter, maxWords))) + store.getSimilarCustom(wordFilter, maxWords))) ).start(); } public static void countCustomWords(ConsumerCompat dataHandler) { new Thread(() -> asyncHandler.post(() -> dataHandler.accept( - getStore().countCustom())) + store.countCustom())) ).start(); } public static void exists(ConsumerCompat> dataHandler, ArrayList languages) { new Thread(() -> asyncHandler.post(() -> dataHandler.accept( - getStore().exists(languages)) + store.exists(languages)) )).start(); } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java index 582dce45..06db8126 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java @@ -188,6 +188,7 @@ public class TraditionalT9 extends MainViewHandler { requestHideSelf(0); onStop(); normalizationHandler.removeCallbacksAndMessages(null); + WordStoreAsync.destroy(); stopSelf(); }