Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7954a8a authored by George Mount's avatar George Mount Committed by Android Git Automerger
Browse files

am 5a745332: Merge "Delay sending shared element position until after layout." into lmp-preview-dev

* commit '5a745332b3e5bac89052484e2ae4978a9a1e1bcd':
  Delay sending shared element position until after layout.
parents a5dd05f2 cdd5c8f3
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -129,8 +129,8 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
    protected static final String KEY_SCALE_TYPE = "shared_element:scaleType";
    protected static final String KEY_IMAGE_MATRIX = "shared_element:imageMatrix";

    // The background fade in/out duration. 150ms is pretty quick, but not abrupt.
    public static final int FADE_BACKGROUND_DURATION_MS = 150;
    // The background fade in/out duration. TODO: Enable tuning this.
    public static final int FADE_BACKGROUND_DURATION_MS = 300;

    protected static final ImageView.ScaleType[] SCALE_TYPE_VALUES = ImageView.ScaleType.values();

@@ -195,6 +195,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
     */
    public static final int MSG_SHARED_ELEMENT_DESTINATION = 107;

    /**
     * Send the shared element positions.
     */
    public static final int MSG_SEND_SHARED_ELEMENT_DESTINATION = 108;

    final private Window mWindow;
    final protected ArrayList<String> mAllSharedElementNames;
    final protected ArrayList<View> mSharedElements = new ArrayList<View>();
+20 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.transition.TransitionManager;
import android.util.ArrayMap;
import android.util.Pair;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroupOverlay;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
@@ -72,8 +73,24 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
                }
            };
            mHandler.sendEmptyMessageDelayed(MSG_CANCEL, MAX_WAIT_MS);
            send(MSG_SEND_SHARED_ELEMENT_DESTINATION, null);
        }
    }

    private void sendSharedElementDestination() {
        ViewGroup decor = getDecor();
        if (!decor.isLayoutRequested()) {
            Bundle state = captureSharedElementState();
            mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state);
        } else {
            getDecor().getViewTreeObserver()
                    .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                        @Override
                        public boolean onPreDraw() {
                            getDecor().getViewTreeObserver().removeOnPreDrawListener(this);
                            return true;
                        }
                    });
        }
    }

@@ -105,6 +122,9 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
            case MSG_CANCEL:
                cancel();
                break;
            case MSG_SEND_SHARED_ELEMENT_DESTINATION:
                sendSharedElementDestination();
                break;
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -294,7 +294,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
    }

    private void finishIfNecessary() {
        if (mIsReturning && mExitNotified && (mSharedElements.isEmpty()
        if (mIsReturning && mExitNotified && mActivity != null && (mSharedElements.isEmpty()
                || mSharedElements.get(0).getVisibility() == View.INVISIBLE)) {
            mActivity.finish();
            mActivity.overridePendingTransition(0, 0);