• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
SkbTemplate(int skbTemplateId)69     public SkbTemplate(int skbTemplateId) {
70         mSkbTemplateId = skbTemplateId;
71     }
72 
getSkbTemplateId()73     public int getSkbTemplateId() {
74         return mSkbTemplateId;
75     }
76 
setBackgrounds(Drawable skbBg, Drawable balloonBg, Drawable popupBg)77     public void setBackgrounds(Drawable skbBg, Drawable balloonBg,
78             Drawable popupBg) {
79         mSkbBg = skbBg;
80         mBalloonBg = balloonBg;
81         mPopupBg = popupBg;
82     }
83 
getSkbBackground()84     public Drawable getSkbBackground() {
85         return mSkbBg;
86     }
87 
getBalloonBackground()88     public Drawable getBalloonBackground() {
89         return mBalloonBg;
90     }
91 
getPopupBackground()92     public Drawable getPopupBackground() {
93         return mPopupBg;
94     }
95 
setMargins(float xMargin, float yMargin)96     public void setMargins(float xMargin, float yMargin) {
97         mXMargin = xMargin;
98         mYMargin = yMargin;
99     }
100 
getXMargin()101     public float getXMargin() {
102         return mXMargin;
103     }
104 
getYMargin()105     public float getYMargin() {
106         return mYMargin;
107     }
108 
createKeyType(int id, Drawable bg, Drawable hlBg)109     public SoftKeyType createKeyType(int id, Drawable bg, Drawable hlBg) {
110         return new SoftKeyType(id, bg, hlBg);
111     }
112 
addKeyType(SoftKeyType keyType)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 
getKeyType(int typeId)120     public SoftKeyType getKeyType(int typeId) {
121         if (typeId < 0 || typeId > mKeyTypeList.size()) return null;
122         return mKeyTypeList.elementAt(typeId);
123     }
124 
addDefaultKeyIcons(int keyCode, Drawable icon, Drawable iconPopup)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 
getDefaultKeyIcon(int keyCode)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 
getDefaultKeyIconPopup(int keyCode)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 
addDefaultKey(int keyId, SoftKey softKey)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 
getDefaultKey(int keyId)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 
SoftKeyType(int id, Drawable bg, Drawable hlBg)222     SoftKeyType(int id, Drawable bg, Drawable hlBg) {
223         mKeyTypeId = id;
224         mKeyBg = bg;
225         mKeyHlBg = hlBg;
226     }
227 
setColors(int color, int colorHl, int colorBalloon)228     public void setColors(int color, int colorHl, int colorBalloon) {
229         mColor = color;
230         mColorHl = colorHl;
231         mColorBalloon = colorBalloon;
232     }
233 }
234