Migrate ScreenshotController to Predictive Back

Bug: 258493176
Test: Tested manually, as discussed with gwasserman@, it is not feasible to write a test for this right now.
Change-Id: I30e5a587ae8121dbbfc61e15f6b904e67ee52a91
This commit is contained in:
Rahul Banerjee
2022-11-21 12:10:42 -08:00
parent c4588f708d
commit c9ac8d3db5

View File

@@ -84,6 +84,8 @@ import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityManager;
import android.widget.Toast;
import android.window.OnBackInvokedCallback;
import android.window.OnBackInvokedDispatcher;
import android.window.WindowContext;
import androidx.concurrent.futures.CallbackToFutureAdapter;
@@ -279,6 +281,13 @@ public class ScreenshotController {
private final ActionIntentExecutor mActionExecutor;
private final UserManager mUserManager;
private final OnBackInvokedCallback mOnBackInvokedCallback = () -> {
if (DEBUG_INPUT) {
Log.d(TAG, "Predictive Back callback dispatched");
}
respondToBack();
};
private ScreenshotView mScreenshotView;
private Bitmap mScreenBitmap;
private SaveImageInBackgroundTask mSaveInBgTask;
@@ -465,6 +474,10 @@ public class ScreenshotController {
}
}
private void respondToBack() {
dismissScreenshot(SCREENSHOT_DISMISSED_OTHER);
}
/**
* Update resources on configuration change. Reinflate for theme/color changes.
*/
@@ -476,6 +489,26 @@ public class ScreenshotController {
// Inflate the screenshot layout
mScreenshotView = (ScreenshotView)
LayoutInflater.from(mContext).inflate(R.layout.screenshot, null);
mScreenshotView.addOnAttachStateChangeListener(
new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(@NonNull View v) {
if (DEBUG_INPUT) {
Log.d(TAG, "Registering Predictive Back callback");
}
mScreenshotView.findOnBackInvokedDispatcher().registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT, mOnBackInvokedCallback);
}
@Override
public void onViewDetachedFromWindow(@NonNull View v) {
if (DEBUG_INPUT) {
Log.d(TAG, "Unregistering Predictive Back callback");
}
mScreenshotView.findOnBackInvokedDispatcher()
.unregisterOnBackInvokedCallback(mOnBackInvokedCallback);
}
});
mScreenshotView.init(mUiEventLogger, new ScreenshotView.ScreenshotViewCallback() {
@Override
public void onUserInteraction() {
@@ -503,7 +536,7 @@ public class ScreenshotController {
if (DEBUG_INPUT) {
Log.d(TAG, "onKeyEvent: KeyEvent.KEYCODE_BACK");
}
dismissScreenshot(SCREENSHOT_DISMISSED_OTHER);
respondToBack();
return true;
}
return false;