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

Commit a5c03863 authored by Miranda Kephart's avatar Miranda Kephart Committed by Automerger Merge Worker
Browse files

Merge "Turn off screenshot transition into long screenshots for rotations"...

Merge "Turn off screenshot transition into long screenshots for rotations" into sc-dev am: aa1b081a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15142005

Change-Id: If454b91e55f66d5477633e2c96317a4625017fcd
parents 670dc40d aa1b081a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -127,6 +127,7 @@
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="matrix"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="@id/global_screenshot_preview"
        app:layout_constraintTop_toTopOf="@id/global_screenshot_preview"
        android:elevation="@dimen/screenshot_preview_elevation"/>
+7 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.screenshot;

import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.WindowManager.LayoutParams.TYPE_SCREENSHOT;
@@ -259,6 +260,7 @@ public class ScreenshotController {
    private ScreenshotView mScreenshotView;
    private Bitmap mScreenBitmap;
    private SaveImageInBackgroundTask mSaveInBgTask;
    private boolean mScreenshotTakenInPortrait;

    private Animator mScreenshotAnimation;
    private RequestCallback mCurrentRequestCallback;
@@ -488,6 +490,9 @@ public class ScreenshotController {
     * Takes a screenshot of the current display and shows an animation.
     */
    private void takeScreenshotInternal(Consumer<Uri> finisher, Rect crop) {
        mScreenshotTakenInPortrait =
                mContext.getResources().getConfiguration().orientation == ORIENTATION_PORTRAIT;

        // copy the input Rect, since SurfaceControl.screenshot can mutate it
        Rect screenRect = new Rect(crop);
        Bitmap screenshot = captureScreenshot(crop);
@@ -661,7 +666,8 @@ public class ScreenshotController {
                Bitmap newScreenshot = captureScreenshot(
                        new Rect(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels));

                mScreenshotView.prepareScrollingTransition(response, mScreenBitmap, newScreenshot);
                mScreenshotView.prepareScrollingTransition(response, mScreenBitmap, newScreenshot,
                        mScreenshotTakenInPortrait);
                // delay starting scroll capture to make sure the scrim is up before the app moves
                mScreenshotView.post(() -> {
                    // Clear the reference to prevent close() in dismissScreenshot
+85 −53
Original line number Diff line number Diff line
@@ -162,6 +162,7 @@ public class ScreenshotView extends FrameLayout implements
    private GestureDetector mSwipeDetector;
    private SwipeDismissHandler mSwipeDismissHandler;
    private InputMonitorCompat mInputMonitor;
    private boolean mShowScrollablePreview;

    private final ArrayList<ScreenshotActionChip> mSmartChips = new ArrayList<>();
    private PendingInteraction mPendingInteraction;
@@ -772,8 +773,14 @@ public class ScreenshotView extends FrameLayout implements

    void startLongScreenshotTransition(Rect destination, Runnable onTransitionEnd,
            ScrollCaptureController.LongScreenshot longScreenshot) {
        AnimatorSet animSet = new AnimatorSet();

        ValueAnimator scrimAnim = ValueAnimator.ofFloat(0, 1);
        scrimAnim.addUpdateListener(animation ->
                mScrollingScrim.setAlpha(1 - animation.getAnimatedFraction()));

        if (mShowScrollablePreview) {
            mScrollablePreview.setImageBitmap(longScreenshot.toBitmap());
        ValueAnimator anim = ValueAnimator.ofFloat(0, 1);
            float startX = mScrollablePreview.getX();
            float startY = mScrollablePreview.getY();
            int[] locInScreen = mScrollablePreview.getLocationOnScreen();
@@ -785,40 +792,63 @@ public class ScreenshotView extends FrameLayout implements
            Matrix matrix = new Matrix();
            matrix.setScale(currentScale, currentScale);
            matrix.postTranslate(
                longScreenshot.getLeft() * currentScale, longScreenshot.getTop() * currentScale);
                    longScreenshot.getLeft() * currentScale,
                    longScreenshot.getTop() * currentScale);
            mScrollablePreview.setImageMatrix(matrix);
            float destinationScale = destination.width() / (float) mScrollablePreview.getWidth();
        anim.addUpdateListener(animation -> {

            ValueAnimator previewAnim = ValueAnimator.ofFloat(0, 1);
            previewAnim.addUpdateListener(animation -> {
                float t = animation.getAnimatedFraction();
            mScrollingScrim.setAlpha(1 - t);
                float currScale = MathUtils.lerp(1, destinationScale, t);
                mScrollablePreview.setScaleX(currScale);
                mScrollablePreview.setScaleY(currScale);
                mScrollablePreview.setX(MathUtils.lerp(startX, destination.left, t));
                mScrollablePreview.setY(MathUtils.lerp(startY, destination.top, t));
            });
        anim.addListener(new AnimatorListenerAdapter() {
            ValueAnimator previewFadeAnim = ValueAnimator.ofFloat(1, 0);
            previewFadeAnim.addUpdateListener(animation ->
                    mScrollablePreview.setAlpha(1 - animation.getAnimatedFraction()));
            animSet.play(previewAnim).with(scrimAnim).before(previewFadeAnim);
            previewAnim.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                    onTransitionEnd.run();
                mScrollablePreview.animate().alpha(0).setListener(new AnimatorListenerAdapter() {
                }
            });
        } else {
            // if we switched orientations between the original screenshot and the long screenshot
            // capture, just fade out the scrim instead of running the preview animation
            animSet.play(scrimAnim);
            animSet.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                        mCallbacks.onDismiss();
                    onTransitionEnd.run();
                }
            });
        }
        animSet.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                        mCallbacks.onDismiss();
                    }
        });
        anim.start();
        animSet.start();
    }

    void prepareScrollingTransition(ScrollCaptureResponse response, Bitmap screenBitmap,
            Bitmap newBitmap) {
            Bitmap newBitmap, boolean screenshotTakenInPortrait) {
        mShowScrollablePreview = (screenshotTakenInPortrait == mOrientationPortrait);

        mScrollingScrim.setImageBitmap(newBitmap);
        mScrollingScrim.setVisibility(View.VISIBLE);

        if (mShowScrollablePreview) {
            Rect scrollableArea = scrollableAreaOnScreen(response);

            float scale = mCornerSizeX
                    / (mOrientationPortrait ? screenBitmap.getWidth() : screenBitmap.getHeight());
            ConstraintLayout.LayoutParams params =
@@ -833,9 +863,9 @@ public class ScreenshotView extends FrameLayout implements
            mScrollablePreview.setTranslationX(scale * scrollableArea.left);
            mScrollablePreview.setTranslationY(scale * scrollableArea.top);
            mScrollablePreview.setImageMatrix(matrix);

            mScrollablePreview.setImageBitmap(screenBitmap);
            mScrollablePreview.setVisibility(View.VISIBLE);
        }
        mDismissButton.setVisibility(View.GONE);
        mActionsContainer.setVisibility(View.GONE);
        mBackgroundProtection.setVisibility(View.GONE);
@@ -919,6 +949,8 @@ public class ScreenshotView extends FrameLayout implements
        mActionsContainer.setVisibility(View.GONE);
        mBackgroundProtection.setAlpha(0f);
        mDismissButton.setVisibility(View.GONE);
        mScrollingScrim.setVisibility(View.GONE);
        mScrollablePreview.setVisibility(View.GONE);
        mScreenshotStatic.setTranslationX(0);
        mScreenshotPreview.setTranslationY(0);
        mScreenshotPreview.setContentDescription(