diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2016-11-07 18:09:39 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-11-07 18:09:39 +0000 |
commit | 47564ca3a1c8903e757cec57b269c5553b2b3c41 (patch) | |
tree | 0db66b812754c199a42b958aae6328d00ad68ac4 /src/com | |
parent | bf7d8121ea41df6b920b7df064cbc02091780dd4 (diff) | |
parent | 5e0e94f0b2ae79770dd07b66441fda6e063e64ea (diff) | |
download | android_packages_apps_Trebuchet-47564ca3a1c8903e757cec57b269c5553b2b3c41.tar.gz android_packages_apps_Trebuchet-47564ca3a1c8903e757cec57b269c5553b2b3c41.tar.bz2 android_packages_apps_Trebuchet-47564ca3a1c8903e757cec57b269c5553b2b3c41.zip |
Merge "Simplifying mapCoordInSelfToDescendant" into ub-launcher3-master
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/launcher3/Utilities.java | 66 | ||||
-rw-r--r-- | src/com/android/launcher3/allapps/AllAppsContainerView.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/dragndrop/DragLayer.java | 4 |
3 files changed, 29 insertions, 43 deletions
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 9ddc14fc9..568a52f85 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -59,7 +59,6 @@ import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.IOException; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.Collection; import java.util.Locale; import java.util.Set; @@ -82,6 +81,9 @@ public final class Utilities { private static final int[] sLoc0 = new int[2]; private static final int[] sLoc1 = new int[2]; + private static final float[] sPoint = new float[2]; + private static final Matrix sMatrix = new Matrix(); + private static final Matrix sInverseMatrix = new Matrix(); public static final boolean ATLEAST_NOUGAT_MR1 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1; @@ -160,68 +162,52 @@ public final class Utilities { */ public static float getDescendantCoordRelativeToAncestor( View descendant, View ancestor, int[] coord, boolean includeRootScroll) { - float[] pt = {coord[0], coord[1]}; + sPoint[0] = coord[0]; + sPoint[1] = coord[1]; + float scale = 1.0f; View v = descendant; while(v != ancestor && v != null) { // 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(); + sPoint[0] -= v.getScrollX(); + sPoint[1] -= v.getScrollY(); } - v.getMatrix().mapPoints(pt); - pt[0] += v.getLeft(); - pt[1] += v.getTop(); + v.getMatrix().mapPoints(sPoint); + sPoint[0] += v.getLeft(); + sPoint[1] += v.getTop(); scale *= v.getScaleX(); v = (View) v.getParent(); } - coord[0] = Math.round(pt[0]); - coord[1] = Math.round(pt[1]); + coord[0] = Math.round(sPoint[0]); + coord[1] = Math.round(sPoint[1]); return scale; } /** * Inverse of {@link #getDescendantCoordRelativeToAncestor(View, View, int[], boolean)}. */ - public static float mapCoordInSelfToDescendent(View descendant, View root, - int[] coord) { - ArrayList<View> ancestorChain = new ArrayList<View>(); - - float[] pt = {coord[0], coord[1]}; - + public static void mapCoordInSelfToDescendant(View descendant, View root, int[] coord) { + sMatrix.reset(); View v = descendant; while(v != root) { - ancestorChain.add(v); + sMatrix.postTranslate(-v.getScrollX(), -v.getScrollY()); + sMatrix.postConcat(v.getMatrix()); + sMatrix.postTranslate(v.getLeft(), v.getTop()); v = (View) v.getParent(); } - ancestorChain.add(root); - - float scale = 1.0f; - Matrix inverse = new Matrix(); - int count = ancestorChain.size(); - for (int i = count - 1; i >= 0; i--) { - View ancestor = ancestorChain.get(i); - View next = i > 0 ? ancestorChain.get(i-1) : null; - - pt[0] += ancestor.getScrollX(); - pt[1] += ancestor.getScrollY(); - - if (next != null) { - pt[0] -= next.getLeft(); - pt[1] -= next.getTop(); - next.getMatrix().invert(inverse); - inverse.mapPoints(pt); - scale *= next.getScaleX(); - } - } - - coord[0] = (int) Math.round(pt[0]); - coord[1] = (int) Math.round(pt[1]); - return scale; + sMatrix.postTranslate(-v.getScrollX(), -v.getScrollY()); + sMatrix.invert(sInverseMatrix); + + sPoint[0] = coord[0]; + sPoint[1] = coord[1]; + sInverseMatrix.mapPoints(sPoint); + coord[0] = Math.round(sPoint[0]); + coord[1] = Math.round(sPoint[1]); } /** diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index b5aed0da9..34d8a83c7 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -193,7 +193,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc int[] point = new int[2]; point[0] = (int) ev.getX(); point[1] = (int) ev.getY(); - Utilities.mapCoordInSelfToDescendent(mAppsRecyclerView, this, point); + Utilities.mapCoordInSelfToDescendant(mAppsRecyclerView, this, point); // IF the MotionEvent is inside the search box, and the container keeps on receiving // touch input, container should move down. diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java index 961877911..9de44526d 100644 --- a/src/com/android/launcher3/dragndrop/DragLayer.java +++ b/src/com/android/launcher3/dragndrop/DragLayer.java @@ -480,8 +480,8 @@ public class DragLayer extends InsettableFrameLayout { /** * Inverse of {@link #getDescendantCoordRelativeToSelf(View, int[])}. */ - public float mapCoordInSelfToDescendant(View descendant, int[] coord) { - return Utilities.mapCoordInSelfToDescendent(descendant, this, coord); + public void mapCoordInSelfToDescendant(View descendant, int[] coord) { + Utilities.mapCoordInSelfToDescendant(descendant, this, coord); } public void getViewRectRelativeToSelf(View v, Rect r) { |