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