Put dictionaries in app data, not cache

Julien LepillerSun Jul 24 16:57:20+0200 2022

735c2bd

Put dictionaries in app data, not cache

app/src/main/java/eu/lepiller/nani/dictionary/Dictionary.java

3232
3333
    private Drawable drawable, newDrawable;
3434
35-
    Dictionary(String name, String description, String fullDescription, File cacheDir, int fileSize, int entries, String hash, String lang) {
35+
    Dictionary(String name, String description, String fullDescription, File cacheDir, File dataDir, int fileSize, int entries, String hash, String lang) {
3636
        this.name = name;
3737
        this.description = description;
3838
        this.fullDescription = fullDescription;

4040
        expectedFileSize = fileSize;
4141
        sha256 = hash;
4242
        this.lang = lang;
43-
        this.file = new File(cacheDir, "/dico/" + name);
44-
        this.temporaryFile = new File(cacheDir, "/tmp/" + name);
43+
        this.file = new File(dataDir, "/dico/" + name);
44+
        this.temporaryFile = new File(cacheDir, "/dico/" + name);
4545
    }
4646
4747
    public String getName() {

app/src/main/java/eu/lepiller/nani/dictionary/DictionaryFactory.java

3131
    private static boolean initialized = false;
3232
3333
    private static ArrayList<Dictionary> dictionaries;
34-
    private static File cacheDir;
34+
    private static File cacheDir, dataDir;
3535
    private static File listFile;
3636
    private static List<String> languages;
3737

4444
4545
    private static void initialize(Context context) {
4646
        cacheDir = context.getCacheDir();
47-
        listFile = new File(cacheDir + "/list");
47+
        dataDir = context.getFilesDir();
48+
        listFile = new File(dataDir + "/list");
4849
        languages = new ArrayList<>();
4950
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
5051
            LocaleList l = context.getResources().getConfiguration().getLocales();

118119
                            d = new RadicalDict(name,
119120
                                    chooseLanguage(synopsis),
120121
                                    chooseLanguage(description),
121-
                                    cacheDir, url, size, entries, sha256, lang);
122+
                                    cacheDir, dataDir, url, size, entries, sha256, lang);
122123
                            Log.d("FACTORY", "radk: " + (d.isDownloaded()? "downloaded": "not downloaded"));
123124
                        } else if (type.compareTo("jmdict") == 0) {
124125
                            d = new JMDict(name,
125126
                                    chooseLanguage(synopsis),
126127
                                    chooseLanguage(description),
127-
                                    cacheDir, url, size, entries, sha256, lang);
128+
                                    cacheDir, dataDir, url, size, entries, sha256, lang);
128129
                        } else if (type.compareTo("wadoku") == 0) {
129130
                            d = new WadokuResultDictionary(name,
130131
                                    chooseLanguage(synopsis),
131132
                                    chooseLanguage(description),
132-
                                    cacheDir, url, size, entries, sha256, lang);
133+
                                    cacheDir, dataDir, url, size, entries, sha256, lang);
133134
                        } else if (type.compareTo("jibiki") == 0) {
134135
                            d = new Jibiki(name,
135136
                                    chooseLanguage(synopsis),
136137
                                    chooseLanguage(description),
137-
                                    cacheDir, url, size, entries, sha256, lang);
138+
                                    cacheDir, dataDir, url, size, entries, sha256, lang);
138139
                        } else if (type.compareTo("wadoku_pitch") == 0) {
139140
                            d = new WadokuPitchDictionary(name,
140141
                                    chooseLanguage(synopsis),
141142
                                    chooseLanguage(description),
142-
                                    cacheDir, url, size, entries, sha256, lang);
143+
                                    cacheDir, dataDir, url, size, entries, sha256, lang);
143144
                        } else if (type.compareTo("kanjidic") == 0) {
144145
                            d = new KanjiDict(name,
145146
                                    chooseLanguage(synopsis),
146147
                                    chooseLanguage(description),
147-
                                    cacheDir, url, size, entries, sha256, lang);
148+
                                    cacheDir, dataDir, url, size, entries, sha256, lang);
148149
                        } else if (type.compareTo("ksvg") == 0) {
149150
                            d = new KanjiVG(name,
150151
                                    chooseLanguage(synopsis),
151152
                                    chooseLanguage(description),
152-
                                    cacheDir, url, size, entries, sha256, lang);
153+
                                    cacheDir, dataDir, url, size, entries, sha256, lang);
153154
                        } else if (type.compareTo("tatoeba") == 0) {
154155
                            d = new TatoebaDictionary(name,
155156
                                    chooseLanguage(synopsis),
156157
                                    chooseLanguage(description),
157-
                                    cacheDir, url, size, entries, sha256, lang);
158+
                                    cacheDir, dataDir, url, size, entries, sha256, lang);
158159
                        }
159160
160161
                        if(d != null) {

app/src/main/java/eu/lepiller/nani/dictionary/ExampleDictionary.java

77
import eu.lepiller.nani.result.KanjiResult;
88
99
public abstract class ExampleDictionary extends FileDictionary {
10-
    ExampleDictionary(String name, String description, String fullDescription, File cacheDir, String url, int fileSize, int entries, String hash, String lang) {
11-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
10+
    ExampleDictionary(String name, String description, String fullDescription, File cacheDir, File dataDir, String url, int fileSize, int entries, String hash, String lang) {
11+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
1212
    }
1313
1414
    abstract List<ExampleResult> search(final String word) throws IncompatibleFormatException;

app/src/main/java/eu/lepiller/nani/dictionary/FileDictionary.java

7373
    private final String mUrl;
7474
    private final static String TAG = "FileDictionary";
7575
76-
    FileDictionary(String name, String description, String fullDescription, File cacheDir, String url,
76+
    FileDictionary(String name, String description, String fullDescription, File cacheDir, File dataDir, String url,
7777
                   int fileSize, int entries, String hash, String lang) {
78-
        super(name, description, fullDescription, cacheDir, fileSize, entries, hash, lang);
78+
        super(name, description, fullDescription, cacheDir, dataDir, fileSize, entries, hash, lang);
7979
        mUrl = url;
8080
    }
8181

app/src/main/java/eu/lepiller/nani/dictionary/JMDict.java

55
import eu.lepiller.nani.R;
66
77
public class JMDict extends ResultDictionary {
8-
    JMDict(String name, String description, String fullDescription, File cacheDir, String url, int fileSize, int entries, String hash, String lang) {
9-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
8+
    JMDict(String name, String description, String fullDescription, File cacheDir, File dataDir, String url, int fileSize, int entries, String hash, String lang) {
9+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
1010
    }
1111
1212
    @Override

app/src/main/java/eu/lepiller/nani/dictionary/Jibiki.java

55
import eu.lepiller.nani.R;
66
77
public class Jibiki extends ResultDictionary {
8-
    Jibiki(String name, String description, String fullDescription, File cacheDir, String url, int fileSize, int entries, String hash, String lang) {
9-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
8+
    Jibiki(String name, String description, String fullDescription, File cacheDir, File dataDir, String url, int fileSize, int entries, String hash, String lang) {
9+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
1010
    }
1111
1212
    @Override

app/src/main/java/eu/lepiller/nani/dictionary/KanjiDict.java

1717
    final private static String TAG = "KANJIDIC";
1818
    private Huffman readingHuffman, meaningHuffman;
1919
20-
    KanjiDict(String name, String description, String fullDescription, File cacheDir, String url, int fileSize, int entries, String hash, String lang) {
21-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
20+
    KanjiDict(String name, String description, String fullDescription, File cacheDir, File dataDir, String url, int fileSize, int entries, String hash, String lang) {
21+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
2222
    }
2323
2424
    @Override

app/src/main/java/eu/lepiller/nani/dictionary/KanjiDictionary.java

55
import eu.lepiller.nani.result.KanjiResult;
66
77
public abstract class KanjiDictionary extends FileDictionary {
8-
    KanjiDictionary(String name, String description, String fullDescription, File cacheDir, String url, int fileSize, int entries, String hash, String lang) {
9-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
8+
    KanjiDictionary(String name, String description, String fullDescription, File cacheDir, File dataDir, String url, int fileSize, int entries, String hash, String lang) {
9+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
1010
    }
1111
1212
    abstract KanjiResult search(final String kanji) throws IncompatibleFormatException;

app/src/main/java/eu/lepiller/nani/dictionary/KanjiVG.java

1919
    final private static String TAG = "KANJIVG";
2020
    private Huffman commandHuffman;
2121
22-
    KanjiVG(String name, String description, String fullDescription, File cacheDir, String url, int fileSize, int entries, String hash, String lang) {
23-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
22+
    KanjiVG(String name, String description, String fullDescription, File cacheDir, File dataDir, String url, int fileSize, int entries, String hash, String lang) {
23+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
2424
    }
2525
2626
    @Override

app/src/main/java/eu/lepiller/nani/dictionary/RadicalDict.java

9595
        }
9696
    }
9797
98-
    RadicalDict(String name, String description, String fullDescription, File cacheDir, String url,
98+
    RadicalDict(String name, String description, String fullDescription, File cacheDir, File dataDir, String url,
9999
                int fileSize, int entries, String hash, String lang) {
100-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
100+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
101101
    }
102102
103103
    private static boolean contains(List<String> lst, String s) {

app/src/main/java/eu/lepiller/nani/dictionary/ResultAugmenterDictionary.java

55
import eu.lepiller.nani.result.Result;
66
77
public abstract class ResultAugmenterDictionary extends FileDictionary {
8-
    ResultAugmenterDictionary(String name, String description, String fullDescription, File cacheDir, String url, int fileSize, int entries, String hash, String lang) {
9-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
8+
    ResultAugmenterDictionary(String name, String description, String fullDescription, File cacheDir, File dataDir, String url, int fileSize, int entries, String hash, String lang) {
9+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
1010
    }
1111
1212
    void augment(Result r) throws IncompatibleFormatException {

app/src/main/java/eu/lepiller/nani/dictionary/ResultDictionary.java

1717
    final private static String TAG = "JMDICT";
1818
    private Huffman kanjiHuffman, readingHuffman, meaningHuffman;
1919
20-
    ResultDictionary(String name, String description, String fullDescription, File cacheDir, String url,
20+
    ResultDictionary(String name, String description, String fullDescription, File cacheDir, File dataDir, String url,
2121
                     int fileSize, int entries, String hash, String lang) {
22-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
22+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
2323
    }
2424
2525
    @Override

app/src/main/java/eu/lepiller/nani/dictionary/TatoebaDictionary.java

1818
    final private static String TAG = "TATOEBA";
1919
    private Huffman japaneseHuffman, translationHuffman;
2020
21-
    TatoebaDictionary(String name, String description, String fullDescription, File cacheDir, String url, int fileSize, int entries, String hash, String lang) {
22-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
21+
    TatoebaDictionary(String name, String description, String fullDescription, File cacheDir, File dataDir, String url, int fileSize, int entries, String hash, String lang) {
22+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
2323
    }
2424
2525
    @Override

app/src/main/java/eu/lepiller/nani/dictionary/WadokuPitchDictionary.java

1818
    private Huffman huffman = null;
1919
    private long triePos;
2020
21-
    WadokuPitchDictionary(String name, String description, String fullDescription, File cacheDir, String url, int fileSize, int entries, String hash, String lang) {
22-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
21+
    WadokuPitchDictionary(String name, String description, String fullDescription, File cacheDir, File dataDir, String url, int fileSize, int entries, String hash, String lang) {
22+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
2323
    }
2424
2525
    @Override

app/src/main/java/eu/lepiller/nani/dictionary/WadokuResultDictionary.java

55
import eu.lepiller.nani.R;
66
77
public class WadokuResultDictionary extends ResultDictionary {
8-
    WadokuResultDictionary(String name, String description, String fullDescription, File cacheDir, String url, int fileSize, int entries, String hash, String lang) {
9-
        super(name, description, fullDescription, cacheDir, url, fileSize, entries, hash, lang);
8+
    WadokuResultDictionary(String name, String description, String fullDescription, File cacheDir, File dataDir, String url, int fileSize, int entries, String hash, String lang) {
9+
        super(name, description, fullDescription, cacheDir, dataDir, url, fileSize, entries, hash, lang);
1010
    }
1111
1212
    @Override