Skip to content

Commit 5c10a69

Browse files
committed
it is now possible to cancel word importing
1 parent 830ea10 commit 5c10a69

File tree

16 files changed

+88
-3
lines changed

16 files changed

+88
-3
lines changed

app/src/main/java/io/github/sspanak/tt9/db/customWords/AbstractFileProcessor.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,18 @@
77
import java.util.function.Consumer;
88

99
abstract public class AbstractFileProcessor {
10+
protected Runnable cancelHandler;
1011
protected Runnable failureHandler;
1112
protected Runnable startHandler;
1213
protected Consumer<String> successHandler;
1314

1415
private Thread processThread;
1516
protected String statusMessage = "";
1617

18+
public boolean isCanceled() {
19+
return processThread != null && processThread.isInterrupted();
20+
}
21+
1722
public boolean isRunning() {
1823
return processThread != null && processThread.isAlive();
1924
}
@@ -22,6 +27,12 @@ public String getStatusMessage() {
2227
return statusMessage;
2328
}
2429

30+
protected void sendCancel() {
31+
if (cancelHandler != null) {
32+
cancelHandler.run();
33+
}
34+
}
35+
2536
protected void sendFailure() {
2637
if (failureHandler != null) {
2738
failureHandler.run();
@@ -35,6 +46,10 @@ protected void sendStart(@NonNull String message) {
3546
}
3647
}
3748

49+
public void setCancelHandler(Runnable handler) {
50+
cancelHandler = handler;
51+
}
52+
3853
public void setFailureHandler(Runnable handler) {
3954
failureHandler = handler;
4055
}
@@ -47,6 +62,12 @@ public void setSuccessHandler(Consumer<String> handler) {
4762
successHandler = handler;
4863
}
4964

65+
public void cancel() {
66+
if (isRunning()) {
67+
processThread.interrupt();
68+
}
69+
}
70+
5071
public boolean run(@NonNull Activity activity) {
5172
if (isRunning()) {
5273
return false;

app/src/main/java/io/github/sspanak/tt9/db/customWords/CustomWordsImporter.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ private CustomWordsImporter(Context context) {
5151

5252

5353
public void clearAllHandlers() {
54+
cancelHandler = null;
5455
failureHandler = null;
5556
progressHandler = null;
5657
successHandler = null;
@@ -107,8 +108,13 @@ protected void runSync(Activity activity) {
107108

108109
sendStart(resources.getString(R.string.dictionary_import_running));
109110
if (isFileValid() && isThereRoomForMoreWords(activity) && isLineCountValid() && insertWords()) {
110-
sendSuccess();
111-
Logger.i(getClass().getSimpleName(), "Imported " + file.getName() + " in " + Timer.get(getClass().getSimpleName()) + " ms");
111+
if (isCanceled()) {
112+
sendCancel();
113+
Logger.i(getClass().getSimpleName(), "Importing cancelled after " + Timer.get(getClass().getSimpleName()) + " ms");
114+
} else {
115+
sendSuccess();
116+
Logger.i(getClass().getSimpleName(), "Imported " + file.getName() + " in " + Timer.get(getClass().getSimpleName()) + " ms");
117+
}
112118
} else {
113119
Logger.e(getClass().getSimpleName(), "Failed to import " + file.getName());
114120
}
@@ -136,6 +142,11 @@ private boolean insertWords() {
136142
sqlite.beginTransaction();
137143

138144
for (String line; (line = reader.readLine()) != null; lineCount++) {
145+
if (isCanceled()) {
146+
sqlite.failTransaction();
147+
return true;
148+
}
149+
139150
CustomWord customWord = createCustomWord(line, lineCount);
140151
if (customWord == null) {
141152
sqlite.failTransaction();

app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/ItemImportCustomWords.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,15 @@ protected CustomWordsImporter getProcessor() {
3737
@Override
3838
protected boolean onClick(Preference p) {
3939
setDefaultHandlers();
40+
getProcessor().setCancelHandler(this::onCancel);
4041
getProcessor().setFailureHandler(this::onFailure);
4142
getProcessor().setProgressHandler(this::onProgress);
42-
browseFiles();
43+
44+
if (getProcessor().isRunning()) {
45+
getProcessor().cancel();
46+
} else {
47+
browseFiles();
48+
}
4349
return true;
4450
}
4551

@@ -50,6 +56,18 @@ protected boolean onStartProcessing() {
5056
return false;
5157
}
5258

59+
private void onCancel() {
60+
activity.runOnUiThread(() -> {
61+
final String statusMsg = activity.getString(R.string.dictionary_import_canceled);
62+
63+
setAndNotifyReady();
64+
DictionaryProgressNotification.getInstance(activity).showMessage("", statusMsg, statusMsg);
65+
66+
item.setTitle(R.string.dictionary_import_custom_words);
67+
item.setSummary(statusMsg);
68+
});
69+
}
70+
5371
private void onProgress(float progress) {
5472
final String numberFormat = (progress - lastProgress) < 2 ? "%1.3f%%" : "%1.0f%%";
5573
final String loadingMsg = activity.getString(R.string.dictionary_import_progress, String.format(Locale.getDefault(), numberFormat, progress));
@@ -90,6 +108,15 @@ public void enable() {
90108
super.enable();
91109
}
92110

111+
@Override
112+
public void disable() {
113+
if (getProcessor().isRunning()) {
114+
item.setTitle(R.string.dictionary_import_cancel);
115+
} else {
116+
super.disable();
117+
}
118+
}
119+
93120
void setBrowseFilesLauncher(ActivityResultLauncher<Intent> launcher) {
94121
if (item != null) {
95122
item.setEnabled(true);

app/src/main/res/values-bg/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@
203203
<string name="function_redo">Повторение (Redo)</string>
204204
<string name="function_voice_input">Гласово въвеждане</string>
205205
<string name="add_word_no_confirmation">Добавяне без потвърждение</string>
206+
<string name="dictionary_import_canceled">Импортирането е отменено.</string>
206207
<string name="dictionary_import_custom_words">Импортирай</string>
207208
<string name="dictionary_import_custom_words_summary">Импортиране на думи от по-рано експортирано CSV.</string>
208209
<string name="dictionary_import_progress">Импортиране на CSV (%1$s)…</string>
@@ -271,4 +272,5 @@
271272
<string name="edit_word_invalid_characters">Не може да се редактира „%1$s“, когато езикът е „%2$s“.</string>
272273
<string name="edit_word_not_available_in_language">Редактирането на думи не е възможно за този език.</string>
273274
<string name="dictionary_import_raise_import_limits">Повишаване на ограниченията за импорт</string>
275+
<string name="dictionary_import_cancel">Отмяна на импортирането</string>
274276
</resources>

app/src/main/res/values-de/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@
190190
<string name="function_next_mode">Nächster Eingabemodus</string>
191191
<string name="function_select_keyboard">Tastaturauswahl</string>
192192
<string name="add_word_no_confirmation">Ohne Bestätigung hinzufügen</string>
193+
<string name="dictionary_import_canceled">Import abgebrochen.</string>
193194
<string name="dictionary_import_custom_words">Importieren</string>
194195
<string name="dictionary_import_custom_words_summary">Wörter aus einer zuvor exportierten CSV-Datei importieren.</string>
195196
<string name="dictionary_import_progress">CSV importieren (%1$s)…</string>
@@ -273,4 +274,5 @@
273274
<string name="edit_word_invalid_characters">„%1$s“ kann nicht bearbeitet werden, wenn die Sprache „%2$s“ ist.</string>
274275
<string name="edit_word_not_available_in_language">Das Bearbeiten von Wörtern ist in dieser Sprache nicht möglich.</string>
275276
<string name="dictionary_import_raise_import_limits">Importbeschränkungen erhöhen</string>
277+
<string name="dictionary_import_cancel">Import abbrechen</string>
276278
</resources>

app/src/main/res/values-es/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@
203203
<string name="virtual_numpad_alignment_right">A la derecha</string>
204204
<string name="function_select_keyboard">Cambiar el teclado</string>
205205
<string name="add_word_no_confirmation">Añadir sin confirmación</string>
206+
<string name="dictionary_import_canceled">Importación cancelada.</string>
206207
<string name="dictionary_import_custom_words">Importar</string>
207208
<string name="dictionary_import_custom_words_summary">Importar palabras de un CSV previamente exportado.</string>
208209
<string name="dictionary_import_progress">Importando CSV (%1$s)…</string>
@@ -271,4 +272,5 @@
271272
<string name="edit_word_invalid_characters">No se puede editar \"%1$s\" cuando el idioma es \"%2$s\".</string>
272273
<string name="edit_word_not_available_in_language">No es posible editar palabras en este idioma.</string>
273274
<string name="dictionary_import_raise_import_limits">Aumentar restricciones de importación</string>
275+
<string name="dictionary_import_cancel">Cancelar importación</string>
274276
</resources>

app/src/main/res/values-fr/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@
201201
<string name="virtual_numpad_alignment_right">À droite</string>
202202
<string name="function_select_keyboard">Choisir le clavier</string>
203203
<string name="add_word_no_confirmation">Ajouter sans confirmation</string>
204+
<string name="dictionary_import_canceled">Importation annulée.</string>
204205
<string name="dictionary_import_custom_words">Importer</string>
205206
<string name="dictionary_import_custom_words_summary">Importer des mots à partir d\'un fichier CSV précédemment exporté.</string>
206207
<string name="dictionary_import_progress">Importation de CSV (%1$s)…</string>
@@ -271,4 +272,5 @@
271272
<string name="edit_word_invalid_characters">Impossible de modifier « %1$s » lorsque la langue est « %2$s ».</string>
272273
<string name="edit_word_not_available_in_language">La modification des mots n’est pas possible dans cette langue.</string>
273274
<string name="dictionary_import_raise_import_limits">Augmenter les restrictions d’importation</string>
275+
<string name="dictionary_import_cancel">Annuler l’importation</string>
274276
</resources>

app/src/main/res/values-it/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@
188188
<string name="virtual_numpad_alignment_left">A sinistra</string>
189189
<string name="virtual_numpad_alignment_right">A destra</string>
190190
<string name="add_word_no_confirmation">Aggiungere senza conferma</string>
191+
<string name="dictionary_import_canceled">Importazione annullata.</string>
191192
<string name="dictionary_import_custom_words">Importare</string>
192193
<string name="dictionary_import_custom_words_summary">Importare parole da un CSV precedentemente esportato.</string>
193194
<string name="dictionary_import_progress">Importazione CSV (%1$s)…</string>
@@ -274,5 +275,6 @@
274275
<string name="edit_word_invalid_characters">Impossibile modificare \"%1$s\" quando la lingua è \"%2$s\".</string>
275276
<string name="edit_word_not_available_in_language">La modifica delle parole non è possibile in questa lingua.</string>
276277
<string name="dictionary_import_raise_import_limits">Aumentare le restrizioni di importazione</string>
278+
<string name="dictionary_import_cancel">Annulla importazione</string>
277279
</resources>
278280

app/src/main/res/values-iw/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@
202202
<string name="virtual_numpad_alignment_right">ימינה</string>
203203
<string name="function_select_keyboard">בחירת מקלדת</string>
204204
<string name="add_word_no_confirmation">להוסיף ללא אישור</string>
205+
<string name="dictionary_import_canceled">הייבוא בוטל.</string>
205206
<string name="dictionary_import_custom_words">לְיַבֵּא</string>
206207
<string name="dictionary_import_custom_words_summary">ייבוא מילים מקובץ CSV שיוצא קודם לכן.</string>
207208
<string name="dictionary_import_progress">מייבא CSV (%1$s)…</string>
@@ -278,4 +279,5 @@
278279
<string name="edit_word_invalid_characters">לא ניתן לערוך \"%1$s\" כאשר השפה היא \"%2$s\".</string>
279280
<string name="edit_word_not_available_in_language">עריכת מילים אינה אפשרית בשפה זו.</string>
280281
<string name="dictionary_import_raise_import_limits">הגדלת מגבלות הייבוא</string>
282+
<string name="dictionary_import_cancel">ביטול הייבוא</string>
281283
</resources>

app/src/main/res/values-lt/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@
212212
<string name="virtual_numpad_alignment_right">Dešinėje</string>
213213
<string name="function_select_keyboard">Keisti klaviatūrą</string>
214214
<string name="add_word_no_confirmation">Pridėti be patvirtinimo</string>
215+
<string name="dictionary_import_canceled">Importavimas atšauktas.</string>
215216
<string name="dictionary_import_custom_words">Importuoti</string>
216217
<string name="dictionary_import_custom_words_summary">Importuoti žodžius iš anksčiau eksportuoto CSV.</string>
217218
<string name="dictionary_import_progress">Importuojamas CSV (%1$s)…</string>
@@ -280,4 +281,5 @@
280281
<string name="edit_word_invalid_characters">Negalima redaguoti „%1$s“, kai kalba yra „%2$s“.</string>
281282
<string name="edit_word_not_available_in_language">Žodžių redagavimas šia kalba negalimas.</string>
282283
<string name="dictionary_import_raise_import_limits">Padidinti importo apribojimus</string>
284+
<string name="dictionary_import_cancel">Atšaukti importavimą</string>
283285
</resources>

0 commit comments

Comments
 (0)