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

Commit 4e79e8c4 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: Idfc30f529e828434f8f5e020e728a218caf6643a
parents 79450d42 aa1b081a
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -127,6 +127,7 @@
        android:layout_width="wrap_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="matrix"
        android:scaleType="matrix"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="@id/global_screenshot_preview"
        app:layout_constraintStart_toStartOf="@id/global_screenshot_preview"
        app:layout_constraintTop_toTopOf="@id/global_screenshot_preview"
        app:layout_constraintTop_toTopOf="@id/global_screenshot_preview"
        android:elevation="@dimen/screenshot_preview_elevation"/>
        android:elevation="@dimen/screenshot_preview_elevation"/>
+7 −1
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


package com.android.systemui.screenshot;
package com.android.systemui.screenshot;


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


    private Animator mScreenshotAnimation;
    private Animator mScreenshotAnimation;
    private RequestCallback mCurrentRequestCallback;
    private RequestCallback mCurrentRequestCallback;
@@ -488,6 +490,9 @@ public class ScreenshotController {
     * Takes a screenshot of the current display and shows an animation.
     * Takes a screenshot of the current display and shows an animation.
     */
     */
    private void takeScreenshotInternal(Consumer<Uri> finisher, Rect crop) {
    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
        // copy the input Rect, since SurfaceControl.screenshot can mutate it
        Rect screenRect = new Rect(crop);
        Rect screenRect = new Rect(crop);
        Bitmap screenshot = captureScreenshot(crop);
        Bitmap screenshot = captureScreenshot(crop);
@@ -661,7 +666,8 @@ public class ScreenshotController {
                Bitmap newScreenshot = captureScreenshot(
                Bitmap newScreenshot = captureScreenshot(
                        new Rect(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels));
                        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
                // delay starting scroll capture to make sure the scrim is up before the app moves
                mScreenshotView.post(() -> {
                mScreenshotView.post(() -> {
                    // Clear the reference to prevent close() in dismissScreenshot
                    // Clear the reference to prevent close() in dismissScreenshot
+85 −53
Original line number Original line Diff line number Diff line
@@ -162,6 +162,7 @@ public class ScreenshotView extends FrameLayout implements
    private GestureDetector mSwipeDetector;
    private GestureDetector mSwipeDetector;
    private SwipeDismissHandler mSwipeDismissHandler;
    private SwipeDismissHandler mSwipeDismissHandler;
    private InputMonitorCompat mInputMonitor;
    private InputMonitorCompat mInputMonitor;
    private boolean mShowScrollablePreview;


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


    void startLongScreenshotTransition(Rect destination, Runnable onTransitionEnd,
    void startLongScreenshotTransition(Rect destination, Runnable onTransitionEnd,
            ScrollCaptureController.LongScreenshot longScreenshot) {
            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());
            mScrollablePreview.setImageBitmap(longScreenshot.toBitmap());
        ValueAnimator anim = ValueAnimator.ofFloat(0, 1);
            float startX = mScrollablePreview.getX();
            float startX = mScrollablePreview.getX();
            float startY = mScrollablePreview.getY();
            float startY = mScrollablePreview.getY();
            int[] locInScreen = mScrollablePreview.getLocationOnScreen();
            int[] locInScreen = mScrollablePreview.getLocationOnScreen();
@@ -785,40 +792,63 @@ public class ScreenshotView extends FrameLayout implements
            Matrix matrix = new Matrix();
            Matrix matrix = new Matrix();
            matrix.setScale(currentScale, currentScale);
            matrix.setScale(currentScale, currentScale);
            matrix.postTranslate(
            matrix.postTranslate(
                longScreenshot.getLeft() * currentScale, longScreenshot.getTop() * currentScale);
                    longScreenshot.getLeft() * currentScale,
                    longScreenshot.getTop() * currentScale);
            mScrollablePreview.setImageMatrix(matrix);
            mScrollablePreview.setImageMatrix(matrix);
            float destinationScale = destination.width() / (float) mScrollablePreview.getWidth();
            float destinationScale = destination.width() / (float) mScrollablePreview.getWidth();
        anim.addUpdateListener(animation -> {

            ValueAnimator previewAnim = ValueAnimator.ofFloat(0, 1);
            previewAnim.addUpdateListener(animation -> {
                float t = animation.getAnimatedFraction();
                float t = animation.getAnimatedFraction();
            mScrollingScrim.setAlpha(1 - t);
                float currScale = MathUtils.lerp(1, destinationScale, t);
                float currScale = MathUtils.lerp(1, destinationScale, t);
                mScrollablePreview.setScaleX(currScale);
                mScrollablePreview.setScaleX(currScale);
                mScrollablePreview.setScaleY(currScale);
                mScrollablePreview.setScaleY(currScale);
                mScrollablePreview.setX(MathUtils.lerp(startX, destination.left, t));
                mScrollablePreview.setX(MathUtils.lerp(startX, destination.left, t));
                mScrollablePreview.setY(MathUtils.lerp(startY, destination.top, 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
                @Override
                public void onAnimationEnd(Animator animation) {
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                    super.onAnimationEnd(animation);
                    onTransitionEnd.run();
                    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
                @Override
                public void onAnimationEnd(Animator animation) {
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(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,
    void prepareScrollingTransition(ScrollCaptureResponse response, Bitmap screenBitmap,
            Bitmap newBitmap) {
            Bitmap newBitmap, boolean screenshotTakenInPortrait) {
        mShowScrollablePreview = (screenshotTakenInPortrait == mOrientationPortrait);

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

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

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

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