From 6864874f6df96d6e5c67023830b4c5380a64cfff Mon Sep 17 00:00:00 2001 From: Miranda Kephart Date: Thu, 18 Jun 2020 12:16:00 -0400 Subject: [PATCH] Close screenshot UI on CLOSE_SYSTEM_DIALOGS intent Bug: 158845370 Fix: 158845370 Bug: 148808304 Test: manual -- tapped search bar, took a screenshot, and then swiped up to home to verify that the home screen reappeared correctly Change-Id: I74d16e71392482185bb87d8f5d71ea93f38a40d6 --- .../systemui/screenshot/GlobalScreenshot.java | 2 +- .../screenshot/TakeScreenshotService.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index 8c1e1dd0cac7e..68c5fa3927ef6 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -626,7 +626,7 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset /** * Clears current screenshot */ - private void dismissScreenshot(String reason, boolean immediate) { + void dismissScreenshot(String reason, boolean immediate) { Log.v(TAG, "clearing screenshot: " + reason); mScreenshotHandler.removeMessages(MESSAGE_CORNER_TIMEOUT); mScreenshotLayout.getViewTreeObserver().removeOnComputeInternalInsetsListener(this); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java index c05c8236def02..9f8a9bb4a4329 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java @@ -16,12 +16,17 @@ package com.android.systemui.screenshot; +import static android.content.Intent.ACTION_CLOSE_SYSTEM_DIALOGS; + import static com.android.internal.util.ScreenshotHelper.SCREENSHOT_MSG_PROCESS_COMPLETE; import static com.android.internal.util.ScreenshotHelper.SCREENSHOT_MSG_URI; import android.app.Service; +import android.content.BroadcastReceiver; import android.content.ComponentName; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.graphics.Bitmap; import android.graphics.Insets; import android.graphics.Rect; @@ -51,6 +56,16 @@ public class TakeScreenshotService extends Service { private final UserManager mUserManager; private final UiEventLogger mUiEventLogger; + private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + if (ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction()) && mScreenshot != null) { + mScreenshot.dismissScreenshot("close system dialogs", true); + } + } + }; + private Handler mHandler = new Handler(Looper.myLooper()) { @Override public void handleMessage(Message msg) { @@ -119,12 +134,18 @@ public class TakeScreenshotService extends Service { @Override public IBinder onBind(Intent intent) { + // register broadcast receiver + IntentFilter filter = new IntentFilter(ACTION_CLOSE_SYSTEM_DIALOGS); + registerReceiver(mBroadcastReceiver, filter); + return new Messenger(mHandler).getBinder(); + } @Override public boolean onUnbind(Intent intent) { if (mScreenshot != null) mScreenshot.stopScreenshot(); + unregisterReceiver(mBroadcastReceiver); return true; } }