149d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka/*
249d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka * Copyright (C) 2012 The Android Open Source Project
349d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka *
449d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License");
549d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka * you may not use this file except in compliance with the License.
649d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka * You may obtain a copy of the License at
749d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka *
849d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka *      http://www.apache.org/licenses/LICENSE-2.0
949d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka *
1049d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software
1149d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS,
1249d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1349d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka * See the License for the specific language governing permissions and
1449d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka * limitations under the License.
1549d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka */
1649d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
1749d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaokapackage com.android.inputmethod.keyboard.internal;
1849d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
19194e004e81f74c4124184ad8597d68e3837ea560Satoshi Kataokaimport android.content.res.ColorStateList;
2049d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaokaimport android.graphics.Typeface;
2149d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
22e28eba5074664d5716b8e58b8d0a235746b261ebKen Wakasaimport com.android.inputmethod.latin.utils.ResourceUtils;
2349d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
24e8c6d5a480987a1b5d8c3455512f7d75c8fe1de4Tadashi G. Takaokapublic final class KeyDrawParams {
25dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public Typeface mTypeface;
26dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
27dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mLetterSize;
28dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mLabelSize;
29dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mLargeLetterSize;
30dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mLargeLabelSize;
31dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mHintLetterSize;
32dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mShiftedLetterHintSize;
33dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mHintLabelSize;
34dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mPreviewTextSize;
35dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
36194e004e81f74c4124184ad8597d68e3837ea560Satoshi Kataoka    public ColorStateList mTextColorStateList;
37dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mTextInactivatedColor;
38dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mTextShadowColor;
39dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mHintLetterColor;
40dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mHintLabelColor;
41dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mShiftedLetterHintInactivatedColor;
42dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mShiftedLetterHintActivatedColor;
43dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mPreviewTextColor;
44dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
4549d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    public int mAnimAlpha;
4649d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
47a643b54b4daa262f7b6d5136c7ac54328bc09050Tadashi G. Takaoka    public KeyDrawParams() {}
48a643b54b4daa262f7b6d5136c7ac54328bc09050Tadashi G. Takaoka
49dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private KeyDrawParams(final KeyDrawParams copyFrom) {
50dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTypeface = copyFrom.mTypeface;
51dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
52dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLetterSize = copyFrom.mLetterSize;
53dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLabelSize = copyFrom.mLabelSize;
54dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLargeLetterSize = copyFrom.mLargeLetterSize;
55dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLargeLabelSize = copyFrom.mLargeLabelSize;
56dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLetterSize = copyFrom.mHintLetterSize;
57dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintSize = copyFrom.mShiftedLetterHintSize;
58dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLabelSize = copyFrom.mHintLabelSize;
59dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mPreviewTextSize = copyFrom.mPreviewTextSize;
60dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
61194e004e81f74c4124184ad8597d68e3837ea560Satoshi Kataoka        mTextColorStateList = copyFrom.mTextColorStateList;
62dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextInactivatedColor = copyFrom.mTextInactivatedColor;
63dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextShadowColor = copyFrom.mTextShadowColor;
64dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLetterColor = copyFrom.mHintLetterColor;
65dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLabelColor = copyFrom.mHintLabelColor;
66dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintInactivatedColor = copyFrom.mShiftedLetterHintInactivatedColor;
67dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintActivatedColor = copyFrom.mShiftedLetterHintActivatedColor;
68dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mPreviewTextColor = copyFrom.mPreviewTextColor;
69dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
70dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mAnimAlpha = copyFrom.mAnimAlpha;
7149d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    }
7249d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
73dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public void updateParams(final int keyHeight, final KeyVisualAttributes attr) {
74dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (attr == null) {
75dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            return;
76dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
77dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
78dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (attr.mTypeface != null) {
79dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            mTypeface = attr.mTypeface;
8049d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        }
81dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
82dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLetterSize = selectTextSizeFromDimensionOrRatio(keyHeight,
83dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                attr.mLetterSize, attr.mLetterRatio, mLetterSize);
84dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLabelSize = selectTextSizeFromDimensionOrRatio(keyHeight,
85dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                attr.mLabelSize, attr.mLabelRatio, mLabelSize);
86dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLargeLabelSize = selectTextSize(keyHeight, attr.mLargeLabelRatio, mLargeLabelSize);
87dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLargeLetterSize = selectTextSize(keyHeight, attr.mLargeLetterRatio, mLargeLetterSize);
88dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLetterSize = selectTextSize(keyHeight, attr.mHintLetterRatio, mHintLetterSize);
89dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintSize = selectTextSize(keyHeight,
90dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                attr.mShiftedLetterHintRatio, mShiftedLetterHintSize);
91dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLabelSize = selectTextSize(keyHeight, attr.mHintLabelRatio, mHintLabelSize);
92dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mPreviewTextSize = selectTextSize(keyHeight, attr.mPreviewTextRatio, mPreviewTextSize);
93194e004e81f74c4124184ad8597d68e3837ea560Satoshi Kataoka        mTextColorStateList =
94194e004e81f74c4124184ad8597d68e3837ea560Satoshi Kataoka                attr.mTextColorStateList != null ? attr.mTextColorStateList : mTextColorStateList;
95dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextInactivatedColor = selectColor(attr.mTextInactivatedColor, mTextInactivatedColor);
96dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextShadowColor = selectColor(attr.mTextShadowColor, mTextShadowColor);
97dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLetterColor = selectColor(attr.mHintLetterColor, mHintLetterColor);
98dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLabelColor = selectColor(attr.mHintLabelColor, mHintLabelColor);
99dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintInactivatedColor = selectColor(
100dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                attr.mShiftedLetterHintInactivatedColor, mShiftedLetterHintInactivatedColor);
101dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintActivatedColor = selectColor(
102dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                attr.mShiftedLetterHintActivatedColor, mShiftedLetterHintActivatedColor);
103dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mPreviewTextColor = selectColor(attr.mPreviewTextColor, mPreviewTextColor);
104dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    }
105dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
106dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public KeyDrawParams mayCloneAndUpdateParams(final int keyHeight,
107dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            final KeyVisualAttributes attr) {
108dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (attr == null) {
109dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            return this;
110dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
111dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        final KeyDrawParams newParams = new KeyDrawParams(this);
112dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        newParams.updateParams(keyHeight, attr);
113dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        return newParams;
11449d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    }
11549d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
11649d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    private static final int selectTextSizeFromDimensionOrRatio(final int keyHeight,
11749d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka            final int dimens, final float ratio, final int defaultDimens) {
11849d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        if (ResourceUtils.isValidDimensionPixelSize(dimens)) {
11949d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka            return dimens;
12049d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        }
12149d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        if (ResourceUtils.isValidFraction(ratio)) {
12249d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka            return (int)(keyHeight * ratio);
12349d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        }
12449d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        return defaultDimens;
12549d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    }
12649d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
127dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private static final int selectTextSize(final int keyHeight, final float ratio,
128dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            final int defaultSize) {
129dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (ResourceUtils.isValidFraction(ratio)) {
130dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            return (int)(keyHeight * ratio);
131dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
132dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        return defaultSize;
13349d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    }
13449d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
135dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private static final int selectColor(final int attrColor, final int defaultColor) {
136dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (attrColor != 0) {
137dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            return attrColor;
138dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
139dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        return defaultColor;
14049d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    }
14149d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka}
142