aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/anysoftkeyboard/dictionaries/DictionaryAddOnAndBuilder.java
blob: f00707b1626d8b09d61e21eb4ff668d0487b3d09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
 * Copyright (c) 2013 Menny Even-Danan
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.anysoftkeyboard.dictionaries;

import android.content.Context;
import com.anysoftkeyboard.addons.AddOnImpl;
import com.anysoftkeyboard.dictionaries.jni.BinaryDictionary;
import com.anysoftkeyboard.dictionaries.jni.ResourceBinaryDictionary;
import com.anysoftkeyboard.utils.Log;

import java.util.ArrayList;
import java.util.List;

public class DictionaryAddOnAndBuilder extends AddOnImpl {

    private static final String DICTIONARY_PREF_PREFIX = "dictionary_";

    private static final int INVALID_RES_ID = 0;

    private static final String TAG = "ASK DAOB";

    private final String mLanguage;
    private final String mAssetsFilename;
    private final int mDictionaryResId;
    private final int mAutoTextResId;
    private final int mInitialSuggestionsResId;

    private DictionaryAddOnAndBuilder(Context askContext, Context packageContext, String id,
                                      int nameResId, String description, int sortIndex, String dictionaryLanguage,
                                      String assetsFilename, int dictResId, int autoTextResId, int initialSuggestionsResId) {
        super(askContext, packageContext, DICTIONARY_PREF_PREFIX + id, nameResId, description, sortIndex);
        mLanguage = dictionaryLanguage;
        mAssetsFilename = assetsFilename;
        mDictionaryResId = dictResId;
        mAutoTextResId = autoTextResId;
        mInitialSuggestionsResId = initialSuggestionsResId;
    }

    public DictionaryAddOnAndBuilder(Context askContext, Context packageContext, String id,
                                     int nameResId, String description, int sortIndex, String dictionaryLanguage, String assetsFilename, int initialSuggestionsResId) {
        this(askContext, packageContext, id, nameResId, description, sortIndex, dictionaryLanguage, assetsFilename, INVALID_RES_ID, INVALID_RES_ID, initialSuggestionsResId);
    }

    public DictionaryAddOnAndBuilder(Context askContext, Context packageContext, String id,
                                     int nameResId, String description, int sortIndex, String dictionaryLanguage, int dictionaryResId, int autoTextResId, int initialSuggestionsResId) {
        this(askContext, packageContext, id, nameResId, description, sortIndex, dictionaryLanguage, null, dictionaryResId, autoTextResId, initialSuggestionsResId);
    }

    public String getLanguage() {
        return mLanguage;
    }

    public int getAutoTextResId() {
        return mAutoTextResId;
    }

    public Dictionary createDictionary() throws Exception {
        if (mDictionaryResId == INVALID_RES_ID)
            return new BinaryDictionary(getName(), getPackageContext().getAssets().openFd(mAssetsFilename));
        else
            return new ResourceBinaryDictionary(getName(), getPackageContext(), mDictionaryResId);
    }

    public AutoText createAutoText() {
        if (mAutoTextResId == INVALID_RES_ID) {
            return null;
        } else {
            try {
                return new AutoText(getPackageContext().getResources(), mAutoTextResId);
            } catch (OutOfMemoryError e) {
                Log.i(TAG, "Failed to create the AutoText dictionary.");
                return null;
            }
        }
    }

    public List<CharSequence> createInitialSuggestions() {
        if (mInitialSuggestionsResId == INVALID_RES_ID) {
            return null;
        } else {
            String[] initialSuggestions = getPackageContext().getResources().getStringArray(mInitialSuggestionsResId);
            if (initialSuggestions != null) {
                List<CharSequence> suggestionsList = new ArrayList<CharSequence>(initialSuggestions.length);
                for (String suggestion : initialSuggestions)
                    suggestionsList.add(suggestion);

                return suggestionsList;
            } else {
                return null;
            }
        }
    }
}