From dabf96896ef4c304c6dad36b307a2a458a58209d Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Tue, 13 Mar 2012 14:15:39 +0900
Subject: [PATCH] Move language on spacebar parameters to LatinKeyboardView
 attributes

Change-Id: I06e5d7d158a9b14b00df34e68b12cd012faf17d1
---
 java/res/values/attrs.xml                     |  8 ++++
 java/res/values/config.xml                    |  4 --
 java/res/values/styles.xml                    |  3 ++
 .../keyboard/KeyboardSwitcher.java            |  6 +--
 .../keyboard/LatinKeyboardView.java           | 47 ++++++++++---------
 5 files changed, 38 insertions(+), 30 deletions(-)

diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index d47858d2e..d4a50b6cf 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -132,6 +132,14 @@
         <attr name="spacebarTextRatio" format="fraction" />
         <attr name="spacebarTextColor" format="color" />
         <attr name="spacebarTextShadowColor" format="color" />
+        <!-- Animation parameters for spacebar language label. -->
+        <attr name="durationOfFadeoutLanguageOnSpacebar" format="integer|enum">
+            <!-- This should be aligned with LatinKeyboardView.LANGUAGE_ON_SPACEBAR_* -->
+            <enum name="neverDisplay" value="0" />
+            <enum name="alwaysDisplay" value="-1" />
+        </attr>
+        <attr name="delayBeforeFadeoutLangageOnSpacebar" format="integer" />
+        <attr name="finalFadeoutFactorOfLanguageOnSpacebar" format="float" />
         <!-- Key detection hysteresis distance. -->
         <attr name="keyHysteresisDistance" format="dimension" />
         <!-- Touch noise threshold time in millisecond -->
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index dc4a4549a..a02b84ff0 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -35,13 +35,9 @@
     <bool name="config_default_bigram_prediction">false</bool>
     <bool name="config_default_sound_enabled">false</bool>
     <bool name="config_default_vibration_enabled">true</bool>
-    <!-- The language is never displayed if == 0, always displayed if < 0 -->
-    <integer name="config_delay_before_fadeout_language_on_spacebar">1200</integer>
     <integer name="config_delay_update_suggestions">100</integer>
     <integer name="config_delay_update_old_suggestions">300</integer>
     <integer name="config_delay_update_shift_state">100</integer>
-    <integer name="config_duration_of_fadeout_language_on_spacebar">200</integer>
-    <integer name="config_final_fadeout_percentage_of_language_on_spacebar">50</integer>
     <integer name="config_more_keys_keyboard_fadein_anim_time">0</integer>
     <integer name="config_more_keys_keyboard_fadeout_anim_time">100</integer>
     <integer name="config_keyboard_grid_width">32</integer>
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index 228665953..eb2f9bb03 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -78,6 +78,9 @@
         <item name="longPressSpaceKeyTimeout">@integer/config_long_press_space_key_timeout</item>
         <item name="ignoreSpecialKeyTimeout">@integer/config_ignore_special_key_timeout</item>
         <item name="showMoreKeysKeyboardAtTouchedPoint">@bool/config_show_more_keys_keyboard_at_touched_point</item>
+        <item name="durationOfFadeoutLanguageOnSpacebar">200</item>
+        <item name="delayBeforeFadeoutLangageOnSpacebar">1200</item>
+        <item name="finalFadeoutFactorOfLanguageOnSpacebar">0.5</item>
     </style>
     <style
         name="LatinKeyboardView"
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index cd80b9087..42dd6206c 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -180,11 +180,11 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions {
                 SettingsValues.getKeyPreviewPopupDismissDelay(mPrefs, mResources));
         mKeyboardView.updateAutoCorrectionState(mIsAutoCorrectionActive);
         mKeyboardView.updateShortcutKey(mSubtypeSwitcher.isShortcutImeReady());
+        final boolean subtypeChanged = (oldKeyboard == null)
+                || !keyboard.mId.mLocale.equals(oldKeyboard.mId.mLocale);
         final boolean needsToDisplayLanguage = mSubtypeSwitcher.needsToDisplayLanguage(
                 keyboard.mId.mLocale);
-        final boolean localeChanged = (oldKeyboard == null)
-                || !keyboard.mId.mLocale.equals(oldKeyboard.mId.mLocale);
-        mKeyboardView.startDisplayLanguageOnSpacebar(localeChanged, needsToDisplayLanguage);
+        mKeyboardView.startDisplayLanguageOnSpacebar(subtypeChanged, needsToDisplayLanguage);
     }
 
     public Keyboard getKeyboard() {
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index 54560eeec..9168d0775 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -19,7 +19,6 @@ package com.android.inputmethod.keyboard;
 import android.animation.ValueAnimator;
 import android.content.Context;
 import android.content.pm.PackageManager;
-import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.Color;
@@ -79,7 +78,9 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
     // Stuff to draw language name on spacebar.
     private ValueAnimator mLanguageOnSpacebarAnimator;
     private float mFinalFadeoutFactorOfLanguageOnSpacebar;
-    private int mDelayBeforeFadeoutLanguageOnSpacebar;
+    private int mDurationOfFadeoutLanguageOnSpacebar;
+    private static final int LANGUAGE_ON_SPACEBAR_NEVER_DISPLAY = 0;
+    private static final int LANGUAGE_ON_SPACEBAR_ALWAYS_DISPLAY = -1;
     private boolean mNeedsToDisplayLanguage;
     private Locale mSpacebarLocale;
     private float mSpacebarTextFadeFactor = 0.0f;
@@ -338,6 +339,13 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
         mSpacebarTextColor = a.getColor(R.styleable.LatinKeyboardView_spacebarTextColor, 0);
         mSpacebarTextShadowColor = a.getColor(
                 R.styleable.LatinKeyboardView_spacebarTextShadowColor, 0);
+        mDurationOfFadeoutLanguageOnSpacebar = a.getInt(
+                R.styleable.LatinKeyboardView_durationOfFadeoutLanguageOnSpacebar,
+                LANGUAGE_ON_SPACEBAR_NEVER_DISPLAY);
+        final int delayBeforeFadeoutLanguageOnSpacebar = a.getInt(
+                R.styleable.LatinKeyboardView_delayBeforeFadeoutLangageOnSpacebar, 0);
+        mFinalFadeoutFactorOfLanguageOnSpacebar = a.getFloat(
+                R.styleable.LatinKeyboardView_finalFadeoutFactorOfLanguageOnSpacebar, 0.0f);
 
         final KeyTimerParams keyTimerParams = new KeyTimerParams(a);
         mPointerTrackerParams = new PointerTrackerParams(a);
@@ -353,18 +361,12 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
 
         PointerTracker.setParameters(mPointerTrackerParams);
 
-        // TODO: These resources should be attributes of LatinKeyboardView.
-        final Resources res = getResources();
-        mFinalFadeoutFactorOfLanguageOnSpacebar = res.getInteger(
-                R.integer.config_final_fadeout_percentage_of_language_on_spacebar) / 100.0f;
-        mDelayBeforeFadeoutLanguageOnSpacebar = res.getInteger(
-                R.integer.config_delay_before_fadeout_language_on_spacebar);
-        final int durationOfFadeoutLanguageOnSpacebar = res.getInteger(
-                R.integer.config_duration_of_fadeout_language_on_spacebar);
         mLanguageOnSpacebarAnimator = ValueAnimator.ofFloat(
                 1.0f, mFinalFadeoutFactorOfLanguageOnSpacebar);
-        mLanguageOnSpacebarAnimator.setStartDelay(mDelayBeforeFadeoutLanguageOnSpacebar);
-        mLanguageOnSpacebarAnimator.setDuration(durationOfFadeoutLanguageOnSpacebar);
+        mLanguageOnSpacebarAnimator.setStartDelay(delayBeforeFadeoutLanguageOnSpacebar);
+        if (mDurationOfFadeoutLanguageOnSpacebar > 0) {
+            mLanguageOnSpacebarAnimator.setDuration(mDurationOfFadeoutLanguageOnSpacebar);
+        }
         mLanguageOnSpacebarAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
             @Override
             public void onAnimationUpdate(ValueAnimator animation) {
@@ -747,7 +749,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
                 super.draw(c);
                 tryGC = false;
             } catch (OutOfMemoryError e) {
-                tryGC = Utils.GCUtils.getInstance().tryGCOrWait("LatinKeyboardView", e);
+                tryGC = Utils.GCUtils.getInstance().tryGCOrWait(TAG, e);
             }
         }
     }
@@ -787,22 +789,21 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
         invalidateKey(shortcutKey);
     }
 
-    public void startDisplayLanguageOnSpacebar(boolean localeChanged,
+    public void startDisplayLanguageOnSpacebar(boolean subtypeChanged,
             boolean needsToDisplayLanguage) {
         mLanguageOnSpacebarAnimator.cancel();
         mNeedsToDisplayLanguage = needsToDisplayLanguage;
-        if (mDelayBeforeFadeoutLanguageOnSpacebar == 0) {
-            // The language is never displayed when the delay is zero.
+        if (mDurationOfFadeoutLanguageOnSpacebar == LANGUAGE_ON_SPACEBAR_NEVER_DISPLAY) {
             mSpacebarTextFadeFactor = 0.0f;
-        } else if (localeChanged || mDelayBeforeFadeoutLanguageOnSpacebar < 0) {
-            // The language is always displayed when the delay is negative.
+        } else if (mDurationOfFadeoutLanguageOnSpacebar == LANGUAGE_ON_SPACEBAR_ALWAYS_DISPLAY) {
             mSpacebarTextFadeFactor = 1.0f;
         } else {
-            mSpacebarTextFadeFactor = mFinalFadeoutFactorOfLanguageOnSpacebar;
-        }
-        if (localeChanged && mDelayBeforeFadeoutLanguageOnSpacebar > 0 && mNeedsToDisplayLanguage) {
-            // The fadeout animation will start when the delay is positive.
-            mLanguageOnSpacebarAnimator.start();
+            if (subtypeChanged && needsToDisplayLanguage) {
+                mSpacebarTextFadeFactor = 1.0f;
+                mLanguageOnSpacebarAnimator.start();
+            } else {
+                mSpacebarTextFadeFactor = mFinalFadeoutFactorOfLanguageOnSpacebar;
+            }
         }
         invalidateKey(mSpaceKey);
     }