fixed a NULL-pointer issue when loading a dictionary
This commit is contained in:
parent
abd4112b8f
commit
20d4d8bd99
2 changed files with 7 additions and 40 deletions
|
|
@ -6,6 +6,8 @@ import android.inputmethodservice.InputMethodService;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
|
@ -42,8 +44,8 @@ public class DictionaryLoader {
|
||||||
private final AssetManager assets;
|
private final AssetManager assets;
|
||||||
private final SQLiteOpener sqlite;
|
private final SQLiteOpener sqlite;
|
||||||
|
|
||||||
private static final Handler asyncHandler = new Handler();
|
@NonNull private static final Handler asyncHandler = new Handler();
|
||||||
private ConsumerCompat<Bundle> onStatusChange;
|
@NonNull private final ConsumerCompat<Bundle> onStatusChange;
|
||||||
private Thread loadThread;
|
private Thread loadThread;
|
||||||
|
|
||||||
private final HashMap<Integer, Long> lastAutoLoadAttemptTime = new HashMap<>();
|
private final HashMap<Integer, Long> lastAutoLoadAttemptTime = new HashMap<>();
|
||||||
|
|
@ -63,15 +65,11 @@ public class DictionaryLoader {
|
||||||
|
|
||||||
private DictionaryLoader(Context context) {
|
private DictionaryLoader(Context context) {
|
||||||
assets = context.getAssets();
|
assets = context.getAssets();
|
||||||
|
onStatusChange = DictionaryLoadingBar.getInstance(context)::show;
|
||||||
sqlite = SQLiteOpener.getInstance(context);
|
sqlite = SQLiteOpener.getInstance(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setOnStatusChange(ConsumerCompat<Bundle> callback) {
|
|
||||||
onStatusChange = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public boolean load(Context context, ArrayList<Language> languages) {
|
public boolean load(Context context, ArrayList<Language> languages) {
|
||||||
if (isRunning()) {
|
if (isRunning()) {
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -110,8 +108,6 @@ public class DictionaryLoader {
|
||||||
|
|
||||||
|
|
||||||
public static void load(Context context, Language language) {
|
public static void load(Context context, Language language) {
|
||||||
DictionaryLoadingBar progressBar = DictionaryLoadingBar.getInstance(context);
|
|
||||||
getInstance(context).setOnStatusChange(progressBar::show);
|
|
||||||
self.load(context, new ArrayList<>() {{ add(language); }});
|
self.load(context, new ArrayList<>() {{ add(language); }});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -321,11 +317,6 @@ public class DictionaryLoader {
|
||||||
|
|
||||||
|
|
||||||
private void sendStartMessage(int fileCount) {
|
private void sendStartMessage(int fileCount) {
|
||||||
if (onStatusChange == null) {
|
|
||||||
Logger.w(LOG_TAG, "Cannot send file count without a status Handler. Ignoring message.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bundle progressMsg = new Bundle();
|
Bundle progressMsg = new Bundle();
|
||||||
progressMsg.putInt("fileCount", fileCount);
|
progressMsg.putInt("fileCount", fileCount);
|
||||||
progressMsg.putInt("progress", 1);
|
progressMsg.putInt("progress", 1);
|
||||||
|
|
@ -334,11 +325,6 @@ public class DictionaryLoader {
|
||||||
|
|
||||||
|
|
||||||
private void sendProgressMessage(Language language, float progress, int progressUpdateInterval) {
|
private void sendProgressMessage(Language language, float progress, int progressUpdateInterval) {
|
||||||
if (onStatusChange == null) {
|
|
||||||
Logger.w(LOG_TAG, "Cannot send progress without a status Handler. Ignoring message.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
if (now - lastProgressUpdate < progressUpdateInterval) {
|
if (now - lastProgressUpdate < progressUpdateInterval) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -356,35 +342,19 @@ public class DictionaryLoader {
|
||||||
|
|
||||||
|
|
||||||
private void sendError(String message, int langId) {
|
private void sendError(String message, int langId) {
|
||||||
if (onStatusChange == null) {
|
|
||||||
Logger.w(LOG_TAG, "Cannot send an error without a status Handler. Ignoring message.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bundle errorMsg = new Bundle();
|
Bundle errorMsg = new Bundle();
|
||||||
errorMsg.putString("error", message);
|
errorMsg.putString("error", message);
|
||||||
errorMsg.putInt("languageId", langId);
|
errorMsg.putInt("languageId", langId);
|
||||||
asyncHandler.post(() -> {
|
asyncHandler.post(() -> onStatusChange.accept(errorMsg));
|
||||||
onStatusChange.accept(errorMsg);
|
|
||||||
onStatusChange = null;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void sendImportError(String message, int langId, long fileLine) {
|
private void sendImportError(String message, int langId, long fileLine) {
|
||||||
if (onStatusChange == null) {
|
|
||||||
Logger.w(LOG_TAG, "Cannot send an import error without a status Handler. Ignoring message.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bundle errorMsg = new Bundle();
|
Bundle errorMsg = new Bundle();
|
||||||
errorMsg.putString("error", message);
|
errorMsg.putString("error", message);
|
||||||
errorMsg.putLong("fileLine", fileLine + 1);
|
errorMsg.putLong("fileLine", fileLine + 1);
|
||||||
errorMsg.putInt("languageId", langId);
|
errorMsg.putInt("languageId", langId);
|
||||||
asyncHandler.post(() -> {
|
asyncHandler.post(() -> onStatusChange.accept(errorMsg));
|
||||||
onStatusChange.accept(errorMsg);
|
|
||||||
onStatusChange = null;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package io.github.sspanak.tt9.preferences.screens.languages;
|
package io.github.sspanak.tt9.preferences.screens.languages;
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -32,7 +30,6 @@ class ItemLoadDictionary extends ItemClickable {
|
||||||
|
|
||||||
loader = DictionaryLoader.getInstance(context);
|
loader = DictionaryLoader.getInstance(context);
|
||||||
progressBar = DictionaryLoadingBar.getInstance(context);
|
progressBar = DictionaryLoadingBar.getInstance(context);
|
||||||
loader.setOnStatusChange(progressBar::show);
|
|
||||||
|
|
||||||
this.activity = context;
|
this.activity = context;
|
||||||
this.onStart = onStart;
|
this.onStart = onStart;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue