Home | History | Annotate | Download | only in pinyin
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.inputmethod.pinyin;
     18 
     19 import android.graphics.drawable.Drawable;
     20 
     21 import java.util.Vector;
     22 
     23 /**
     24  * Key icon definition. It is defined in soft keyboard template. A soft keyboard
     25  * can refer to such an icon in its xml file directly to improve performance.
     26  */
     27 class KeyIconRecord {
     28     int keyCode;
     29     Drawable icon;
     30     Drawable iconPopup;
     31 }
     32 
     33 
     34 /**
     35  * Default definition for a certain key. It is defined in soft keyboard
     36  * template. A soft keyboard can refer to a default key in its xml file. Nothing
     37  * of the key can be overwritten, including the size.
     38  */
     39 class KeyRecord {
     40     int keyId;
     41     SoftKey softKey;
     42 }
     43 
     44 
     45 /**
     46  * Soft keyboard template used by soft keyboards to share common resources. In
     47  * this way, memory cost is reduced.
     48  */
     49 public class SkbTemplate {
     50     private int mSkbTemplateId;
     51     private Drawable mSkbBg;
     52     private Drawable mBalloonBg;
     53     private Drawable mPopupBg;
     54     private float mXMargin = 0;
     55     private float mYMargin = 0;
     56     /** Key type list. */
     57     private Vector<SoftKeyType> mKeyTypeList = new Vector<SoftKeyType>();
     58 
     59     /**
     60      * Default key icon list. It is only for keys which do not have popup icons.
     61      */
     62     private Vector<KeyIconRecord> mKeyIconRecords = new Vector<KeyIconRecord>();
     63 
     64     /**
     65      * Default key list.
     66      */
     67     private Vector<KeyRecord> mKeyRecords = new Vector<KeyRecord>();
     68 
     69     public SkbTemplate(int skbTemplateId) {
     70         mSkbTemplateId = skbTemplateId;
     71     }
     72 
     73     public int getSkbTemplateId() {
     74         return mSkbTemplateId;
     75     }
     76 
     77     public void setBackgrounds(Drawable skbBg, Drawable balloonBg,
     78             Drawable popupBg) {
     79         mSkbBg = skbBg;
     80         mBalloonBg = balloonBg;
     81         mPopupBg = popupBg;
     82     }
     83 
     84     public Drawable getSkbBackground() {
     85         return mSkbBg;
     86     }
     87 
     88     public Drawable getBalloonBackground() {
     89         return mBalloonBg;
     90     }
     91 
     92     public Drawable getPopupBackground() {
     93         return mPopupBg;
     94     }
     95 
     96     public void setMargins(float xMargin, float yMargin) {
     97         mXMargin = xMargin;
     98         mYMargin = yMargin;
     99     }
    100 
    101     public float getXMargin() {
    102         return mXMargin;
    103     }
    104 
    105     public float getYMargin() {
    106         return mYMargin;
    107     }
    108 
    109     public SoftKeyType createKeyType(int id, Drawable bg, Drawable hlBg) {
    110         return new SoftKeyType(id, bg, hlBg);
    111     }
    112 
    113     public boolean addKeyType(SoftKeyType keyType) {
    114         // The newly added item should have the right id.
    115         if (mKeyTypeList.size() != keyType.mKeyTypeId) return false;
    116         mKeyTypeList.add(keyType);
    117         return true;
    118     }
    119 
    120     public SoftKeyType getKeyType(int typeId) {
    121         if (typeId < 0 || typeId > mKeyTypeList.size()) return null;
    122         return mKeyTypeList.elementAt(typeId);
    123     }
    124 
    125     public void addDefaultKeyIcons(int keyCode, Drawable icon,
    126             Drawable iconPopup) {
    127         if (null == icon || null == iconPopup) return;
    128 
    129         KeyIconRecord iconRecord = new KeyIconRecord();
    130         iconRecord.icon = icon;
    131         iconRecord.iconPopup = iconPopup;
    132         iconRecord.keyCode = keyCode;
    133 
    134         int size = mKeyIconRecords.size();
    135         int pos = 0;
    136         while (pos < size) {
    137             if (mKeyIconRecords.get(pos).keyCode >= keyCode) break;
    138             pos++;
    139         }
    140         mKeyIconRecords.add(pos, iconRecord);
    141     }
    142 
    143     public Drawable getDefaultKeyIcon(int keyCode) {
    144         int size = mKeyIconRecords.size();
    145         int pos = 0;
    146         while (pos < size) {
    147             KeyIconRecord iconRecord = mKeyIconRecords.get(pos);
    148             if (iconRecord.keyCode < keyCode) {
    149                 pos++;
    150                 continue;
    151             }
    152             if (iconRecord.keyCode == keyCode) {
    153                 return iconRecord.icon;
    154             }
    155             return null;
    156         }
    157         return null;
    158     }
    159 
    160     public Drawable getDefaultKeyIconPopup(int keyCode) {
    161         int size = mKeyIconRecords.size();
    162         int pos = 0;
    163         while (pos < size) {
    164             KeyIconRecord iconRecord = mKeyIconRecords.get(pos);
    165             if (iconRecord.keyCode < keyCode) {
    166                 pos++;
    167                 continue;
    168             }
    169             if (iconRecord.keyCode == keyCode) {
    170                 return iconRecord.iconPopup;
    171             }
    172             return null;
    173         }
    174         return null;
    175     }
    176 
    177     public void addDefaultKey(int keyId, SoftKey softKey) {
    178         if (null == softKey) return;
    179 
    180         KeyRecord keyRecord = new KeyRecord();
    181         keyRecord.keyId = keyId;
    182         keyRecord.softKey = softKey;
    183 
    184         int size = mKeyRecords.size();
    185         int pos = 0;
    186         while (pos < size) {
    187             if (mKeyRecords.get(pos).keyId >= keyId) break;
    188             pos++;
    189         }
    190         mKeyRecords.add(pos, keyRecord);
    191     }
    192 
    193     public SoftKey getDefaultKey(int keyId) {
    194         int size = mKeyRecords.size();
    195         int pos = 0;
    196         while (pos < size) {
    197             KeyRecord keyRecord = mKeyRecords.get(pos);
    198             if (keyRecord.keyId < keyId) {
    199                 pos++;
    200                 continue;
    201             }
    202             if (keyRecord.keyId == keyId) {
    203                 return keyRecord.softKey;
    204             }
    205             return null;
    206         }
    207         return null;
    208     }
    209 }
    210 
    211 
    212 class SoftKeyType {
    213     public static final int KEYTYPE_ID_NORMAL_KEY = 0;
    214 
    215     public int mKeyTypeId;
    216     public Drawable mKeyBg;
    217     public Drawable mKeyHlBg;
    218     public int mColor;
    219     public int mColorHl;
    220     public int mColorBalloon;
    221 
    222     SoftKeyType(int id, Drawable bg, Drawable hlBg) {
    223         mKeyTypeId = id;
    224         mKeyBg = bg;
    225         mKeyHlBg = hlBg;
    226     }
    227 
    228     public void setColors(int color, int colorHl, int colorBalloon) {
    229         mColor = color;
    230         mColorHl = colorHl;
    231         mColorBalloon = colorBalloon;
    232     }
    233 }
    234