am 6629a210: am f43c2592: am da6df616: Merge "Fix NPE when Window disappears during a transition." into lmp-dev
* commit '6629a21012a09b30ba50446aa9fdf901d803afd9': Fix NPE when Window disappears during a transition.
This commit is contained in:
@@ -467,11 +467,12 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
|
||||
}
|
||||
|
||||
protected void scheduleSetSharedElementEnd(final ArrayList<View> snapshots) {
|
||||
getDecor().getViewTreeObserver().addOnPreDrawListener(
|
||||
final View decorView = getDecor();
|
||||
decorView.getViewTreeObserver().addOnPreDrawListener(
|
||||
new ViewTreeObserver.OnPreDrawListener() {
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
getDecor().getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
decorView.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
notifySharedElementEnd(snapshots);
|
||||
return true;
|
||||
}
|
||||
@@ -664,8 +665,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
|
||||
GhostView.addGhost(view, decor);
|
||||
ViewGroup parent = (ViewGroup) view.getParent();
|
||||
if (moveWithParent && !isInTransitionGroup(parent, decor)) {
|
||||
GhostViewListeners listener =
|
||||
new GhostViewListeners(view, decor);
|
||||
GhostViewListeners listener = new GhostViewListeners(view, parent, decor);
|
||||
parent.getViewTreeObserver().addOnPreDrawListener(listener);
|
||||
mGhostViewListeners.add(listener);
|
||||
}
|
||||
@@ -723,11 +723,12 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
|
||||
}
|
||||
|
||||
protected void scheduleGhostVisibilityChange(final int visibility) {
|
||||
getDecor().getViewTreeObserver()
|
||||
final View decorView = getDecor();
|
||||
decorView.getViewTreeObserver()
|
||||
.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
getDecor().getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
decorView.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
setGhostVisibility(visibility);
|
||||
return true;
|
||||
}
|
||||
@@ -769,10 +770,12 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
|
||||
private static class GhostViewListeners implements ViewTreeObserver.OnPreDrawListener {
|
||||
private View mView;
|
||||
private ViewGroup mDecor;
|
||||
private View mParent;
|
||||
private Matrix mMatrix = new Matrix();
|
||||
|
||||
public GhostViewListeners(View view, ViewGroup decor) {
|
||||
public GhostViewListeners(View view, View parent, ViewGroup decor) {
|
||||
mView = view;
|
||||
mParent = parent;
|
||||
mDecor = decor;
|
||||
}
|
||||
|
||||
@@ -782,10 +785,9 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
|
||||
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
ViewGroup parent = ((ViewGroup) mView.getParent());
|
||||
GhostView ghostView = GhostView.getGhost(mView);
|
||||
if (ghostView == null) {
|
||||
parent.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
mParent.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
} else {
|
||||
GhostView.calculateMatrix(mView, mDecor, mMatrix);
|
||||
ghostView.setMatrix(mMatrix);
|
||||
|
||||
@@ -69,12 +69,13 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
|
||||
Bundle resultReceiverBundle = new Bundle();
|
||||
resultReceiverBundle.putParcelable(KEY_REMOTE_RECEIVER, this);
|
||||
mResultReceiver.send(MSG_SET_REMOTE_RECEIVER, resultReceiverBundle);
|
||||
getDecor().getViewTreeObserver().addOnPreDrawListener(
|
||||
final View decorView = getDecor();
|
||||
decorView.getViewTreeObserver().addOnPreDrawListener(
|
||||
new ViewTreeObserver.OnPreDrawListener() {
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
if (mIsReadyForTransition) {
|
||||
getDecor().getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
decorView.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
}
|
||||
return mIsReadyForTransition;
|
||||
}
|
||||
@@ -187,11 +188,12 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
|
||||
moveSharedElementsToOverlay();
|
||||
mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state);
|
||||
} else {
|
||||
getDecor().getViewTreeObserver()
|
||||
final View decorView = getDecor();
|
||||
decorView.getViewTreeObserver()
|
||||
.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
getDecor().getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
decorView.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
if (mResultReceiver != null) {
|
||||
Bundle state = captureSharedElementState();
|
||||
setSharedElementMatrices();
|
||||
@@ -342,11 +344,12 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
|
||||
}
|
||||
final Bundle sharedElementState = mSharedElementsBundle;
|
||||
mSharedElementsBundle = null;
|
||||
getDecor().getViewTreeObserver()
|
||||
final View decorView = getDecor();
|
||||
decorView.getViewTreeObserver()
|
||||
.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
getDecor().getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
decorView.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
startTransition(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -356,7 +359,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
getDecor().invalidate();
|
||||
decorView.invalidate();
|
||||
}
|
||||
|
||||
private void requestLayoutForSharedElements() {
|
||||
|
||||
@@ -165,11 +165,12 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
|
||||
});
|
||||
final ArrayList<View> sharedElementSnapshots = createSnapshots(mExitSharedElementBundle,
|
||||
mSharedElementNames);
|
||||
getDecor().getViewTreeObserver()
|
||||
final View decorView = getDecor();
|
||||
decorView.getViewTreeObserver()
|
||||
.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
getDecor().getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
decorView.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
setSharedElementState(mExitSharedElementBundle, sharedElementSnapshots);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user