/* * 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 mSkbTemplates = new Vector(); private Vector mSoftKeyboards = new Vector(); 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; } }