diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java | 12 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java | 60 |
2 files changed, 72 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index a624479fa63c..55994594d32f 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -208,6 +208,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset private Animator mScreenshotAnimation; private Runnable mOnCompleteRunnable; private Animator mDismissAnimation; + private SavedImageData mImageData; private boolean mInDarkMode = false; private boolean mDirectionLTR = true; private boolean mOrientationPortrait = true; @@ -226,6 +227,9 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset switch (msg.what) { case MESSAGE_CORNER_TIMEOUT: mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_INTERACTION_TIMEOUT); + if (mImageData != null) { + mNotificationsController.showSilentScreenshotNotification(mImageData); + } GlobalScreenshot.this.dismissScreenshot("timeout", false); mOnCompleteRunnable.run(); break; @@ -396,6 +400,9 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset mDismissButton = mScreenshotLayout.findViewById(R.id.global_screenshot_dismiss_button); mDismissButton.setOnClickListener(view -> { mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_EXPLICIT_DISMISSAL); + if (mImageData != null) { + mNotificationsController.showSilentScreenshotNotification(mImageData); + } dismissScreenshot("dismiss_button", false); mOnCompleteRunnable.run(); }); @@ -436,6 +443,10 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset }); } + mImageData = null; // make sure we clear the current stored data + mNotificationsController.reset(); + mNotificationsController.setImage(mScreenBitmap); + mSaveInBgTask = new SaveImageInBackgroundTask(mContext, data); mSaveInBgTask.execute(); } @@ -643,6 +654,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset */ private void showUiOnActionsReady(SavedImageData imageData) { logSuccessOnActionsReady(imageData); + mImageData = imageData; AccessibilityManager accessibilityManager = (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java index fbcd6ba0ff47..46fe7f4630bd 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java @@ -226,6 +226,66 @@ public class ScreenshotNotificationsController { } /** + * Shows a silent notification with the saved screenshot and actions that can be taken with it. + * + * @param actionData SavedImageData struct with image URI and actions + */ + public void showSilentScreenshotNotification( + GlobalScreenshot.SavedImageData actionData) { + mNotificationBuilder.addAction(actionData.shareAction); + mNotificationBuilder.addAction(actionData.editAction); + mNotificationBuilder.addAction(actionData.deleteAction); + for (Notification.Action smartAction : actionData.smartActions) { + mNotificationBuilder.addAction(smartAction); + } + + // Create the intent to show the screenshot in gallery + Intent launchIntent = new Intent(Intent.ACTION_VIEW); + launchIntent.setDataAndType(actionData.uri, "image/png"); + launchIntent.setFlags( + Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION); + + final long now = System.currentTimeMillis(); + + // Update the text and the icon for the existing notification + mPublicNotificationBuilder + .setContentTitle(mResources.getString(R.string.screenshot_saved_title)) + .setContentText(mResources.getString(R.string.screenshot_saved_text)) + .setContentIntent(PendingIntent.getActivity(mContext, 0, launchIntent, 0)) + .setSmallIcon(R.drawable.stat_notify_image) + .setCategory(Notification.CATEGORY_PROGRESS) + .setWhen(now) + .setShowWhen(true) + .setAutoCancel(true) + .setColor(mContext.getColor( + com.android.internal.R.color.system_notification_accent_color)) + .setGroup("silent") + .setGroupAlertBehavior(Notification.GROUP_ALERT_SUMMARY); + mNotificationBuilder + .setContentTitle(mResources.getString(R.string.screenshot_saved_title)) + .setContentText(mResources.getString(R.string.screenshot_saved_text)) + .setContentIntent(PendingIntent.getActivity(mContext, 0, launchIntent, 0)) + .setSmallIcon(R.drawable.stat_notify_image) + .setCategory(Notification.CATEGORY_PROGRESS) + .setWhen(now) + .setShowWhen(true) + .setAutoCancel(true) + .setColor(mContext.getColor( + com.android.internal.R.color.system_notification_accent_color)) + .setPublicVersion(mPublicNotificationBuilder.build()) + .setStyle(mNotificationStyle) + .setFlag(Notification.FLAG_NO_CLEAR, false) + .setGroup("silent") + .setGroupAlertBehavior(Notification.GROUP_ALERT_SUMMARY); + + SystemUI.overrideNotificationAppName(mContext, mPublicNotificationBuilder, true); + SystemUI.overrideNotificationAppName(mContext, mNotificationBuilder, true); + + mNotificationManager.notify(SystemMessageProto.SystemMessage.NOTE_GLOBAL_SCREENSHOT, + mNotificationBuilder.build()); + } + + /** * Sends a notification that the screenshot capture has failed. */ public void notifyScreenshotError(int msgResId) { |