OSDN Git Service

Fixed a bug where the notification texts wouldn't animate
authorSelim Cinek <cinek@google.com>
Tue, 1 Mar 2016 20:06:57 +0000 (12:06 -0800)
committerSelim Cinek <cinek@google.com>
Wed, 2 Mar 2016 01:21:26 +0000 (01:21 +0000)
If the texts were the same but one had an ellipsis and the
other didn't, things were not animating nicely.

Bug: 27419215
Change-Id: Iaa9611e1cf60b6fe71113b76f36ab5c24e461961

packages/SystemUI/src/com/android/systemui/statusbar/notification/TextViewTransformState.java

index 5ab441d..d3393b3 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.android.systemui.statusbar.notification;
 
+import android.text.Layout;
 import android.text.TextUtils;
 import android.util.Pools;
 import android.view.View;
@@ -28,14 +29,13 @@ public class TextViewTransformState extends TransformState {
 
     private static Pools.SimplePool<TextViewTransformState> sInstancePool
             = new Pools.SimplePool<>(40);
-    private CharSequence mText;
+    private TextView mText;
 
     @Override
     public void initFrom(View view) {
         super.initFrom(view);
         if (view instanceof TextView) {
-            TextView txt = (TextView) view;
-            mText = txt.getText();
+            mText = (TextView) view;
         }
     }
 
@@ -43,11 +43,27 @@ public class TextViewTransformState extends TransformState {
     protected boolean sameAs(TransformState otherState) {
         if (otherState instanceof TextViewTransformState) {
             TextViewTransformState otherTvs = (TextViewTransformState) otherState;
-            return TextUtils.equals(otherTvs.mText, mText);
+            if(TextUtils.equals(otherTvs.mText.getText(), mText.getText())) {
+                int ownEllipsized = getEllipsisCount();
+                int otherEllipsized = otherTvs.getEllipsisCount();
+                return ownEllipsized == otherEllipsized;
+            }
         }
         return super.sameAs(otherState);
     }
 
+    private int getEllipsisCount() {
+        Layout l = mText.getLayout();
+        if (l != null) {
+            int lines = l.getLineCount();
+            if (lines > 0) {
+                // we only care about the first line
+                return l.getEllipsisCount(0);
+            }
+        }
+        return 0;
+    }
+
     public static TextViewTransformState obtain() {
         TextViewTransformState instance = sInstancePool.acquire();
         if (instance != null) {