blob: 4c46951a95a23f909b1d51f9319ad74f3e8feb3a [file] [log] [blame]
/*
* Copyright (C) 2009 The Android Open Source Project
*
* 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.android.inputmethod.pinyin;
import java.util.Vector;
import android.content.Context;
/**
* Class used to cache previously loaded soft keyboard layouts.
*/
public class SkbPool {
private static SkbPool mInstance = null;
private Vector<SkbTemplate> mSkbTemplates = new Vector<SkbTemplate>();
private Vector<SoftKeyboard> mSoftKeyboards = new Vector<SoftKeyboard>();
private SkbPool() {
}
public static SkbPool getInstance() {
if (null == mInstance) mInstance = new SkbPool();
return mInstance;
}
public void resetCachedSkb() {
mSoftKeyboards.clear();
}
public SkbTemplate getSkbTemplate(int skbTemplateId, Context context) {
for (int i = 0; i < mSkbTemplates.size(); i++) {
SkbTemplate t = mSkbTemplates.elementAt(i);
if (t.getSkbTemplateId() == skbTemplateId) {
return t;
}
}
if (null != context) {
XmlKeyboardLoader xkbl = new XmlKeyboardLoader(context);
SkbTemplate t = xkbl.loadSkbTemplate(skbTemplateId);
if (null != t) {
mSkbTemplates.add(t);
return t;
}
}
return null;
}
// Try to find the keyboard in the pool with the cache id. If there is no
// keyboard found, try to load it with the given xml id.
public SoftKeyboard getSoftKeyboard(int skbCacheId, int skbXmlId,
int skbWidth, int skbHeight, Context context) {
for (int i = 0; i < mSoftKeyboards.size(); i++) {
SoftKeyboard skb = mSoftKeyboards.elementAt(i);
if (skb.getCacheId() == skbCacheId && skb.getSkbXmlId() == skbXmlId) {
skb.setSkbCoreSize(skbWidth, skbHeight);
skb.setNewlyLoadedFlag(false);
return skb;
}
}
if (null != context) {
XmlKeyboardLoader xkbl = new XmlKeyboardLoader(context);
SoftKeyboard skb = xkbl.loadKeyboard(skbXmlId, skbWidth, skbHeight);
if (skb != null) {
if (skb.getCacheFlag()) {
skb.setCacheId(skbCacheId);
mSoftKeyboards.add(skb);
}
}
return skb;
}
return null;
}
}