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