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
1949d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaokaimport android.graphics.Typeface;
2049d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
2149d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaokaimport com.android.inputmethod.latin.ResourceUtils;
2249d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
23e8c6d5a480987a1b5d8c3455512f7d75c8fe1de4Tadashi G. Takaokapublic final class KeyDrawParams {
24dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public Typeface mTypeface;
25dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
26dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mLetterSize;
27dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mLabelSize;
28dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mLargeLetterSize;
29dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mLargeLabelSize;
30dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mHintLetterSize;
31dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mShiftedLetterHintSize;
32dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mHintLabelSize;
33dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mPreviewTextSize;
34dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
35dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mTextColor;
36dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mTextInactivatedColor;
37dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mTextShadowColor;
38dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mHintLetterColor;
39dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mHintLabelColor;
40dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mShiftedLetterHintInactivatedColor;
41dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mShiftedLetterHintActivatedColor;
42dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public int mPreviewTextColor;
43dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
4449d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    public int mAnimAlpha;
4549d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
46a643b54b4daa262f7b6d5136c7ac54328bc09050Tadashi G. Takaoka    public KeyDrawParams() {}
47a643b54b4daa262f7b6d5136c7ac54328bc09050Tadashi G. Takaoka
48dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private KeyDrawParams(final KeyDrawParams copyFrom) {
49dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTypeface = copyFrom.mTypeface;
50dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
51dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLetterSize = copyFrom.mLetterSize;
52dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLabelSize = copyFrom.mLabelSize;
53dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLargeLetterSize = copyFrom.mLargeLetterSize;
54dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLargeLabelSize = copyFrom.mLargeLabelSize;
55dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLetterSize = copyFrom.mHintLetterSize;
56dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintSize = copyFrom.mShiftedLetterHintSize;
57dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLabelSize = copyFrom.mHintLabelSize;
58dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mPreviewTextSize = copyFrom.mPreviewTextSize;
59dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
60dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextColor = copyFrom.mTextColor;
61dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextInactivatedColor = copyFrom.mTextInactivatedColor;
62dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextShadowColor = copyFrom.mTextShadowColor;
63dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLetterColor = copyFrom.mHintLetterColor;
64dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLabelColor = copyFrom.mHintLabelColor;
65dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintInactivatedColor = copyFrom.mShiftedLetterHintInactivatedColor;
66dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintActivatedColor = copyFrom.mShiftedLetterHintActivatedColor;
67dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mPreviewTextColor = copyFrom.mPreviewTextColor;
68dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
69dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mAnimAlpha = copyFrom.mAnimAlpha;
7049d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    }
7149d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
72dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public void updateParams(final int keyHeight, final KeyVisualAttributes attr) {
73dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (attr == null) {
74dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            return;
75dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
76dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
77dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (attr.mTypeface != null) {
78dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            mTypeface = attr.mTypeface;
7949d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        }
80dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
81dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLetterSize = selectTextSizeFromDimensionOrRatio(keyHeight,
82dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                attr.mLetterSize, attr.mLetterRatio, mLetterSize);
83dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLabelSize = selectTextSizeFromDimensionOrRatio(keyHeight,
84dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                attr.mLabelSize, attr.mLabelRatio, mLabelSize);
85dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLargeLabelSize = selectTextSize(keyHeight, attr.mLargeLabelRatio, mLargeLabelSize);
86dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mLargeLetterSize = selectTextSize(keyHeight, attr.mLargeLetterRatio, mLargeLetterSize);
87dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLetterSize = selectTextSize(keyHeight, attr.mHintLetterRatio, mHintLetterSize);
88dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintSize = selectTextSize(keyHeight,
89dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                attr.mShiftedLetterHintRatio, mShiftedLetterHintSize);
90dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLabelSize = selectTextSize(keyHeight, attr.mHintLabelRatio, mHintLabelSize);
91dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mPreviewTextSize = selectTextSize(keyHeight, attr.mPreviewTextRatio, mPreviewTextSize);
92dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
93dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextColor = selectColor(attr.mTextColor, mTextColor);
94dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextInactivatedColor = selectColor(attr.mTextInactivatedColor, mTextInactivatedColor);
95dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mTextShadowColor = selectColor(attr.mTextShadowColor, mTextShadowColor);
96dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLetterColor = selectColor(attr.mHintLetterColor, mHintLetterColor);
97dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mHintLabelColor = selectColor(attr.mHintLabelColor, mHintLabelColor);
98dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintInactivatedColor = selectColor(
99dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                attr.mShiftedLetterHintInactivatedColor, mShiftedLetterHintInactivatedColor);
100dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mShiftedLetterHintActivatedColor = selectColor(
101dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka                attr.mShiftedLetterHintActivatedColor, mShiftedLetterHintActivatedColor);
102dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        mPreviewTextColor = selectColor(attr.mPreviewTextColor, mPreviewTextColor);
103dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    }
104dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka
105dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    public KeyDrawParams mayCloneAndUpdateParams(final int keyHeight,
106dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            final KeyVisualAttributes attr) {
107dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (attr == null) {
108dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            return this;
109dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
110dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        final KeyDrawParams newParams = new KeyDrawParams(this);
111dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        newParams.updateParams(keyHeight, attr);
112dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        return newParams;
11349d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    }
11449d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
11549d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    private static final int selectTextSizeFromDimensionOrRatio(final int keyHeight,
11649d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka            final int dimens, final float ratio, final int defaultDimens) {
11749d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        if (ResourceUtils.isValidDimensionPixelSize(dimens)) {
11849d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka            return dimens;
11949d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        }
12049d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        if (ResourceUtils.isValidFraction(ratio)) {
12149d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka            return (int)(keyHeight * ratio);
12249d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        }
12349d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka        return defaultDimens;
12449d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    }
12549d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
126dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private static final int selectTextSize(final int keyHeight, final float ratio,
127dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            final int defaultSize) {
128dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (ResourceUtils.isValidFraction(ratio)) {
129dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            return (int)(keyHeight * ratio);
130dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
131dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        return defaultSize;
13249d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    }
13349d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka
134dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka    private static final int selectColor(final int attrColor, final int defaultColor) {
135dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        if (attrColor != 0) {
136dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka            return attrColor;
137dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        }
138dc34da218a22489d92d1015e9e5dac8d951b89f4Tadashi G. Takaoka        return defaultColor;
13949d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka    }
14049d8af8a4e900f3c68c333aba7fde0a11fd368b1Tadashi G. Takaoka}
141