Removing unnecessary object creation and double loop during
getDescendantCoordRelativeToAncestor

Change-Id: I034db2282a8aaf129336a425338c6a80d6a3a073
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index 3511375..6bfce19 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -341,35 +341,27 @@
      */
     public static float getDescendantCoordRelativeToAncestor(
             View descendant, View ancestor, int[] coord, boolean includeRootScroll) {
-        ArrayList<View> ancestorChain = new ArrayList<View>();
-
         float[] pt = {coord[0], coord[1]};
-
+        float scale = 1.0f;
         View v = descendant;
         while(v != ancestor && v != null) {
-            ancestorChain.add(v);
+            // For TextViews, scroll has a meaning which relates to the text position
+            // which is very strange... ignore the scroll.
+            if (v != descendant || includeRootScroll) {
+                pt[0] -= v.getScrollX();
+                pt[1] -= v.getScrollY();
+            }
+
+            v.getMatrix().mapPoints(pt);
+            pt[0] += v.getLeft();
+            pt[1] += v.getTop();
+            scale *= v.getScaleX();
+
             v = (View) v.getParent();
         }
 
-        float scale = 1.0f;
-        int count = ancestorChain.size();
-        for (int i = 0; i < count; i++) {
-            View v0 = ancestorChain.get(i);
-            // For TextViews, scroll has a meaning which relates to the text position
-            // which is very strange... ignore the scroll.
-            if (v0 != descendant || includeRootScroll) {
-                pt[0] -= v0.getScrollX();
-                pt[1] -= v0.getScrollY();
-            }
-
-            v0.getMatrix().mapPoints(pt);
-            pt[0] += v0.getLeft();
-            pt[1] += v0.getTop();
-            scale *= v0.getScaleX();
-        }
-
-        coord[0] = (int) Math.round(pt[0]);
-        coord[1] = (int) Math.round(pt[1]);
+        coord[0] = Math.round(pt[0]);
+        coord[1] = Math.round(pt[1]);
         return scale;
     }