Loading packages/SystemUI/res/layout/long_screenshot.xml +2 −2 Original line number Diff line number Diff line Loading @@ -126,8 +126,8 @@ android:layout_height="wrap_content" app:layout_constraintTop_toBottomOf="@id/save" app:layout_constraintStart_toStartOf="parent" android:scaleType="matrix" android:visibility="gone" android:scaleType="centerCrop" android:visibility="invisible" /> </androidx.constraintlayout.widget.ConstraintLayout> packages/SystemUI/res/values/styles.xml +1 −0 Original line number Diff line number Diff line Loading @@ -692,6 +692,7 @@ <item name="android:windowNoTitle">true</item> <item name="android:windowLightStatusBar">true</item> <item name="android:windowLightNavigationBar">true</item> <item name="android:windowActivityTransitions">true</item> </style> <!-- Privacy dialog --> Loading packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java +16 −31 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.content.ComponentName; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.HardwareRenderer; import android.graphics.Matrix; import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.RenderNode; Loading @@ -35,7 +34,6 @@ import android.text.TextUtils; import android.util.Log; import android.view.ScrollCaptureResponse; import android.view.View; import android.view.Window; import android.widget.ImageView; import androidx.constraintlayout.widget.ConstraintLayout; Loading Loading @@ -68,8 +66,6 @@ public class LongScreenshotActivity extends Activity { public static final String EXTRA_CAPTURE_RESPONSE = "capture-response"; private static final String KEY_SAVED_IMAGE_PATH = "saved-image-path"; private static final boolean USE_SHARED_ELEMENT = false; private final UiEventLogger mUiEventLogger; private final Executor mUiExecutor; private final Executor mBackgroundExecutor; Loading @@ -89,6 +85,7 @@ public class LongScreenshotActivity extends Activity { private ListenableFuture<File> mCacheSaveFuture; private ListenableFuture<ImageLoader.Result> mCacheLoadFuture; private Bitmap mOutputBitmap; private LongScreenshot mLongScreenshot; private boolean mTransitionStarted; Loading @@ -114,7 +111,7 @@ public class LongScreenshotActivity extends Activity { public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate(savedInstanceState = " + savedInstanceState + ")"); super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); setContentView(R.layout.long_screenshot); mPreview = requireViewById(R.id.preview); Loading Loading @@ -173,7 +170,6 @@ public class LongScreenshotActivity extends Activity { } }, mUiExecutor); mCacheLoadFuture = null; return; } else { LongScreenshot longScreenshot = mLongScreenshotHolder.takeLongScreenshot(); if (longScreenshot != null) { Loading @@ -189,7 +185,6 @@ public class LongScreenshotActivity extends Activity { Log.d(TAG, "onLongScreenshotReceived(longScreenshot=" + longScreenshot + ")"); mLongScreenshot = longScreenshot; mPreview.setImageDrawable(mLongScreenshot.getDrawable()); mTransitionView.setImageDrawable(mLongScreenshot.getDrawable()); updateImageDimensions(); mCropView.setVisibility(View.VISIBLE); mMagnifierView.setDrawable(mLongScreenshot.getDrawable(), Loading Loading @@ -310,19 +305,15 @@ public class LongScreenshotActivity extends Activity { intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); if (USE_SHARED_ELEMENT) { updateImageDimensions(); 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; startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, mTransitionView, ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME).toBundle()); } else { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivityAsUser(intent, UserHandle.CURRENT); finishAndRemoveTask(); } } private void doShare(Uri uri) { Loading Loading @@ -368,9 +359,11 @@ public class LongScreenshotActivity extends Activity { return; } Bitmap output = renderBitmap(mPreview.getDrawable(), bounds); updateImageDimensions(); mOutputBitmap = renderBitmap(drawable, bounds); ListenableFuture<ImageExporter.Result> exportFuture = mImageExporter.export( mBackgroundExecutor, UUID.randomUUID(), output, ZonedDateTime.now()); mBackgroundExecutor, UUID.randomUUID(), mOutputBitmap, ZonedDateTime.now()); exportFuture.addListener(() -> onExportCompleted(action, exportFuture), mUiExecutor); } Loading Loading @@ -419,7 +412,6 @@ public class LongScreenshotActivity extends Activity { // The image width and height on screen int imageHeight = previewHeight; int imageWidth = previewWidth; float scale; if (imageRatio > viewRatio) { // Image is full width and height is constrained, compute extra padding to inform // CropView Loading @@ -428,13 +420,11 @@ public class LongScreenshotActivity extends Activity { mCropView.setExtraPadding(extraPadding + mPreview.getPaddingTop(), extraPadding + mPreview.getPaddingBottom()); imageTop += (previewHeight - imageHeight) / 2; scale = imageHeight / bounds.height(); mCropView.setExtraPadding(extraPadding, extraPadding); mCropView.setImageWidth(previewWidth); } else { imageWidth = (int) (previewWidth * imageRatio / viewRatio); imageLeft += (previewWidth - imageWidth) / 2; scale = imageWidth / (float) bounds.width(); // Image is full height mCropView.setExtraPadding(mPreview.getPaddingTop(), mPreview.getPaddingBottom()); mCropView.setImageWidth((int) (previewHeight * imageRatio)); Loading @@ -449,10 +439,5 @@ public class LongScreenshotActivity extends Activity { params.width = boundaries.width(); params.height = boundaries.height(); mTransitionView.setLayoutParams(params); Matrix matrix = new Matrix(); matrix.postScale(scale, scale, 0, 0); matrix.postTranslate(-boundaries.left, -boundaries.top); mTransitionView.setImageMatrix(matrix); } } Loading
packages/SystemUI/res/layout/long_screenshot.xml +2 −2 Original line number Diff line number Diff line Loading @@ -126,8 +126,8 @@ android:layout_height="wrap_content" app:layout_constraintTop_toBottomOf="@id/save" app:layout_constraintStart_toStartOf="parent" android:scaleType="matrix" android:visibility="gone" android:scaleType="centerCrop" android:visibility="invisible" /> </androidx.constraintlayout.widget.ConstraintLayout>
packages/SystemUI/res/values/styles.xml +1 −0 Original line number Diff line number Diff line Loading @@ -692,6 +692,7 @@ <item name="android:windowNoTitle">true</item> <item name="android:windowLightStatusBar">true</item> <item name="android:windowLightNavigationBar">true</item> <item name="android:windowActivityTransitions">true</item> </style> <!-- Privacy dialog --> Loading
packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java +16 −31 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.content.ComponentName; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.HardwareRenderer; import android.graphics.Matrix; import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.RenderNode; Loading @@ -35,7 +34,6 @@ import android.text.TextUtils; import android.util.Log; import android.view.ScrollCaptureResponse; import android.view.View; import android.view.Window; import android.widget.ImageView; import androidx.constraintlayout.widget.ConstraintLayout; Loading Loading @@ -68,8 +66,6 @@ public class LongScreenshotActivity extends Activity { public static final String EXTRA_CAPTURE_RESPONSE = "capture-response"; private static final String KEY_SAVED_IMAGE_PATH = "saved-image-path"; private static final boolean USE_SHARED_ELEMENT = false; private final UiEventLogger mUiEventLogger; private final Executor mUiExecutor; private final Executor mBackgroundExecutor; Loading @@ -89,6 +85,7 @@ public class LongScreenshotActivity extends Activity { private ListenableFuture<File> mCacheSaveFuture; private ListenableFuture<ImageLoader.Result> mCacheLoadFuture; private Bitmap mOutputBitmap; private LongScreenshot mLongScreenshot; private boolean mTransitionStarted; Loading @@ -114,7 +111,7 @@ public class LongScreenshotActivity extends Activity { public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate(savedInstanceState = " + savedInstanceState + ")"); super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); setContentView(R.layout.long_screenshot); mPreview = requireViewById(R.id.preview); Loading Loading @@ -173,7 +170,6 @@ public class LongScreenshotActivity extends Activity { } }, mUiExecutor); mCacheLoadFuture = null; return; } else { LongScreenshot longScreenshot = mLongScreenshotHolder.takeLongScreenshot(); if (longScreenshot != null) { Loading @@ -189,7 +185,6 @@ public class LongScreenshotActivity extends Activity { Log.d(TAG, "onLongScreenshotReceived(longScreenshot=" + longScreenshot + ")"); mLongScreenshot = longScreenshot; mPreview.setImageDrawable(mLongScreenshot.getDrawable()); mTransitionView.setImageDrawable(mLongScreenshot.getDrawable()); updateImageDimensions(); mCropView.setVisibility(View.VISIBLE); mMagnifierView.setDrawable(mLongScreenshot.getDrawable(), Loading Loading @@ -310,19 +305,15 @@ public class LongScreenshotActivity extends Activity { intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); if (USE_SHARED_ELEMENT) { updateImageDimensions(); 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; startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, mTransitionView, ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME).toBundle()); } else { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivityAsUser(intent, UserHandle.CURRENT); finishAndRemoveTask(); } } private void doShare(Uri uri) { Loading Loading @@ -368,9 +359,11 @@ public class LongScreenshotActivity extends Activity { return; } Bitmap output = renderBitmap(mPreview.getDrawable(), bounds); updateImageDimensions(); mOutputBitmap = renderBitmap(drawable, bounds); ListenableFuture<ImageExporter.Result> exportFuture = mImageExporter.export( mBackgroundExecutor, UUID.randomUUID(), output, ZonedDateTime.now()); mBackgroundExecutor, UUID.randomUUID(), mOutputBitmap, ZonedDateTime.now()); exportFuture.addListener(() -> onExportCompleted(action, exportFuture), mUiExecutor); } Loading Loading @@ -419,7 +412,6 @@ public class LongScreenshotActivity extends Activity { // The image width and height on screen int imageHeight = previewHeight; int imageWidth = previewWidth; float scale; if (imageRatio > viewRatio) { // Image is full width and height is constrained, compute extra padding to inform // CropView Loading @@ -428,13 +420,11 @@ public class LongScreenshotActivity extends Activity { mCropView.setExtraPadding(extraPadding + mPreview.getPaddingTop(), extraPadding + mPreview.getPaddingBottom()); imageTop += (previewHeight - imageHeight) / 2; scale = imageHeight / bounds.height(); mCropView.setExtraPadding(extraPadding, extraPadding); mCropView.setImageWidth(previewWidth); } else { imageWidth = (int) (previewWidth * imageRatio / viewRatio); imageLeft += (previewWidth - imageWidth) / 2; scale = imageWidth / (float) bounds.width(); // Image is full height mCropView.setExtraPadding(mPreview.getPaddingTop(), mPreview.getPaddingBottom()); mCropView.setImageWidth((int) (previewHeight * imageRatio)); Loading @@ -449,10 +439,5 @@ public class LongScreenshotActivity extends Activity { params.width = boundaries.width(); params.height = boundaries.height(); mTransitionView.setLayoutParams(params); Matrix matrix = new Matrix(); matrix.postScale(scale, scale, 0, 0); matrix.postTranslate(-boundaries.left, -boundaries.top); mTransitionView.setImageMatrix(matrix); } }