17898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/* 27898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 37898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 47898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * you may not use this file except in compliance with the License. 67898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * You may obtain a copy of the License at 77898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 87898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * See the License for the specific language governing permissions and 147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations under the License. 157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpackage com.android.inputmethod.pinyin; 187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport java.util.Vector; 207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.content.Context; 227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/** 247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Class used to cache previously loaded soft keyboard layouts. 257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpublic class SkbPool { 277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private static SkbPool mInstance = null; 287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Vector<SkbTemplate> mSkbTemplates = new Vector<SkbTemplate>(); 307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private Vector<SoftKeyboard> mSoftKeyboards = new Vector<SoftKeyboard>(); 317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private SkbPool() { 337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public static SkbPool getInstance() { 367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == mInstance) mInstance = new SkbPool(); 377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return mInstance; 387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void resetCachedSkb() { 417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mSoftKeyboards.clear(); 427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public SkbTemplate getSkbTemplate(int skbTemplateId, Context context) { 457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project for (int i = 0; i < mSkbTemplates.size(); i++) { 467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project SkbTemplate t = mSkbTemplates.elementAt(i); 477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (t.getSkbTemplateId() == skbTemplateId) { 487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return t; 497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null != context) { 537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project XmlKeyboardLoader xkbl = new XmlKeyboardLoader(context); 547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project SkbTemplate t = xkbl.loadSkbTemplate(skbTemplateId); 557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null != t) { 567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mSkbTemplates.add(t); 577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return t; 587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return null; 617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // Try to find the keyboard in the pool with the cache id. If there is no 647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // keyboard found, try to load it with the given xml id. 657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public SoftKeyboard getSoftKeyboard(int skbCacheId, int skbXmlId, 667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int skbWidth, int skbHeight, Context context) { 677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project for (int i = 0; i < mSoftKeyboards.size(); i++) { 687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project SoftKeyboard skb = mSoftKeyboards.elementAt(i); 697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (skb.getCacheId() == skbCacheId && skb.getSkbXmlId() == skbXmlId) { 707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project skb.setSkbCoreSize(skbWidth, skbHeight); 717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project skb.setNewlyLoadedFlag(false); 727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return skb; 737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null != context) { 767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project XmlKeyboardLoader xkbl = new XmlKeyboardLoader(context); 777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project SoftKeyboard skb = xkbl.loadKeyboard(skbXmlId, skbWidth, skbHeight); 787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (skb != null) { 797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (skb.getCacheFlag()) { 807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project skb.setCacheId(skbCacheId); 817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mSoftKeyboards.add(skb); 827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return skb; 857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return null; 877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} 89