Loading packages/SystemUI/src/com/android/systemui/screenshot/CropView.java +26 −15 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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: Loading @@ -260,6 +265,7 @@ public class CropView extends View { Log.w(TAG, "No boundary selected"); break; } Log.i(TAG, "Updated mCrop: " + mCrop); invalidate(); } Loading Loading @@ -350,26 +356,31 @@ public class CropView extends View { mCropInteractionListener = listener; } private Range getAllowedValues(CropBoundary boundary) { private Range<Float> 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); } /** Loading packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java +21 −24 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading @@ -223,12 +225,11 @@ 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); OneShotPreDrawListener.add(mEnterTransitionView, () -> { updateImageDimensions(); mEnterTransitionView.post(() -> { Rect dest = new Rect(); Loading @@ -236,17 +237,13 @@ public class LongScreenshotActivity extends Activity { mLongScreenshotHolder.takeTransitionDestinationCallback() .setTransitionDestination(dest, () -> { mPreview.animate().alpha(1f); mCropView.setBoundaryPosition( CropView.CropBoundary.TOP, topFraction); mCropView.setBoundaryPosition( CropView.CropBoundary.BOTTOM, bottomFraction); 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 Loading packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java +8 −2 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading
packages/SystemUI/src/com/android/systemui/screenshot/CropView.java +26 −15 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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: Loading @@ -260,6 +265,7 @@ public class CropView extends View { Log.w(TAG, "No boundary selected"); break; } Log.i(TAG, "Updated mCrop: " + mCrop); invalidate(); } Loading Loading @@ -350,26 +356,31 @@ public class CropView extends View { mCropInteractionListener = listener; } private Range getAllowedValues(CropBoundary boundary) { private Range<Float> 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); } /** Loading
packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java +21 −24 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading @@ -223,12 +225,11 @@ 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); OneShotPreDrawListener.add(mEnterTransitionView, () -> { updateImageDimensions(); mEnterTransitionView.post(() -> { Rect dest = new Rect(); Loading @@ -236,17 +237,13 @@ public class LongScreenshotActivity extends Activity { mLongScreenshotHolder.takeTransitionDestinationCallback() .setTransitionDestination(dest, () -> { mPreview.animate().alpha(1f); mCropView.setBoundaryPosition( CropView.CropBoundary.TOP, topFraction); mCropView.setBoundaryPosition( CropView.CropBoundary.BOTTOM, bottomFraction); 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 Loading
packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java +8 −2 Original line number Diff line number Diff line Loading @@ -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() { Loading