Move code to simplify ScreenshotController
Removes unused method from ScreenshotController and moves inner
classes/interfaces that are only required for SaveImageInBackgroundTask
to the latter, to simplify ScreenshotController in preparation for
rolling out the flag that will remove SaveImageInBackgroundTask.
Bug: 328603973
Flag: EXEMPT moving code/removing unused code
Test: manual, atest
Change-Id: Ib89ccebb292dd65a804379d9ec12faa19125c75c
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
index 4914409..54ae225 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
@@ -49,6 +49,7 @@
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
+import java.util.function.Consumer;
/**
* An AsyncTask that saves an image to the media store in the background.
@@ -59,12 +60,73 @@
private static final String SCREENSHOT_ID_TEMPLATE = "Screenshot_%s";
private static final String SCREENSHOT_SHARE_SUBJECT_TEMPLATE = "Screenshot (%s)";
+ /**
+ * POD used in the AsyncTask which saves an image in the background.
+ */
+ static class SaveImageInBackgroundData {
+ public Bitmap image;
+ public Consumer<Uri> finisher;
+ public ActionsReadyListener mActionsReadyListener;
+ public QuickShareActionReadyListener mQuickShareActionsReadyListener;
+ public UserHandle owner;
+ public int displayId;
+
+ void clearImage() {
+ image = null;
+ }
+ }
+
+ /**
+ * Structure returned by the SaveImageInBackgroundTask
+ */
+ public static class SavedImageData {
+ public Uri uri;
+ public List<Notification.Action> smartActions;
+ public Notification.Action quickShareAction;
+ public UserHandle owner;
+ public String subject; // Title for sharing
+ public Long imageTime; // Time at which screenshot was saved
+
+ /**
+ * Used to reset the return data on error
+ */
+ public void reset() {
+ uri = null;
+ smartActions = null;
+ quickShareAction = null;
+ subject = null;
+ imageTime = null;
+ }
+ }
+
+ /**
+ * Structure returned by the QueryQuickShareInBackgroundTask
+ */
+ static class QuickShareData {
+ public Notification.Action quickShareAction;
+
+ /**
+ * Used to reset the return data on error
+ */
+ public void reset() {
+ quickShareAction = null;
+ }
+ }
+
+ interface ActionsReadyListener {
+ void onActionsReady(SavedImageData imageData);
+ }
+
+ interface QuickShareActionReadyListener {
+ void onActionsReady(QuickShareData quickShareData);
+ }
+
private final Context mContext;
private FeatureFlags mFlags;
private final ScreenshotSmartActions mScreenshotSmartActions;
- private final ScreenshotController.SaveImageInBackgroundData mParams;
- private final ScreenshotController.SavedImageData mImageData;
- private final ScreenshotController.QuickShareData mQuickShareData;
+ private final SaveImageInBackgroundData mParams;
+ private final SavedImageData mImageData;
+ private final QuickShareData mQuickShareData;
private final ScreenshotNotificationSmartActionsProvider mSmartActionsProvider;
private String mScreenshotId;
@@ -77,15 +139,15 @@
FeatureFlags flags,
ImageExporter exporter,
ScreenshotSmartActions screenshotSmartActions,
- ScreenshotController.SaveImageInBackgroundData data,
+ SaveImageInBackgroundData data,
ScreenshotNotificationSmartActionsProvider
screenshotNotificationSmartActionsProvider
) {
mContext = context;
mFlags = flags;
mScreenshotSmartActions = screenshotSmartActions;
- mImageData = new ScreenshotController.SavedImageData();
- mQuickShareData = new ScreenshotController.QuickShareData();
+ mImageData = new SavedImageData();
+ mQuickShareData = new QuickShareData();
mImageExporter = exporter;
// Prepare all the output metadata
@@ -195,7 +257,7 @@
* Update the listener run when the saving task completes. Used to avoid showing UI for the
* first screenshot when a second one is taken.
*/
- void setActionsReadyListener(ScreenshotController.ActionsReadyListener listener) {
+ void setActionsReadyListener(ActionsReadyListener listener) {
mParams.mActionsReadyListener = listener;
}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
index 7739009..0a4635e 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020 The Android Open Source Project
+ * Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,10 +35,7 @@
import android.annotation.MainThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.app.ActivityOptions;
-import android.app.ExitTransitionCoordinator;
import android.app.ICompatCameraControlCallback;
-import android.app.Notification;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -55,7 +52,6 @@
import android.provider.Settings;
import android.util.DisplayMetrics;
import android.util.Log;
-import android.util.Pair;
import android.view.Display;
import android.view.ScrollCaptureResponse;
import android.view.View;
@@ -67,7 +63,6 @@
import android.widget.Toast;
import android.window.WindowContext;
-import com.android.internal.app.ChooserActivity;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.policy.PhoneWindow;
import com.android.settingslib.applications.InterestingConfigChanges;
@@ -89,7 +84,6 @@
import kotlin.Unit;
-import java.util.List;
import java.util.UUID;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
@@ -104,67 +98,6 @@
public class ScreenshotController implements ScreenshotHandler {
private static final String TAG = logTag(ScreenshotController.class);
- /**
- * POD used in the AsyncTask which saves an image in the background.
- */
- static class SaveImageInBackgroundData {
- public Bitmap image;
- public Consumer<Uri> finisher;
- public ScreenshotController.ActionsReadyListener mActionsReadyListener;
- public ScreenshotController.QuickShareActionReadyListener mQuickShareActionsReadyListener;
- public UserHandle owner;
- public int displayId;
-
- void clearImage() {
- image = null;
- }
- }
-
- /**
- * Structure returned by the SaveImageInBackgroundTask
- */
- public static class SavedImageData {
- public Uri uri;
- public List<Notification.Action> smartActions;
- public Notification.Action quickShareAction;
- public UserHandle owner;
- public String subject; // Title for sharing
- public Long imageTime; // Time at which screenshot was saved
-
- /**
- * Used to reset the return data on error
- */
- public void reset() {
- uri = null;
- smartActions = null;
- quickShareAction = null;
- subject = null;
- imageTime = null;
- }
- }
-
- /**
- * Structure returned by the QueryQuickShareInBackgroundTask
- */
- static class QuickShareData {
- public Notification.Action quickShareAction;
-
- /**
- * Used to reset the return data on error
- */
- public void reset() {
- quickShareAction = null;
- }
- }
-
- interface ActionsReadyListener {
- void onActionsReady(ScreenshotController.SavedImageData imageData);
- }
-
- interface QuickShareActionReadyListener {
- void onActionsReady(ScreenshotController.QuickShareData quickShareData);
- }
-
public interface TransitionDestination {
/**
* Allows the long screenshot activity to call back with a destination location (the bounds
@@ -213,7 +146,6 @@
private final ScreenshotNotificationSmartActionsProvider
mScreenshotNotificationSmartActionsProvider;
private final TimeoutHandler mScreenshotHandler;
- private final ActionIntentExecutor mActionIntentExecutor;
private final UserManager mUserManager;
private final AssistContentRequester mAssistContentRequester;
private final ActionExecutor mActionExecutor;
@@ -259,7 +191,6 @@
BroadcastDispatcher broadcastDispatcher,
ScreenshotNotificationSmartActionsProvider screenshotNotificationSmartActionsProvider,
ScreenshotActionsController.Factory screenshotActionsControllerFactory,
- ActionIntentExecutor actionIntentExecutor,
ActionExecutor.Factory actionExecutorFactory,
UserManager userManager,
AssistContentRequester assistContentRequester,
@@ -289,7 +220,6 @@
final Context displayContext = context.createDisplayContext(display);
mContext = (WindowContext) displayContext.createWindowContext(TYPE_SCREENSHOT, null);
mFlags = flags;
- mActionIntentExecutor = actionIntentExecutor;
mUserManager = userManager;
mMessageContainerController = messageContainerController;
mAssistContentRequester = assistContentRequester;
@@ -765,33 +695,6 @@
mScreenshotAnimation.start();
}
- /**
- * Supplies the necessary bits for the shared element transition to share sheet.
- * Note that once called, the action intent to share must be sent immediately after.
- */
- private Pair<ActivityOptions, ExitTransitionCoordinator> createWindowTransition() {
- ExitTransitionCoordinator.ExitTransitionCallbacks callbacks =
- new ExitTransitionCoordinator.ExitTransitionCallbacks() {
- @Override
- public boolean isReturnTransitionAllowed() {
- return false;
- }
-
- @Override
- public void hideSharedElements() {
- finishDismiss();
- }
-
- @Override
- public void onFinish() {
- }
- };
-
- return ActivityOptions.startSharedElementAnimation(mWindow, callbacks, null,
- Pair.create(mViewProxy.getScreenshotPreview(),
- ChooserActivity.FIRST_IMAGE_PREVIEW_TRANSITION_NAME));
- }
-
/** Reset screenshot view and then call onCompleteRunnable */
private void finishDismiss() {
Log.d(TAG, "finishDismiss");
@@ -838,11 +741,11 @@
private void saveScreenshotInWorkerThread(
UserHandle owner,
@NonNull Consumer<Uri> finisher,
- @Nullable ActionsReadyListener actionsReadyListener,
- @Nullable QuickShareActionReadyListener
+ @Nullable SaveImageInBackgroundTask.ActionsReadyListener actionsReadyListener,
+ @Nullable SaveImageInBackgroundTask.QuickShareActionReadyListener
quickShareActionsReadyListener) {
- ScreenshotController.SaveImageInBackgroundData
- data = new ScreenshotController.SaveImageInBackgroundData();
+ SaveImageInBackgroundTask.SaveImageInBackgroundData
+ data = new SaveImageInBackgroundTask.SaveImageInBackgroundData();
data.image = mScreenBitmap;
data.finisher = finisher;
data.mActionsReadyListener = actionsReadyListener;
@@ -881,7 +784,7 @@
/**
* Logs success/failure of the screenshot saving task, and shows an error if it failed.
*/
- private void logSuccessOnActionsReady(ScreenshotController.SavedImageData imageData) {
+ private void logSuccessOnActionsReady(SaveImageInBackgroundTask.SavedImageData imageData) {
logScreenshotResultStatus(imageData.uri, imageData.owner);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/SaveImageInBackgroundTaskTest.kt b/packages/SystemUI/tests/src/com/android/systemui/screenshot/SaveImageInBackgroundTaskTest.kt
index 25dd9fe..24e8b18 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/SaveImageInBackgroundTaskTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/SaveImageInBackgroundTaskTest.kt
@@ -27,7 +27,6 @@
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.FakeFeatureFlags
-import com.android.systemui.screenshot.ScreenshotController.SaveImageInBackgroundData
import com.android.systemui.screenshot.ScreenshotNotificationSmartActionsProvider.ScreenshotSmartActionType
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.eq
@@ -44,7 +43,7 @@
private val imageExporter = mock<ImageExporter>()
private val smartActions = mock<ScreenshotSmartActions>()
private val smartActionsProvider = mock<ScreenshotNotificationSmartActionsProvider>()
- private val saveImageData = SaveImageInBackgroundData()
+ private val saveImageData = SaveImageInBackgroundTask.SaveImageInBackgroundData()
private val testScreenshotId: String = "testScreenshotId"
private val testBitmap = mock<Bitmap>()
private val testUser = UserHandle.getUserHandleForUid(0)