/*
* 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 android.text.TextUtils;
import android.util.AttributeSet;
import com.anysoftkeyboard.addons.AddOn;
import com.anysoftkeyboard.addons.AddOnsFactory;
import com.anysoftkeyboard.utils.Log;
import com.menny.android.anysoftkeyboard.R;
import java.util.ArrayList;
import java.util.HashMap;
public class ExternalDictionaryFactory extends AddOnsFactory<DictionaryAddOnAndBuilder> {
private static final String TAG = "ASK ExtDictFctry";
private static final String XML_LANGUAGE_ATTRIBUTE = "locale";
private static final String XML_ASSETS_ATTRIBUTE = "dictionaryAssertName";
private static final String XML_RESOURCE_ATTRIBUTE = "dictionaryResourceId";
private static final String XML_AUTO_TEXT_RESOURCE_ATTRIBUTE = "autoTextResourceId";
private static final String XML_INITIAL_SUGGESTIONS_ARRAY_RESOURCE_ATTRIBUTE = "initialSuggestions";
private static final ExternalDictionaryFactory msInstance;
static {
msInstance = new ExternalDictionaryFactory();
}
public static ArrayList<DictionaryAddOnAndBuilder> getAllAvailableExternalDictionaries(Context askContext) {
return msInstance.getAllAddOns(askContext);
}
public static DictionaryAddOnAndBuilder getDictionaryBuilderById(String id, Context askContext) {
return msInstance.getAddOnById(id, askContext);
}
public static DictionaryAddOnAndBuilder getDictionaryBuilderByLocale(String locale, Context askContext) {
return msInstance.getAddOnByLocale(locale, askContext);
}
private final HashMap<String, DictionaryAddOnAndBuilder> mBuildersByLocale = new HashMap<String, DictionaryAddOnAndBuilder>();
private ExternalDictionaryFactory() {
super(TAG, "com.menny.android.anysoftkeyboard.DICTIONARY", "com.menny.android.anysoftkeyboard.dictionaries",
"Dictionaries", "Dictionary",
R.xml.dictionaries, true);
}
@Override
protected synchronized void clearAddOnList() {
super.clearAddOnList();
mBuildersByLocale.clear();
}
@Override
protected void buildOtherDataBasedOnNewAddOns(
ArrayList<DictionaryAddOnAndBuilder> newAddOns) {
super.buildOtherDataBasedOnNewAddOns(newAddOns);
for (DictionaryAddOnAndBuilder addOn : newAddOns)
mBuildersByLocale.put(addOn.getLanguage(), addOn);
}
public synchronized DictionaryAddOnAndBuilder getAddOnByLocale(String locale, Context askContext) {
if (mBuildersByLocale.size() == 0)
loadAddOns(askContext);
return mBuildersByLocale.get(locale);
}
@Override
protected DictionaryAddOnAndBuilder createConcreteAddOn(Context askContext, Context context, String prefId, int nameId, String description, int sortIndex, AttributeSet attrs) {
final String language = attrs.getAttributeValue(null, XML_LANGUAGE_ATTRIBUTE);
final String assets = attrs.getAttributeValue(null, XML_ASSETS_ATTRIBUTE);
final int dictionaryResourceId = attrs.getAttributeResourceValue(null, XML_RESOURCE_ATTRIBUTE, AddOn.INVALID_RES_ID);
final int autoTextResId = attrs.getAttributeResourceValue(null, XML_AUTO_TEXT_RESOURCE_ATTRIBUTE, AddOn.INVALID_RES_ID);
final int initialSuggestionsId = attrs.getAttributeResourceValue(null, XML_INITIAL_SUGGESTIONS_ARRAY_RESOURCE_ATTRIBUTE, AddOn.INVALID_RES_ID);
//asserting
if (TextUtils.isEmpty(prefId) || (language == null) || (nameId == AddOn.INVALID_RES_ID) || ((assets == null) && (dictionaryResourceId == AddOn.INVALID_RES_ID))) {
Log.e(TAG, "External dictionary does not include all mandatory details! Will not create dictionary.");
return null;
} else {
final DictionaryAddOnAndBuilder creator;
if (dictionaryResourceId == AddOn.INVALID_RES_ID)
creator = new DictionaryAddOnAndBuilder(askContext, context, prefId, nameId, description, sortIndex, language, assets, initialSuggestionsId);
else
creator = new DictionaryAddOnAndBuilder(askContext, context, prefId, nameId, description, sortIndex, language, dictionaryResourceId, autoTextResId, initialSuggestionsId);
return creator;
}
}
}