diff options
Diffstat (limited to 'src/com/android/inputmethod/pinyin/SkbTemplate.java')
-rw-r--r-- | src/com/android/inputmethod/pinyin/SkbTemplate.java | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/src/com/android/inputmethod/pinyin/SkbTemplate.java b/src/com/android/inputmethod/pinyin/SkbTemplate.java new file mode 100644 index 0000000..9ab53ff --- /dev/null +++ b/src/com/android/inputmethod/pinyin/SkbTemplate.java @@ -0,0 +1,233 @@ +/* + * 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 android.graphics.drawable.Drawable; + +import java.util.Vector; + +/** + * Key icon definition. It is defined in soft keyboard template. A soft keyboard + * can refer to such an icon in its xml file directly to improve performance. + */ +class KeyIconRecord { + int keyCode; + Drawable icon; + Drawable iconPopup; +} + + +/** + * Default definition for a certain key. It is defined in soft keyboard + * template. A soft keyboard can refer to a default key in its xml file. Nothing + * of the key can be overwritten, including the size. + */ +class KeyRecord { + int keyId; + SoftKey softKey; +} + + +/** + * Soft keyboard template used by soft keyboards to share common resources. In + * this way, memory cost is reduced. + */ +public class SkbTemplate { + private int mSkbTemplateId; + private Drawable mSkbBg; + private Drawable mBalloonBg; + private Drawable mPopupBg; + private float mXMargin = 0; + private float mYMargin = 0; + /** Key type list. */ + private Vector<SoftKeyType> mKeyTypeList = new Vector<SoftKeyType>(); + + /** + * Default key icon list. It is only for keys which do not have popup icons. + */ + private Vector<KeyIconRecord> mKeyIconRecords = new Vector<KeyIconRecord>(); + + /** + * Default key list. + */ + private Vector<KeyRecord> mKeyRecords = new Vector<KeyRecord>(); + + public SkbTemplate(int skbTemplateId) { + mSkbTemplateId = skbTemplateId; + } + + public int getSkbTemplateId() { + return mSkbTemplateId; + } + + public void setBackgrounds(Drawable skbBg, Drawable balloonBg, + Drawable popupBg) { + mSkbBg = skbBg; + mBalloonBg = balloonBg; + mPopupBg = popupBg; + } + + public Drawable getSkbBackground() { + return mSkbBg; + } + + public Drawable getBalloonBackground() { + return mBalloonBg; + } + + public Drawable getPopupBackground() { + return mPopupBg; + } + + public void setMargins(float xMargin, float yMargin) { + mXMargin = xMargin; + mYMargin = yMargin; + } + + public float getXMargin() { + return mXMargin; + } + + public float getYMargin() { + return mYMargin; + } + + public SoftKeyType createKeyType(int id, Drawable bg, Drawable hlBg) { + return new SoftKeyType(id, bg, hlBg); + } + + public boolean addKeyType(SoftKeyType keyType) { + // The newly added item should have the right id. + if (mKeyTypeList.size() != keyType.mKeyTypeId) return false; + mKeyTypeList.add(keyType); + return true; + } + + public SoftKeyType getKeyType(int typeId) { + if (typeId < 0 || typeId > mKeyTypeList.size()) return null; + return mKeyTypeList.elementAt(typeId); + } + + public void addDefaultKeyIcons(int keyCode, Drawable icon, + Drawable iconPopup) { + if (null == icon || null == iconPopup) return; + + KeyIconRecord iconRecord = new KeyIconRecord(); + iconRecord.icon = icon; + iconRecord.iconPopup = iconPopup; + iconRecord.keyCode = keyCode; + + int size = mKeyIconRecords.size(); + int pos = 0; + while (pos < size) { + if (mKeyIconRecords.get(pos).keyCode >= keyCode) break; + pos++; + } + mKeyIconRecords.add(pos, iconRecord); + } + + public Drawable getDefaultKeyIcon(int keyCode) { + int size = mKeyIconRecords.size(); + int pos = 0; + while (pos < size) { + KeyIconRecord iconRecord = mKeyIconRecords.get(pos); + if (iconRecord.keyCode < keyCode) { + pos++; + continue; + } + if (iconRecord.keyCode == keyCode) { + return iconRecord.icon; + } + return null; + } + return null; + } + + public Drawable getDefaultKeyIconPopup(int keyCode) { + int size = mKeyIconRecords.size(); + int pos = 0; + while (pos < size) { + KeyIconRecord iconRecord = mKeyIconRecords.get(pos); + if (iconRecord.keyCode < keyCode) { + pos++; + continue; + } + if (iconRecord.keyCode == keyCode) { + return iconRecord.iconPopup; + } + return null; + } + return null; + } + + public void addDefaultKey(int keyId, SoftKey softKey) { + if (null == softKey) return; + + KeyRecord keyRecord = new KeyRecord(); + keyRecord.keyId = keyId; + keyRecord.softKey = softKey; + + int size = mKeyRecords.size(); + int pos = 0; + while (pos < size) { + if (mKeyRecords.get(pos).keyId >= keyId) break; + pos++; + } + mKeyRecords.add(pos, keyRecord); + } + + public SoftKey getDefaultKey(int keyId) { + int size = mKeyRecords.size(); + int pos = 0; + while (pos < size) { + KeyRecord keyRecord = mKeyRecords.get(pos); + if (keyRecord.keyId < keyId) { + pos++; + continue; + } + if (keyRecord.keyId == keyId) { + return keyRecord.softKey; + } + return null; + } + return null; + } +} + + +class SoftKeyType { + public static final int KEYTYPE_ID_NORMAL_KEY = 0; + + public int mKeyTypeId; + public Drawable mKeyBg; + public Drawable mKeyHlBg; + public int mColor; + public int mColorHl; + public int mColorBalloon; + + SoftKeyType(int id, Drawable bg, Drawable hlBg) { + mKeyTypeId = id; + mKeyBg = bg; + mKeyHlBg = hlBg; + } + + public void setColors(int color, int colorHl, int colorBalloon) { + mColor = color; + mColorHl = colorHl; + mColorBalloon = colorBalloon; + } +} |