From eb3ab0b594cbddc97ef67253e228188d8de273c1 Mon Sep 17 00:00:00 2001 From: Mark Renouf Date: Tue, 11 Jul 2023 10:26:39 -0400 Subject: Adds diagnostic logging for LongScreenshotActivity This adds logging of dimensions and positions of crop handles after a long screenshot capture. Switches to OneShotPreDrawListener where appropriate to improve readability. Bug: 232633995 Test: logging only change; manually, take long screenshot crop, save, observe result, verify results match Change-Id: I699f8d69b78e89a7a5364fda84bc4d6316b77d31 --- .../com/android/systemui/screenshot/CropView.java | 41 ++++++++++++-------- .../screenshot/LongScreenshotActivity.java | 45 ++++++++++------------ .../screenshot/ScrollCaptureController.java | 10 ++++- 3 files changed, 55 insertions(+), 41 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/CropView.java b/packages/SystemUI/src/com/android/systemui/screenshot/CropView.java index a9cecaaf1f76..6f2256eb6b31 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/CropView.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/CropView.java @@ -117,18 +117,22 @@ public class CropView extends View { @Override protected Parcelable onSaveInstanceState() { + Log.d(TAG, "onSaveInstanceState"); Parcelable superState = super.onSaveInstanceState(); SavedState ss = new SavedState(superState); ss.mCrop = mCrop; + Log.d(TAG, "saving mCrop=" + mCrop); + return ss; } @Override protected void onRestoreInstanceState(Parcelable state) { + Log.d(TAG, "onRestoreInstanceState"); SavedState ss = (SavedState) state; super.onRestoreInstanceState(ss.getSuperState()); - + Log.d(TAG, "restoring mCrop=" + ss.mCrop + " (was " + mCrop + ")"); mCrop = ss.mCrop; } @@ -242,6 +246,7 @@ public class CropView extends View { * Set the given boundary to the given value without animation. */ public void setBoundaryPosition(CropBoundary boundary, float position) { + Log.i(TAG, "setBoundaryPosition: " + boundary + ", position=" + position); position = (float) getAllowedValues(boundary).clamp(position); switch (boundary) { case TOP: @@ -260,6 +265,7 @@ public class CropView extends View { Log.w(TAG, "No boundary selected"); break; } + Log.i(TAG, "Updated mCrop: " + mCrop); invalidate(); } @@ -350,26 +356,31 @@ public class CropView extends View { mCropInteractionListener = listener; } - private Range getAllowedValues(CropBoundary boundary) { + private Range getAllowedValues(CropBoundary boundary) { + float upper = 0f; + float lower = 1f; switch (boundary) { case TOP: - return new Range<>(0f, - mCrop.bottom - pixelDistanceToFraction(mCropTouchMargin, - CropBoundary.BOTTOM)); + lower = 0f; + upper = mCrop.bottom - pixelDistanceToFraction(mCropTouchMargin, + CropBoundary.BOTTOM); + break; case BOTTOM: - return new Range<>( - mCrop.top + pixelDistanceToFraction(mCropTouchMargin, - CropBoundary.TOP), 1f); + lower = mCrop.top + pixelDistanceToFraction(mCropTouchMargin, CropBoundary.TOP); + upper = 1; + break; case LEFT: - return new Range<>(0f, - mCrop.right - pixelDistanceToFraction(mCropTouchMargin, - CropBoundary.RIGHT)); + lower = 0f; + upper = mCrop.right - pixelDistanceToFraction(mCropTouchMargin, CropBoundary.RIGHT); + break; case RIGHT: - return new Range<>( - mCrop.left + pixelDistanceToFraction(mCropTouchMargin, - CropBoundary.LEFT), 1f); + lower = mCrop.left + pixelDistanceToFraction(mCropTouchMargin, CropBoundary.LEFT); + upper = 1; + break; } - return null; + Log.i(TAG, "getAllowedValues: " + boundary + ", " + + "result=[lower=" + lower + ", upper=" + upper + "]"); + return new Range<>(lower, upper); } /** diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java index 4bc7ec844794..e6e1faccc3e2 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java @@ -36,17 +36,18 @@ import android.text.TextUtils; import android.util.Log; import android.view.ScrollCaptureResponse; import android.view.View; -import android.view.ViewTreeObserver; import android.widget.ImageView; import androidx.constraintlayout.widget.ConstraintLayout; import com.android.internal.app.ChooserActivity; import com.android.internal.logging.UiEventLogger; +import com.android.internal.view.OneShotPreDrawListener; import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.screenshot.CropView.CropBoundary; import com.android.systemui.screenshot.ScrollCaptureController.LongScreenshot; import com.android.systemui.settings.UserTracker; @@ -215,6 +216,7 @@ public class LongScreenshotActivity extends Activity { mPreview.setImageDrawable(drawable); mMagnifierView.setDrawable(mLongScreenshot.getDrawable(), mLongScreenshot.getWidth(), mLongScreenshot.getHeight()); + Log.i(TAG, "Completed: " + longScreenshot); // Original boundaries go from the image tile set's y=0 to y=pageSize, so // we animate to that as a starting crop position. float topFraction = Math.max(0, @@ -223,31 +225,26 @@ public class LongScreenshotActivity extends Activity { 1 - (mLongScreenshot.getBottom() - mLongScreenshot.getPageHeight()) / (float) mLongScreenshot.getHeight()); + Log.i(TAG, "topFraction: " + topFraction); + Log.i(TAG, "bottomFraction: " + bottomFraction); + mEnterTransitionView.setImageDrawable(drawable); - mEnterTransitionView.getViewTreeObserver().addOnPreDrawListener( - new ViewTreeObserver.OnPreDrawListener() { - @Override - public boolean onPreDraw() { - mEnterTransitionView.getViewTreeObserver().removeOnPreDrawListener(this); - updateImageDimensions(); - mEnterTransitionView.post(() -> { - Rect dest = new Rect(); - mEnterTransitionView.getBoundsOnScreen(dest); - mLongScreenshotHolder.takeTransitionDestinationCallback() - .setTransitionDestination(dest, () -> { - mPreview.animate().alpha(1f); - mCropView.setBoundaryPosition( - CropView.CropBoundary.TOP, topFraction); - mCropView.setBoundaryPosition( - CropView.CropBoundary.BOTTOM, bottomFraction); - mCropView.animateEntrance(); - mCropView.setVisibility(View.VISIBLE); - setButtonsEnabled(true); - }); + OneShotPreDrawListener.add(mEnterTransitionView, () -> { + updateImageDimensions(); + mEnterTransitionView.post(() -> { + Rect dest = new Rect(); + mEnterTransitionView.getBoundsOnScreen(dest); + mLongScreenshotHolder.takeTransitionDestinationCallback() + .setTransitionDestination(dest, () -> { + mPreview.animate().alpha(1f); + mCropView.setBoundaryPosition(CropBoundary.TOP, topFraction); + mCropView.setBoundaryPosition(CropBoundary.BOTTOM, bottomFraction); + mCropView.animateEntrance(); + mCropView.setVisibility(View.VISIBLE); + setButtonsEnabled(true); }); - return true; - } - }); + }); + }); // Immediately export to temp image file for saved state mCacheSaveFuture = mImageExporter.exportToRawFile(mBackgroundExecutor, diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java index 30a0b8f2d76f..bb34ede2cf5e 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java @@ -130,8 +130,14 @@ public class ScrollCaptureController { @Override public String toString() { - return "LongScreenshot{w=" + mImageTileSet.getWidth() - + ", h=" + mImageTileSet.getHeight() + "}"; + return "LongScreenshot{" + + "l=" + mImageTileSet.getLeft() + ", " + + "t=" + mImageTileSet.getTop() + ", " + + "r=" + mImageTileSet.getRight() + ", " + + "b=" + mImageTileSet.getBottom() + ", " + + "w=" + mImageTileSet.getWidth() + ", " + + "h=" + mImageTileSet.getHeight() + + "}"; } public Drawable getDrawable() { -- cgit v1.2.3-59-g8ed1b