blob: 9ab53ff1a7779901449191d37b1292f53d3bf568 [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 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;
}
}