Revert "Revert "3/ Add input consumer to capture touches during a Recents transition""
This reverts commit 86733be8f65ddc01a0dc7f821fedbd852eabcb39.
Reason for revert: Testing relanding changes with ag/3515280
Change-Id: I37172d809db48622040d5fa41c4d4dcd077a9328
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index c7ad17b..c7d4b8e 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -19,6 +19,7 @@
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
import static android.view.RemoteAnimationTarget.MODE_CLOSING;
+import static android.view.WindowManager.INPUT_CONSUMER_RECENTS_ANIMATION;
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
@@ -74,6 +75,8 @@
// enabled for it to start intercepting touch events.
private boolean mInputConsumerEnabled;
+ private Rect mTmpRect = new Rect();
+
public interface RecentsAnimationCallbacks {
void onAnimationFinished(boolean moveHomeToTop);
}
@@ -263,6 +266,7 @@
mService.mInputMonitor.updateInputWindowsLw(true /*force*/);
mService.scheduleAnimationLocked();
+ mService.destroyInputConsumer(INPUT_CONSUMER_RECENTS_ANIMATION);
}
void checkAnimationReady(WallpaperController wallpaperController) {
@@ -281,21 +285,33 @@
&& isHomeAppOverWallpaper();
}
- boolean isHomeAppOverWallpaper() {
+ boolean hasInputConsumerForApp(AppWindowToken appToken) {
+ return mInputConsumerEnabled && isAnimatingApp(appToken);
+ }
+
+ boolean updateInputConsumerForApp(InputConsumerImpl recentsAnimationInputConsumer,
+ boolean hasFocus) {
+ // Update the input consumer touchable region to match the home app main window
+ final WindowState homeAppMainWindow = mHomeAppToken != null
+ ? mHomeAppToken.findMainWindow()
+ : null;
+ if (homeAppMainWindow != null) {
+ homeAppMainWindow.getBounds(mTmpRect);
+ recentsAnimationInputConsumer.mWindowHandle.hasFocus = hasFocus;
+ recentsAnimationInputConsumer.mWindowHandle.touchableRegion.set(mTmpRect);
+ return true;
+ }
+ return false;
+ }
+
+ private boolean isHomeAppOverWallpaper() {
if (mHomeAppToken == null) {
return false;
}
return mHomeAppToken.windowsCanBeWallpaperTarget();
}
- WindowState getHomeAppMainWindow() {
- if (mHomeAppToken == null) {
- return null;
- }
- return mHomeAppToken.findMainWindow();
- }
-
- boolean isAnimatingApp(AppWindowToken appToken) {
+ private boolean isAnimatingApp(AppWindowToken appToken) {
for (int i = mPendingAnimations.size() - 1; i >= 0; i--) {
final Task task = mPendingAnimations.get(i).mTask;
for (int j = task.getChildCount() - 1; j >= 0; j--) {
@@ -308,10 +324,6 @@
return false;
}
- boolean isInputConsumerEnabled() {
- return mInputConsumerEnabled;
- }
-
private class TaskAnimationAdapter implements AnimationAdapter {
private Task mTask;