/*
* 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;
}
}
}
}