| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.inputmethod.pinyin; |
| |
| import android.content.Context; |
| import android.content.res.Configuration; |
| import android.view.Display; |
| import android.view.WindowManager; |
| |
| /** |
| * Global environment configurations for showing soft keyboard and candidate |
| * view. All original dimension values are defined in float, and the real size |
| * is calculated from the float values of and screen size. In this way, this |
| * input method can work even when screen size is changed. |
| */ |
| public class Environment { |
| /** |
| * The key height for portrait mode. It is relative to the screen height. |
| */ |
| private static final float KEY_HEIGHT_RATIO_PORTRAIT = 0.105f; |
| |
| /** |
| * The key height for landscape mode. It is relative to the screen height. |
| */ |
| private static final float KEY_HEIGHT_RATIO_LANDSCAPE = 0.147f; |
| |
| /** |
| * The height of the candidates area for portrait mode. It is relative to |
| * screen height. |
| */ |
| private static final float CANDIDATES_AREA_HEIGHT_RATIO_PORTRAIT = 0.084f; |
| |
| /** |
| * The height of the candidates area for portrait mode. It is relative to |
| * screen height. |
| */ |
| private static final float CANDIDATES_AREA_HEIGHT_RATIO_LANDSCAPE = 0.125f; |
| |
| /** |
| * How much should the balloon width be larger than width of the real key. |
| * It is relative to the smaller one of screen width and height. |
| */ |
| private static final float KEY_BALLOON_WIDTH_PLUS_RATIO = 0.08f; |
| |
| /** |
| * How much should the balloon height be larger than that of the real key. |
| * It is relative to the smaller one of screen width and height. |
| */ |
| private static final float KEY_BALLOON_HEIGHT_PLUS_RATIO = 0.07f; |
| |
| /** |
| * The text size for normal keys. It is relative to the smaller one of |
| * screen width and height. |
| */ |
| private static final float NORMAL_KEY_TEXT_SIZE_RATIO = 0.075f; |
| |
| /** |
| * The text size for function keys. It is relative to the smaller one of |
| * screen width and height. |
| */ |
| private static final float FUNCTION_KEY_TEXT_SIZE_RATIO = 0.055f; |
| |
| /** |
| * The text size balloons of normal keys. It is relative to the smaller one |
| * of screen width and height. |
| */ |
| private static final float NORMAL_BALLOON_TEXT_SIZE_RATIO = 0.14f; |
| |
| /** |
| * The text size balloons of function keys. It is relative to the smaller |
| * one of screen width and height. |
| */ |
| private static final float FUNCTION_BALLOON_TEXT_SIZE_RATIO = 0.085f; |
| |
| /** |
| * The configurations are managed in a singleton. |
| */ |
| private static Environment mInstance; |
| |
| private int mScreenWidth; |
| private int mScreenHeight; |
| private int mKeyHeight; |
| private int mCandidatesAreaHeight; |
| private int mKeyBalloonWidthPlus; |
| private int mKeyBalloonHeightPlus; |
| private int mNormalKeyTextSize; |
| private int mFunctionKeyTextSize; |
| private int mNormalBalloonTextSize; |
| private int mFunctionBalloonTextSize; |
| private Configuration mConfig = new Configuration(); |
| private boolean mDebug = false; |
| |
| private Environment() { |
| } |
| |
| public static Environment getInstance() { |
| if (null == mInstance) { |
| mInstance = new Environment(); |
| } |
| return mInstance; |
| } |
| |
| public void onConfigurationChanged(Configuration newConfig, Context context) { |
| if (mConfig.orientation != newConfig.orientation) { |
| WindowManager wm = (WindowManager) context |
| .getSystemService(Context.WINDOW_SERVICE); |
| Display d = wm.getDefaultDisplay(); |
| mScreenWidth = d.getWidth(); |
| mScreenHeight = d.getHeight(); |
| |
| int scale; |
| if (mScreenHeight > mScreenWidth) { |
| mKeyHeight = (int) (mScreenHeight * KEY_HEIGHT_RATIO_PORTRAIT); |
| mCandidatesAreaHeight = (int) (mScreenHeight * CANDIDATES_AREA_HEIGHT_RATIO_PORTRAIT); |
| scale = mScreenWidth; |
| } else { |
| mKeyHeight = (int) (mScreenHeight * KEY_HEIGHT_RATIO_LANDSCAPE); |
| mCandidatesAreaHeight = (int) (mScreenHeight * CANDIDATES_AREA_HEIGHT_RATIO_LANDSCAPE); |
| scale = mScreenHeight; |
| } |
| mNormalKeyTextSize = (int) (scale * NORMAL_KEY_TEXT_SIZE_RATIO); |
| mFunctionKeyTextSize = (int) (scale * FUNCTION_KEY_TEXT_SIZE_RATIO); |
| mNormalBalloonTextSize = (int) (scale * NORMAL_BALLOON_TEXT_SIZE_RATIO); |
| mFunctionBalloonTextSize = (int) (scale * FUNCTION_BALLOON_TEXT_SIZE_RATIO); |
| mKeyBalloonWidthPlus = (int) (scale * KEY_BALLOON_WIDTH_PLUS_RATIO); |
| mKeyBalloonHeightPlus = (int) (scale * KEY_BALLOON_HEIGHT_PLUS_RATIO); |
| } |
| |
| mConfig.updateFrom(newConfig); |
| } |
| |
| public Configuration getConfiguration() { |
| return mConfig; |
| } |
| |
| public int getScreenWidth() { |
| return mScreenWidth; |
| } |
| |
| public int getScreenHeight() { |
| return mScreenHeight; |
| } |
| |
| public int getHeightForCandidates() { |
| return mCandidatesAreaHeight; |
| } |
| |
| public float getKeyXMarginFactor() { |
| return 1.0f; |
| } |
| |
| public float getKeyYMarginFactor() { |
| if (Configuration.ORIENTATION_LANDSCAPE == mConfig.orientation) { |
| return 0.7f; |
| } |
| return 1.0f; |
| } |
| |
| public int getKeyHeight() { |
| return mKeyHeight; |
| } |
| |
| public int getKeyBalloonWidthPlus() { |
| return mKeyBalloonWidthPlus; |
| } |
| |
| public int getKeyBalloonHeightPlus() { |
| return mKeyBalloonHeightPlus; |
| } |
| |
| public int getSkbHeight() { |
| if (Configuration.ORIENTATION_PORTRAIT == mConfig.orientation) { |
| return mKeyHeight * 4; |
| } else if (Configuration.ORIENTATION_LANDSCAPE == mConfig.orientation) { |
| return mKeyHeight * 4; |
| } |
| return 0; |
| } |
| |
| public int getKeyTextSize(boolean isFunctionKey) { |
| if (isFunctionKey) { |
| return mFunctionKeyTextSize; |
| } else { |
| return mNormalKeyTextSize; |
| } |
| } |
| |
| public int getBalloonTextSize(boolean isFunctionKey) { |
| if (isFunctionKey) { |
| return mFunctionBalloonTextSize; |
| } else { |
| return mNormalBalloonTextSize; |
| } |
| } |
| |
| public boolean hasHardKeyboard() { |
| if (mConfig.keyboard == Configuration.KEYBOARD_NOKEYS |
| || mConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) { |
| return false; |
| } |
| return true; |
| } |
| |
| public boolean needDebug() { |
| return mDebug; |
| } |
| } |