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

Commit d265bd74 authored by George Mount's avatar George Mount
Browse files

Delay sending shared element position until after layout.

Bug 15380396

Also updated fade duration to 300ms now that shared element
transition can take place before fade.

Change-Id: I9053615c83b9e0938b015645de0eb6c1534cbb34
parent 3da92d6d
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);