1dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka/*
2dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka * Copyright (C) 2012 The Android Open Source Project
3dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka *
4dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License");
5dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka * you may not use this file except in compliance with the License.
6dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka * You may obtain a copy of the License at
7dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka *
8dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka *      http://www.apache.org/licenses/LICENSE-2.0
9dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka *
10dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software
11dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS,
12dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka * See the License for the specific language governing permissions and
14dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka * limitations under the License.
15dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka */
16dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
17dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaokapackage com.android.inputmethod.keyboard.internal;
18dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
19dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaokaimport android.content.res.TypedArray;
20dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaokaimport android.graphics.Typeface;
21dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaokaimport android.util.SparseIntArray;
22dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
23dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaokaimport com.android.inputmethod.latin.R;
24e28eba5074664d5716b8e58b8d0a235746b261ebKen Wakasaimport com.android.inputmethod.latin.utils.ResourceUtils;
25dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
26a28a05e971cc242b338331a3b78276fa95188d19Tadashi G. Takaokapublic final class KeyVisualAttributes {
27dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final Typeface mTypeface;
28dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
29dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final float mLetterRatio;
30dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final int mLetterSize;
31dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final float mLabelRatio;
32dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final int mLabelSize;
33dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final float mLargeLetterRatio;
34dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final float mHintLetterRatio;
35dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final float mShiftedLetterHintRatio;
36dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final float mHintLabelRatio;
37dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final float mPreviewTextRatio;
38dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
39da500b7ec3093178922140cb67beca1e3578661dTadashi G. Takaoka    public final int mTextColor;
40dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final int mTextInactivatedColor;
41dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final int mTextShadowColor;
4237ec0fe9840aeb3fdf4a5749945045f7a76fd16bTadashi G. Takaoka    public final int mFunctionalTextColor;
43dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final int mHintLetterColor;
44dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final int mHintLabelColor;
45dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final int mShiftedLetterHintInactivatedColor;
46dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final int mShiftedLetterHintActivatedColor;
47dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public final int mPreviewTextColor;
48dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
492fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    public final float mHintLabelVerticalAdjustment;
500b5d12c6b4df6ddea2514a6646feb7db68e37ff4Tadashi G. Takaoka    public final float mLabelOffCenterRatio;
510b5d12c6b4df6ddea2514a6646feb7db68e37ff4Tadashi G. Takaoka    public final float mHintLabelOffCenterRatio;
522fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
53dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private static final int[] VISUAL_ATTRIBUTE_IDS = {
54dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyTypeface,
55dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyLetterSize,
56dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyLabelSize,
57dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyLargeLetterRatio,
58dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyHintLetterRatio,
59dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyShiftedLetterHintRatio,
60dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyHintLabelRatio,
61dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyPreviewTextRatio,
62dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyTextColor,
63dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyTextInactivatedColor,
64dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyTextShadowColor,
6537ec0fe9840aeb3fdf4a5749945045f7a76fd16bTadashi G. Takaoka        R.styleable.Keyboard_Key_functionalTextColor,
66dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyHintLetterColor,
67dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyHintLabelColor,
68dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyShiftedLetterHintInactivatedColor,
69dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyShiftedLetterHintActivatedColor,
70dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyPreviewTextColor,
712fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa        R.styleable.Keyboard_Key_keyHintLabelVerticalAdjustment,
720b5d12c6b4df6ddea2514a6646feb7db68e37ff4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyLabelOffCenterRatio,
730b5d12c6b4df6ddea2514a6646feb7db68e37ff4Tadashi G. Takaoka        R.styleable.Keyboard_Key_keyHintLabelOffCenterRatio
74dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    };
75dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private static final SparseIntArray sVisualAttributeIds = new SparseIntArray();
76dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private static final int ATTR_DEFINED = 1;
77dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private static final int ATTR_NOT_FOUND = 0;
78dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    static {
79dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        for (final int attrId : VISUAL_ATTRIBUTE_IDS) {
80dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            sVisualAttributeIds.put(attrId, ATTR_DEFINED);
81dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
82dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    }
83dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
84dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public static KeyVisualAttributes newInstance(final TypedArray keyAttr) {
85dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        final int indexCount = keyAttr.getIndexCount();
86dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        for (int i = 0; i < indexCount; i++) {
87dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            final int attrId = keyAttr.getIndex(i);
88dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            if (sVisualAttributeIds.get(attrId, ATTR_NOT_FOUND) == ATTR_NOT_FOUND) {
89dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                continue;
90dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            }
91dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            return new KeyVisualAttributes(keyAttr);
92dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
93dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        return null;
94dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    }
95dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
96dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private KeyVisualAttributes(final TypedArray keyAttr) {
97dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyTypeface)) {
98dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            mTypeface = Typeface.defaultFromStyle(
99dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                    keyAttr.getInt(R.styleable.Keyboard_Key_keyTypeface, Typeface.NORMAL));
100dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        } else {
101dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            mTypeface = null;
102dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
103dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
104dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLetterRatio = ResourceUtils.getFraction(keyAttr,
105dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyLetterSize);
106dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLetterSize = ResourceUtils.getDimensionPixelSize(keyAttr,
107dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyLetterSize);
108dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLabelRatio = ResourceUtils.getFraction(keyAttr,
109dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyLabelSize);
110dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLabelSize = ResourceUtils.getDimensionPixelSize(keyAttr,
111dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyLabelSize);
112dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLargeLetterRatio = ResourceUtils.getFraction(keyAttr,
113dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyLargeLetterRatio);
114dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLetterRatio = ResourceUtils.getFraction(keyAttr,
115dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyHintLetterRatio);
116dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintRatio = ResourceUtils.getFraction(keyAttr,
117dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyShiftedLetterHintRatio);
118dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLabelRatio = ResourceUtils.getFraction(keyAttr,
119dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyHintLabelRatio);
120dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mPreviewTextRatio = ResourceUtils.getFraction(keyAttr,
121dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyPreviewTextRatio);
122dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
123da500b7ec3093178922140cb67beca1e3578661dTadashi G. Takaoka        mTextColor = keyAttr.getColor(R.styleable.Keyboard_Key_keyTextColor, 0);
124dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextInactivatedColor = keyAttr.getColor(
125dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyTextInactivatedColor, 0);
126dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextShadowColor = keyAttr.getColor(R.styleable.Keyboard_Key_keyTextShadowColor, 0);
12737ec0fe9840aeb3fdf4a5749945045f7a76fd16bTadashi G. Takaoka        mFunctionalTextColor = keyAttr.getColor(R.styleable.Keyboard_Key_functionalTextColor, 0);
128dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLetterColor = keyAttr.getColor(R.styleable.Keyboard_Key_keyHintLetterColor, 0);
129dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLabelColor = keyAttr.getColor(R.styleable.Keyboard_Key_keyHintLabelColor, 0);
130dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintInactivatedColor = keyAttr.getColor(
131dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyShiftedLetterHintInactivatedColor, 0);
132dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintActivatedColor = keyAttr.getColor(
133dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyShiftedLetterHintActivatedColor, 0);
134dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mPreviewTextColor = keyAttr.getColor(R.styleable.Keyboard_Key_keyPreviewTextColor, 0);
1352fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
1362fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa        mHintLabelVerticalAdjustment = ResourceUtils.getFraction(keyAttr,
1372fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa                R.styleable.Keyboard_Key_keyHintLabelVerticalAdjustment, 0.0f);
1380b5d12c6b4df6ddea2514a6646feb7db68e37ff4Tadashi G. Takaoka        mLabelOffCenterRatio = ResourceUtils.getFraction(keyAttr,
1390b5d12c6b4df6ddea2514a6646feb7db68e37ff4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyLabelOffCenterRatio, 0.0f);
1400b5d12c6b4df6ddea2514a6646feb7db68e37ff4Tadashi G. Takaoka        mHintLabelOffCenterRatio = ResourceUtils.getFraction(keyAttr,
1410b5d12c6b4df6ddea2514a6646feb7db68e37ff4Tadashi G. Takaoka                R.styleable.Keyboard_Key_keyHintLabelOffCenterRatio, 0.0f);
142dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    }
143dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka}
144