From 455fa76194a15ac873df6e43857f99c5c080515e Mon Sep 17 00:00:00 2001 From: Miranda Kephart Date: Fri, 2 Jul 2021 10:55:07 -0400 Subject: [PATCH] Fix shared transition offsets in landscape Bug: 190757843 Test: manual Change-Id: I9c4d441ffbc455cf609936d96621322dd4a2d4ee --- .../SystemUI/res/layout/global_screenshot_static.xml | 9 +++++++++ .../systemui/screenshot/LongScreenshotActivity.java | 9 ++++++++- .../systemui/screenshot/ScreenshotController.java | 4 +++- .../android/systemui/screenshot/ScreenshotView.java | 12 ++++++++++-- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/res/layout/global_screenshot_static.xml b/packages/SystemUI/res/layout/global_screenshot_static.xml index ba46edced03c9..e06eafe2332a6 100644 --- a/packages/SystemUI/res/layout/global_screenshot_static.xml +++ b/packages/SystemUI/res/layout/global_screenshot_static.xml @@ -130,4 +130,13 @@ app:layout_constraintStart_toStartOf="@id/global_screenshot_preview" app:layout_constraintTop_toTopOf="@id/global_screenshot_preview" android:elevation="@dimen/screenshot_preview_elevation"/> + diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java index 07f6d36cbec19..42fc747720296 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java @@ -334,11 +334,18 @@ public class LongScreenshotActivity extends Activity { | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); mTransitionView.setImageBitmap(mOutputBitmap); - mTransitionView.setVisibility(View.VISIBLE); mTransitionView.setTransitionName( ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME); // TODO: listen for transition completing instead of finishing onStop mTransitionStarted = true; + int[] locationOnScreen = new int[2]; + mTransitionView.getLocationOnScreen(locationOnScreen); + int[] locationInWindow = new int[2]; + mTransitionView.getLocationInWindow(locationInWindow); + int deltaX = locationOnScreen[0] - locationInWindow[0]; + int deltaY = locationOnScreen[1] - locationInWindow[1]; + mTransitionView.setX(mTransitionView.getX() - deltaX); + mTransitionView.setY(mTransitionView.getY() - deltaY); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, mTransitionView, ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME).toBundle()); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java index 24cca91ea3f30..567228467a922 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java @@ -919,10 +919,12 @@ public class ScreenshotController { */ private Supplier getActionTransitionSupplier() { return () -> { + View preview = mScreenshotView.getTransitionView(); + preview.setX(preview.getX() - mScreenshotView.getStaticLeftMargin()); Pair transition = ActivityOptions.startSharedElementAnimation( mWindow, new ScreenshotExitTransitionCallbacksSupplier(true).get(), - null, Pair.create(mScreenshotView.getScreenshotPreview(), + null, Pair.create(mScreenshotView.getTransitionView(), ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME)); transition.second.startExit(); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java index 9fe8c84bc13d1..74e0c39566e24 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java @@ -137,11 +137,13 @@ public class ScreenshotView extends FrameLayout implements private int mNavMode; private boolean mOrientationPortrait; private boolean mDirectionLTR; + private int mStaticLeftMargin; private ScreenshotSelectorView mScreenshotSelectorView; private ImageView mScrollingScrim; private View mScreenshotStatic; private ImageView mScreenshotPreview; + private View mTransitionView; private View mScreenshotPreviewBorder; private ImageView mScrollablePreview; private ImageView mScreenshotFlash; @@ -336,6 +338,7 @@ public class ScreenshotView extends FrameLayout implements mScrollingScrim = requireNonNull(findViewById(R.id.screenshot_scrolling_scrim)); mScreenshotStatic = requireNonNull(findViewById(R.id.global_screenshot_static)); mScreenshotPreview = requireNonNull(findViewById(R.id.global_screenshot_preview)); + mTransitionView = requireNonNull(findViewById(R.id.screenshot_transition_view)); mScreenshotPreviewBorder = requireNonNull( findViewById(R.id.global_screenshot_preview_border)); mScreenshotPreview.setClipToOutline(true); @@ -381,8 +384,12 @@ public class ScreenshotView extends FrameLayout implements requestFocus(); } - View getScreenshotPreview() { - return mScreenshotPreview; + View getTransitionView() { + return mTransitionView; + } + + int getStaticLeftMargin() { + return mStaticLeftMargin; } /** @@ -423,6 +430,7 @@ public class ScreenshotView extends FrameLayout implements Math.max(cutout.getSafeInsetRight(), waterfall.right), waterfall.bottom); } } + mStaticLeftMargin = p.leftMargin; mScreenshotStatic.setLayoutParams(p); mScreenshotStatic.requestLayout(); }