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;