summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2015-02-26 17:41:23 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-02-26 17:41:24 +0000
commitccf3edb3ab9479bef246391cb811bf3f5bdbef97 (patch)
tree3ef00c70acaa6b6ee90f2a76c17fe6c70df315cf
parentabc03c7ae8c9c628de319819a10ce2cbaedf1c86 (diff)
parent42161c5cb4f5f36cf83c8af3f20db70a70850a88 (diff)
downloadframeworks_base-ccf3edb3ab9479bef246391cb811bf3f5bdbef97.zip
frameworks_base-ccf3edb3ab9479bef246391cb811bf3f5bdbef97.tar.gz
frameworks_base-ccf3edb3ab9479bef246391cb811bf3f5bdbef97.tar.bz2
Merge "Fix target location on nested shared elements."
-rw-r--r--core/java/android/app/ActivityTransitionCoordinator.java48
1 files changed, 16 insertions, 32 deletions
diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java
index e3b27b5..2939322 100644
--- a/core/java/android/app/ActivityTransitionCoordinator.java
+++ b/core/java/android/app/ActivityTransitionCoordinator.java
@@ -206,7 +206,6 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
private ArrayList<GhostViewListeners> mGhostViewListeners =
new ArrayList<GhostViewListeners>();
private ArrayMap<View, Float> mOriginalAlphas = new ArrayMap<View, Float>();
- final private ArrayList<View> mRootSharedElements = new ArrayList<View>();
private ArrayList<Matrix> mSharedElementParentMatrices;
public ActivityTransitionCoordinator(Window window,
@@ -253,17 +252,10 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
final String name = sharedElements.keyAt(i);
if (isFirstRun && (view == null || !view.isAttachedToWindow() || name == null)) {
sharedElements.removeAt(i);
- } else {
- if (!isNested(view, sharedElements)) {
- mSharedElementNames.add(name);
- mSharedElements.add(view);
- sharedElements.removeAt(i);
- if (isFirstRun) {
- // We need to keep track which shared elements are roots
- // and which are nested.
- mRootSharedElements.add(view);
- }
- }
+ } else if (!isNested(view, sharedElements)) {
+ mSharedElementNames.add(name);
+ mSharedElements.add(view);
+ sharedElements.removeAt(i);
}
}
isFirstRun = false;
@@ -520,24 +512,9 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
}
private void getSharedElementParentMatrix(View view, Matrix matrix) {
- final boolean isNestedInOtherSharedElement = !mRootSharedElements.contains(view);
- final boolean useParentMatrix;
- if (isNestedInOtherSharedElement) {
- useParentMatrix = true;
- } else {
- final int index = mSharedElementParentMatrices == null ? -1
- : mSharedElements.indexOf(view);
- if (index < 0) {
- useParentMatrix = true;
- } else {
- // The indices of mSharedElementParentMatrices matches the
- // mSharedElement matrices.
- Matrix parentMatrix = mSharedElementParentMatrices.get(index);
- matrix.set(parentMatrix);
- useParentMatrix = false;
- }
- }
- if (useParentMatrix) {
+ final int index = mSharedElementParentMatrices == null ? -1
+ : mSharedElements.indexOf(view);
+ if (index < 0) {
matrix.reset();
ViewParent viewParent = view.getParent();
if (viewParent instanceof ViewGroup) {
@@ -545,6 +522,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
ViewGroup parent = (ViewGroup) viewParent;
parent.transformMatrixToLocal(matrix);
}
+ } else {
+ // The indices of mSharedElementParentMatrices matches the
+ // mSharedElement matrices.
+ Matrix parentMatrix = mSharedElementParentMatrices.get(index);
+ matrix.set(parentMatrix);
}
}
@@ -701,7 +683,6 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
mResultReceiver = null;
mPendingTransition = null;
mListener = null;
- mRootSharedElements.clear();
mSharedElementParentMatrices = null;
}
@@ -817,9 +798,12 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
ViewGroup decor = getDecor();
if (decor != null) {
boolean moveWithParent = moveSharedElementWithParent();
+ Matrix tempMatrix = new Matrix();
for (int i = 0; i < numSharedElements; i++) {
View view = mSharedElements.get(i);
- GhostView.addGhost(view, decor);
+ tempMatrix.reset();
+ mSharedElementParentMatrices.get(i).invert(tempMatrix);
+ GhostView.addGhost(view, decor, tempMatrix);
ViewGroup parent = (ViewGroup) view.getParent();
if (moveWithParent && !isInTransitionGroup(parent, decor)) {
GhostViewListeners listener = new GhostViewListeners(view, parent, decor);