Skip to content

Commit f3e3add

Browse files
committed
added a setting to raise the word import limits (#942)
1 parent 64945df commit f3e3add

File tree

22 files changed

+127
-30
lines changed

22 files changed

+127
-30
lines changed

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

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public class CustomWordsImporter extends AbstractFileProcessor {
3131
private SQLiteOpener sqlite;
3232

3333
private long lastProgressUpdate = 0;
34+
private int maxFileLines;
35+
private int maxWords;
3436

3537

3638
public static CustomWordsImporter getInstance(Context context) {
@@ -91,8 +93,10 @@ private void sendFailure(String errorMessage) {
9193
}
9294

9395

94-
public void run(@NonNull Activity activity, @NonNull CustomWordFile file) {
96+
public void run(@NonNull Activity activity, @NonNull SettingsStore settings, @NonNull CustomWordFile file) {
9597
this.file = file;
98+
this.maxFileLines = settings.getImportWordsMaxFileLines();
99+
this.maxWords = settings.getImportWordsMaxWords();
96100
super.run(activity);
97101
}
98102

@@ -102,7 +106,7 @@ protected void runSync(Activity activity) {
102106
Timer.start(getClass().getSimpleName());
103107

104108
sendStart(resources.getString(R.string.dictionary_import_running));
105-
if (isFileValid() && isThereRoomForMoreWords(activity) && insertWords()) {
109+
if (isFileValid() && isThereRoomForMoreWords(activity) && isLineCountValid() && insertWords()) {
106110
sendSuccess();
107111
Logger.i(getClass().getSimpleName(), "Imported " + file.getName() + " in " + Timer.get(getClass().getSimpleName()) + " ms");
108112
} else {
@@ -132,11 +136,6 @@ private boolean insertWords() {
132136
sqlite.beginTransaction();
133137

134138
for (String line; (line = reader.readLine()) != null; lineCount++) {
135-
if (!isLineCountValid(lineCount)) {
136-
sqlite.failTransaction();
137-
return false;
138-
}
139-
140139
CustomWord customWord = createCustomWord(line, lineCount);
141140
if (customWord == null) {
142141
sqlite.failTransaction();
@@ -189,7 +188,7 @@ private boolean isThereRoomForMoreWords(Context context) {
189188
return false;
190189
}
191190

192-
if ((new ReadOps()).countCustomWords(sqlite.getDb()) > SettingsStore.CUSTOM_WORDS_MAX) {
191+
if ((new ReadOps()).countCustomWords(sqlite.getDb()) > maxWords) {
193192
sendFailure(resources.getString(R.string.dictionary_import_error_too_many_words));
194193
return false;
195194
}
@@ -198,13 +197,23 @@ private boolean isThereRoomForMoreWords(Context context) {
198197
}
199198

200199

201-
private boolean isLineCountValid(int lineCount) {
202-
if (lineCount <= SettingsStore.CUSTOM_WORDS_IMPORT_MAX_LINES) {
203-
return true;
200+
private boolean isLineCountValid() {
201+
int lineCount = 0;
202+
203+
try (BufferedReader reader = file.getReader()) {
204+
while (reader.readLine() != null) {
205+
if (++lineCount > maxFileLines) {
206+
sendFailure(resources.getString(R.string.dictionary_import_error_file_too_long, maxFileLines));
207+
return false;
208+
}
209+
}
210+
} catch (IOException e) {
211+
Logger.e(getClass().getSimpleName(), "Error opening the file. " + e.getMessage());
212+
sendFailure(resources.getString(R.string.dictionary_import_error_cannot_read_file));
213+
return false;
204214
}
205215

206-
sendFailure(resources.getString(R.string.dictionary_import_error_file_too_long, SettingsStore.CUSTOM_WORDS_IMPORT_MAX_LINES));
207-
return false;
216+
return true;
208217
}
209218

210219

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ protected boolean onClick(Preference p) {
4646
@Override
4747
protected boolean onStartProcessing() {
4848
lastError = "";
49-
lastProgress = -1;
49+
lastProgress = 0;
5050
return false;
5151
}
5252

5353
private void onProgress(float progress) {
54-
final String formattedProgress = (lastProgress - progress) < 2 ? String.format(Locale.getDefault(), "%1.3f%%", progress) : progress + "%";
54+
final String formattedProgress = (progress - lastProgress) < 2 ? String.format(Locale.getDefault(), "%1.3f%%", progress) : progress + "%";
5555
final String loadingMsg = activity.getString(R.string.dictionary_import_progress, formattedProgress);
5656
lastProgress = progress;
5757

@@ -128,6 +128,6 @@ void onFileSelected(ActivityResult result) {
128128
return;
129129
}
130130

131-
getProcessor().run(activity, file);
131+
getProcessor().run(activity, activity.getSettings(), file);
132132
}
133133
}

app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/AddWordsWithoutConfirmationSwitch.java renamed to app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/SwitchAddWordsWithoutConfirmation.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,25 @@
1010
import io.github.sspanak.tt9.R;
1111
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
1212

13-
public class AddWordsWithoutConfirmationSwitch extends SwitchPreferenceCompat {
13+
public class SwitchAddWordsWithoutConfirmation extends SwitchPreferenceCompat {
1414
public static final String NAME = "add_word_no_confirmation";
1515

16-
public AddWordsWithoutConfirmationSwitch(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
16+
public SwitchAddWordsWithoutConfirmation(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
1717
super(context, attrs, defStyleAttr, defStyleRes);
1818
init(context);
1919
}
2020

21-
public AddWordsWithoutConfirmationSwitch(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
21+
public SwitchAddWordsWithoutConfirmation(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
2222
super(context, attrs, defStyleAttr);
2323
init(context);
2424
}
2525

26-
public AddWordsWithoutConfirmationSwitch(@NonNull Context context, @Nullable AttributeSet attrs) {
26+
public SwitchAddWordsWithoutConfirmation(@NonNull Context context, @Nullable AttributeSet attrs) {
2727
super(context, attrs);
2828
init(context);
2929
}
3030

31-
public AddWordsWithoutConfirmationSwitch(@NonNull Context context) {
31+
public SwitchAddWordsWithoutConfirmation(@NonNull Context context) {
3232
super(context);
3333
init(context);
3434
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.github.sspanak.tt9.preferences.screens.languages;
2+
3+
import android.content.Context;
4+
import android.util.AttributeSet;
5+
6+
import androidx.annotation.NonNull;
7+
import androidx.annotation.Nullable;
8+
import androidx.preference.SwitchPreferenceCompat;
9+
10+
import io.github.sspanak.tt9.R;
11+
import io.github.sspanak.tt9.preferences.settings.SettingsAddedWords;
12+
13+
public class SwitchRaiseImportLimits extends SwitchPreferenceCompat {
14+
public static final String NAME = "pref_raise_custom_words_import_limits";
15+
public static boolean DEFAULT = false;
16+
17+
public SwitchRaiseImportLimits(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context); }
18+
public SwitchRaiseImportLimits(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); }
19+
public SwitchRaiseImportLimits(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(context); }
20+
public SwitchRaiseImportLimits(@NonNull Context context) { super(context); init(context); }
21+
22+
private void init(@NonNull Context context) {
23+
setKey(NAME);
24+
setDefaultValue(DEFAULT);
25+
setTitle(R.string.dictionary_import_raise_import_limits);
26+
setSummary(context.getString(
27+
R.string.dictionary_import_raise_import_limits_summary,
28+
SettingsAddedWords.IMPORT_DEFAULT_MAX_FILE_LINES,
29+
SettingsAddedWords.IMPORT_RAISED_MAX_FILE_LINES,
30+
SettingsAddedWords.IMPORT_DEFAULT_MAX_WORDS,
31+
SettingsAddedWords.IMPORT_RAISED_MAX_WORDS
32+
));
33+
}
34+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.github.sspanak.tt9.preferences.settings;
2+
3+
import android.content.Context;
4+
5+
import io.github.sspanak.tt9.preferences.screens.languages.SwitchAddWordsWithoutConfirmation;
6+
import io.github.sspanak.tt9.preferences.screens.languages.SwitchRaiseImportLimits;
7+
8+
public class SettingsAddedWords extends BaseSettings {
9+
public final static int IMPORT_DEFAULT_MAX_FILE_LINES = 250;
10+
public final static int IMPORT_DEFAULT_MAX_WORDS = 1000;
11+
public final static int IMPORT_RAISED_MAX_FILE_LINES = 10_000;
12+
public final static int IMPORT_RAISED_MAX_WORDS = 100_000;
13+
14+
SettingsAddedWords(Context context) {
15+
super(context);
16+
}
17+
18+
public boolean getAddWordsNoConfirmation() {
19+
return prefs.getBoolean(SwitchAddWordsWithoutConfirmation.NAME, false);
20+
}
21+
22+
public boolean getRaiseImportLimits() {
23+
return prefs.getBoolean(SwitchRaiseImportLimits.NAME, SwitchRaiseImportLimits.DEFAULT);
24+
}
25+
26+
public int getImportWordsMaxFileLines() {
27+
return getRaiseImportLimits() ? IMPORT_RAISED_MAX_FILE_LINES : IMPORT_DEFAULT_MAX_FILE_LINES;
28+
}
29+
30+
public int getImportWordsMaxWords() {
31+
return getRaiseImportLimits() ? IMPORT_RAISED_MAX_WORDS : IMPORT_DEFAULT_MAX_WORDS;
32+
}
33+
}

app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHacks.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import io.github.sspanak.tt9.util.Logger;
99
import io.github.sspanak.tt9.util.sys.DeviceInfo;
1010

11-
class SettingsHacks extends BaseSettings {
11+
class SettingsHacks extends SettingsAddedWords {
1212
public static final int COMPOSING_TEXT_RESTART_THRESHOLD = 150; // ms
1313

1414
private boolean demoMode = false;

app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsStatic.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ public class SettingsStatic extends SettingsColors {
1010
public static final int BACKSPACE_ACCELERATION_MAX_CHARS_NO_SPACE = 4; // maximum chars to be deleted at once for languages with no spaces
1111
public static final int BACKSPACE_ACCELERATION_REPEAT_DEBOUNCE = 5;
1212
public final static int CLIPBOARD_PREVIEW_LENGTH = 20;
13-
public final static int CUSTOM_WORDS_IMPORT_MAX_LINES = 250;
14-
public final static int CUSTOM_WORDS_MAX = 1000;
1513
public final static int CUSTOM_WORDS_SEARCH_RESULTS_MAX = 50;
1614
public final static int DICTIONARY_AUTO_LOAD_COOLDOWN_TIME = 1200000; // 20 minutes in ms
1715
public final static int DICTIONARY_DOWNLOAD_CONNECTION_TIMEOUT = 10000; // ms

app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsUI.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import io.github.sspanak.tt9.preferences.screens.appearance.SwitchDoubleTapResize;
1515
import io.github.sspanak.tt9.preferences.screens.appearance.SwitchDragResize;
1616
import io.github.sspanak.tt9.preferences.screens.appearance.SwitchKeyShadows;
17-
import io.github.sspanak.tt9.preferences.screens.languages.AddWordsWithoutConfirmationSwitch;
1817
import io.github.sspanak.tt9.util.Logger;
1918
import io.github.sspanak.tt9.util.sys.DeviceInfo;
2019

@@ -53,10 +52,6 @@ public class SettingsUI extends SettingsTyping {
5352
}
5453
}
5554

56-
public boolean getAddWordsNoConfirmation() {
57-
return prefs.getBoolean(AddWordsWithoutConfirmationSwitch.NAME, false);
58-
}
59-
6055
public boolean getNotificationsApproved() {
6156
return !DeviceInfo.AT_LEAST_ANDROID_13 || getStringifiedInt("pref_asked_for_notifications_version", 0) == Integer.MAX_VALUE;
6257
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
<string name="dictionary_import_error_malformed_line">Неочакван формат на дума: „%1$s“ на ред %2$d.</string>
8080
<string name="dictionary_import_error_too_many_words">Хранилището за добавени думи е пълно. Не можете да импортирате повече думи.</string>
8181
<string name="delete">Изтрий</string>
82+
<string name="dictionary_import_raise_import_limits_summary">Увеличаване на максималния брой думи на файл от %1$d на %2$d и общия брой думи от %3$d на %4$d.\nВнимание! Импортирането на твърде много думи може да забави писането.</string>
8283
<string name="delete_words_link_summary">Намери и изтрий на неправилно написани или ненужни думи.</string>
8384
<string name="search_results">Намерени думи</string>
8485
<string name="search_results_void">Няма резултати.</string>
@@ -269,4 +270,5 @@
269270
<string name="pref_auto_trim_trailing_space">Автоматично премахване на крайните интервали</string>
270271
<string name="edit_word_invalid_characters">Не може да се редактира „%1$s“, когато езикът е „%2$s“.</string>
271272
<string name="edit_word_not_available_in_language">Редактирането на думи не е възможно за този език.</string>
273+
<string name="dictionary_import_raise_import_limits">Повишаване на ограниченията за импорт</string>
272274
</resources>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@
133133
<string name="dictionary_import_error_malformed_line">Unerwartetes Wortformat: \"%1$s\" in Zeile %2$d.</string>
134134
<string name="dictionary_import_error_too_many_words">Der Speicher für hinzugefügte Wörter ist voll. Sie können keine weiteren Wörter importieren.</string>
135135
<string name="delete">Löschen</string>
136+
<string name="dictionary_import_raise_import_limits_summary">Maximale Anzahl von Wörtern pro Datei von %1$d auf %2$d und die Gesamtzahl der Wörter von %3$d auf %4$d erhöhen.\nWarnung! Das Importieren zu vieler Wörter kann die Eingabe verlangsamen.</string>
136137
<string name="delete_words_link_summary">Finde und lösche falsch geschriebene oder überflüssige Wörter.</string>
137138
<string name="search_results">Suchergebnisse</string>
138139
<string name="search_results_void">Keine Ergebnisse.</string>
@@ -271,4 +272,5 @@
271272
<string name="pref_auto_trim_trailing_space">Nachfolgende Leerzeichen automatisch entfernen</string>
272273
<string name="edit_word_invalid_characters">„%1$s“ kann nicht bearbeitet werden, wenn die Sprache „%2$s“ ist.</string>
273274
<string name="edit_word_not_available_in_language">Das Bearbeiten von Wörtern ist in dieser Sprache nicht möglich.</string>
275+
<string name="dictionary_import_raise_import_limits">Importbeschränkungen erhöhen</string>
274276
</resources>

0 commit comments

Comments
 (0)