From 31c94cea82f1788e3a04f2a1e012945f35497f0a Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Fri, 16 Mar 2012 14:05:20 +0900
Subject: [PATCH] Use ObjectAnimator

Bug: 6187069
Change-Id: I7df18b470b7e746da601fab3311fb4b086f40d41
---
 java/proguard.flags                           |   8 ++
 .../anim/alt_code_key_while_typing_fadein.xml |   3 +-
 .../alt_code_key_while_typing_fadeout.xml     |   3 +-
 .../res/anim/language_on_spacebar_fadeout.xml |   5 +-
 java/res/values/attrs.xml                     |   1 +
 java/res/values/config.xml                    |   1 +
 java/res/values/styles.xml                    |   1 +
 .../keyboard/LatinKeyboardView.java           | 113 ++++++++----------
 8 files changed, 68 insertions(+), 67 deletions(-)

diff --git a/java/proguard.flags b/java/proguard.flags
index a5a667987a..701786a848 100644
--- a/java/proguard.flags
+++ b/java/proguard.flags
@@ -35,6 +35,14 @@
   *;
 }
 
+-keep class com.android.inputmethod.keyboard.LatinKeyboardView {
+  # Keep getter/setter methods for ObjectAnimator
+  int getLanguageOnSpacebarAnimAlpha();
+  void setLanguageOnSpacebarAnimAlpha(int);
+  int getAltCodeKeyWhileTypingAnimAlhpa();
+  void setAltCodeKeyWhileTypingAnimAlpha(int);
+}
+
 -keep class com.android.inputmethod.keyboard.MoreKeysKeyboard$Builder$MoreKeysKeyboardParams {
   <init>(...);
 }
diff --git a/java/res/anim/alt_code_key_while_typing_fadein.xml b/java/res/anim/alt_code_key_while_typing_fadein.xml
index 3f5fd5d489..f8caca313b 100644
--- a/java/res/anim/alt_code_key_while_typing_fadein.xml
+++ b/java/res/anim/alt_code_key_while_typing_fadein.xml
@@ -18,8 +18,9 @@
 */
 -->
 
-<animator
+<objectAnimator
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:propertyName="altCodeKeyWhileTypingAnimAlpha"
     android:valueType="intType"
     android:duration="100"
     android:valueFrom="128"
diff --git a/java/res/anim/alt_code_key_while_typing_fadeout.xml b/java/res/anim/alt_code_key_while_typing_fadeout.xml
index ed4a6f298e..bad1e7465a 100644
--- a/java/res/anim/alt_code_key_while_typing_fadeout.xml
+++ b/java/res/anim/alt_code_key_while_typing_fadeout.xml
@@ -18,8 +18,9 @@
 */
 -->
 
-<animator
+<objectAnimator
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:propertyName="altCodeKeyWhileTypingAnimAlpha"
     android:valueType="intType"
     android:duration="70"
     android:valueFrom="255"
diff --git a/java/res/anim/language_on_spacebar_fadeout.xml b/java/res/anim/language_on_spacebar_fadeout.xml
index f66e1627b8..531f440cc2 100644
--- a/java/res/anim/language_on_spacebar_fadeout.xml
+++ b/java/res/anim/language_on_spacebar_fadeout.xml
@@ -18,10 +18,11 @@
 */
 -->
 
-<animator
+<objectAnimator
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:propertyName="languageOnSpacebarAnimAlpha"
     android:valueType="intType"
     android:startOffset="1200"
     android:duration="200"
     android:valueFrom="255"
-    android:valueTo="128" />
+    android:valueTo="@integer/config_language_on_spacebar_final_alpha" />
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index e619ad0a81..cf55fbe4a0 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -133,6 +133,7 @@
         <attr name="spacebarTextColor" format="color" />
         <attr name="spacebarTextShadowColor" format="color" />
         <!-- Fadeout animator for spacebar language label. -->
+        <attr name="languageOnSpacebarFinalAlpha" format="integer" />
         <attr name="languageOnSpacebarFadeoutAnimator" format="reference" />
         <!-- Fadeout and fadein animator for altCodeWhileTyping keys. -->
         <attr name="altCodeKeyWhileTypingFadeoutAnimator" format="reference" />
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index c51800fb0f..0a638d5864 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -38,6 +38,7 @@
     <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_language_on_spacebar_final_alpha">128</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 5628f271ca..691f98ae22 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -78,6 +78,7 @@
         <item name="longPressSpaceKeyTimeout">@integer/config_long_press_space_key_timeout</item>
         <item name="ignoreAltCodeKeyTimeout">@integer/config_ignore_alt_code_key_timeout</item>
         <item name="showMoreKeysKeyboardAtTouchedPoint">@bool/config_show_more_keys_keyboard_at_touched_point</item>
+        <item name="languageOnSpacebarFinalAlpha">@integer/config_language_on_spacebar_final_alpha</item>
         <item name="languageOnSpacebarFadeoutAnimator">@anim/language_on_spacebar_fadeout</item>
         <item name="altCodeKeyWhileTypingFadeoutAnimator">@anim/alt_code_key_while_typing_fadeout</item>
         <item name="altCodeKeyWhileTypingFadeinAnimator">@anim/alt_code_key_while_typing_fadein</item>
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index b869059e44..17d15b0615 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -16,11 +16,8 @@
 
 package com.android.inputmethod.keyboard;
 
-import android.animation.Animator;
 import android.animation.AnimatorInflater;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
+import android.animation.ObjectAnimator;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.res.TypedArray;
@@ -79,12 +76,12 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
     private Key mSpaceKey;
     private Drawable mSpaceIcon;
     // Stuff to draw language name on spacebar.
-    private ValueAnimator mLanguageOnSpacebarFadeoutAnimator;
-    private int mFinalAlphaOfLanguageOnSpacebar;
+    private final int mLanguageOnSpacebarFinalAlpha;
+    private ObjectAnimator mLanguageOnSpacebarFadeoutAnimator;
     private static final int ALPHA_OPAQUE = 255;
     private boolean mNeedsToDisplayLanguage;
     private Locale mSpacebarLocale;
-    private int mSpacebarTextAlpha = ALPHA_OPAQUE;
+    private int mLanguageOnSpacebarAnimAlpha = ALPHA_OPAQUE;
     private final float mSpacebarTextRatio;
     private float mSpacebarTextSize;
     private final int mSpacebarTextColor;
@@ -99,8 +96,8 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
     private static final int SPACE_LED_LENGTH_PERCENT = 80;
 
     // Stuff to draw altCodeWhileTyping keys.
-    private ValueAnimator mAltCodeKeyWhileTypingFadeoutAnimator;
-    private ValueAnimator mAltCodeKeyWhileTypingFadeinAnimator;
+    private ObjectAnimator mAltCodeKeyWhileTypingFadeoutAnimator;
+    private ObjectAnimator mAltCodeKeyWhileTypingFadeinAnimator;
     private int mAltCodeKeyWhileTypingAnimAlpha = ALPHA_OPAQUE;
 
     // More keys keyboard
@@ -230,8 +227,8 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
             removeMessages(MSG_LONGPRESS_KEY);
         }
 
-        private static void cancelAndStartAnimators(ValueAnimator animatorToCancel,
-                ValueAnimator animatorToStart) {
+        public static void cancelAndStartAnimators(ObjectAnimator animatorToCancel,
+                ObjectAnimator animatorToStart) {
             if (animatorToCancel != null && animatorToCancel.isStarted()) {
                 animatorToCancel.cancel();
             }
@@ -365,6 +362,8 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
         mSpacebarTextColor = a.getColor(R.styleable.LatinKeyboardView_spacebarTextColor, 0);
         mSpacebarTextShadowColor = a.getColor(
                 R.styleable.LatinKeyboardView_spacebarTextShadowColor, 0);
+        mLanguageOnSpacebarFinalAlpha = a.getInt(
+                R.styleable.LatinKeyboardView_languageOnSpacebarFinalAlpha, ALPHA_OPAQUE);
         final int languageOnSpacebarFadeoutAnimatorResId = a.getResourceId(
                 R.styleable.LatinKeyboardView_languageOnSpacebarFadeoutAnimator, 0);
         final int altCodeKeyWhileTypingFadeoutAnimatorResId = a.getResourceId(
@@ -386,55 +385,41 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
 
         PointerTracker.setParameters(mPointerTrackerParams);
 
-        final ValueAnimator animator = loadValueAnimator(languageOnSpacebarFadeoutAnimatorResId);
+        mLanguageOnSpacebarFadeoutAnimator = loadObjectAnimator(
+                languageOnSpacebarFadeoutAnimatorResId, this);
+        mAltCodeKeyWhileTypingFadeoutAnimator = loadObjectAnimator(
+                altCodeKeyWhileTypingFadeoutAnimatorResId, this);
+        mAltCodeKeyWhileTypingFadeinAnimator = loadObjectAnimator(
+                altCodeKeyWhileTypingFadeinAnimatorResId, this);
+    }
+
+    private ObjectAnimator loadObjectAnimator(int resId, Object target) {
+        if (resId == 0) return null;
+        final ObjectAnimator animator = (ObjectAnimator)AnimatorInflater.loadAnimator(
+                getContext(), resId);
         if (animator != null) {
-            animator.addUpdateListener(new AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animation) {
-                    mSpacebarTextAlpha = (Integer)animation.getAnimatedValue();
-                    invalidateKey(mSpaceKey);
-                }
-            });
-            animator.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animator a) {
-                    final ValueAnimator valueAnimator = (ValueAnimator)a;
-                    mFinalAlphaOfLanguageOnSpacebar = (Integer)valueAnimator.getAnimatedValue();
-                }
-            });
-            // In order to get the final value of animator.
-            animator.end();
-        }
-        mLanguageOnSpacebarFadeoutAnimator = animator;
-
-        final ValueAnimator fadeout = loadValueAnimator(altCodeKeyWhileTypingFadeoutAnimatorResId);
-        if (fadeout != null) {
-            fadeout.addUpdateListener(new AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animation) {
-                    mAltCodeKeyWhileTypingAnimAlpha = (Integer)animation.getAnimatedValue();
-                    updateAltCodeKeyWhileTyping();
-                }
-            });
+            animator.setTarget(target);
         }
-        mAltCodeKeyWhileTypingFadeoutAnimator = fadeout;
+        return animator;
+    }
 
-        final ValueAnimator fadein = loadValueAnimator(altCodeKeyWhileTypingFadeinAnimatorResId);
-        if (fadein != null) {
-            fadein.addUpdateListener(new AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animation) {
-                    mAltCodeKeyWhileTypingAnimAlpha = (Integer)animation.getAnimatedValue();
-                    updateAltCodeKeyWhileTyping();
-                }
-            });
-        }
-        mAltCodeKeyWhileTypingFadeinAnimator = fadein;
+    // Getter/setter methods for {@link ObjectAnimator}.
+    public int getLanguageOnSpacebarAnimAlpha() {
+        return mLanguageOnSpacebarAnimAlpha;
     }
 
-    private ValueAnimator loadValueAnimator(int resId) {
-        if (resId == 0) return null;
-        return (ValueAnimator)AnimatorInflater.loadAnimator(getContext(), resId);
+    public void setLanguageOnSpacebarAnimAlpha(int alpha) {
+        mLanguageOnSpacebarAnimAlpha = alpha;
+        invalidateKey(mSpaceKey);
+    }
+
+    public int getAltCodeKeyWhileTypingAnimAlpha() {
+        return mAltCodeKeyWhileTypingAnimAlpha;
+    }
+
+    public void setAltCodeKeyWhileTypingAnimAlpha(int alpha) {
+        mAltCodeKeyWhileTypingAnimAlpha = alpha;
+        updateAltCodeKeyWhileTyping();
     }
 
     public void setKeyboardActionListener(KeyboardActionListener listener) {
@@ -859,19 +844,21 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
 
     public void startDisplayLanguageOnSpacebar(boolean subtypeChanged,
             boolean needsToDisplayLanguage) {
-        final ValueAnimator animator = mLanguageOnSpacebarFadeoutAnimator;
-        if (animator != null) {
-           animator.cancel();
-        }
+        final ObjectAnimator animator = mLanguageOnSpacebarFadeoutAnimator;
         mNeedsToDisplayLanguage = needsToDisplayLanguage;
         if (animator == null) {
             mNeedsToDisplayLanguage = false;
         } else {
             if (subtypeChanged && needsToDisplayLanguage) {
-                mSpacebarTextAlpha = ALPHA_OPAQUE;
+                setLanguageOnSpacebarAnimAlpha(ALPHA_OPAQUE);
+                if (animator.isStarted()) {
+                    animator.cancel();
+                }
                 animator.start();
             } else {
-                mSpacebarTextAlpha = mFinalAlphaOfLanguageOnSpacebar;
+                if (!animator.isStarted()) {
+                    mLanguageOnSpacebarAnimAlpha = mLanguageOnSpacebarFinalAlpha;
+                }
             }
         }
         invalidateKey(mSpaceKey);
@@ -965,10 +952,10 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
             final float textHeight = -paint.ascent() + descent;
             final float baseline = height / 2 + textHeight / 2;
             paint.setColor(mSpacebarTextShadowColor);
-            paint.setAlpha(mSpacebarTextAlpha);
+            paint.setAlpha(mLanguageOnSpacebarAnimAlpha);
             canvas.drawText(language, width / 2, baseline - descent - 1, paint);
             paint.setColor(mSpacebarTextColor);
-            paint.setAlpha(mSpacebarTextAlpha);
+            paint.setAlpha(mLanguageOnSpacebarAnimAlpha);
             canvas.drawText(language, width / 2, baseline - descent, paint);
         }
 
-- 
GitLab