Merge "Check Task windowing mode when reporting display features" into tm-dev
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java
index a6f6388..c1d1c8e 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java
@@ -25,7 +25,10 @@
 
 import android.annotation.Nullable;
 import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.ActivityManager.AppTask;
 import android.app.Application;
+import android.app.WindowConfiguration;
 import android.content.Context;
 import android.graphics.Rect;
 import android.os.Bundle;
@@ -183,7 +186,7 @@
             return features;
         }
 
-        if (activity.isInMultiWindowMode()) {
+        if (isTaskInMultiWindowMode(activity)) {
             // It is recommended not to report any display features in multi-window mode, since it
             // won't be possible to synchronize the display feature positions with window movement.
             return features;
@@ -210,6 +213,32 @@
     }
 
     /**
+     * Checks whether the task associated with the activity is in multi-window. If task info is not
+     * available it defaults to {@code true}.
+     */
+    private boolean isTaskInMultiWindowMode(@NonNull Activity activity) {
+        final ActivityManager am = activity.getSystemService(ActivityManager.class);
+        if (am == null) {
+            return true;
+        }
+
+        final List<AppTask> appTasks = am.getAppTasks();
+        final int taskId = activity.getTaskId();
+        AppTask task = null;
+        for (AppTask t : appTasks) {
+            if (t.getTaskInfo().taskId == taskId) {
+                task = t;
+                break;
+            }
+        }
+        if (task == null) {
+            // The task might be removed on the server already.
+            return true;
+        }
+        return WindowConfiguration.inMultiWindowMode(task.getTaskInfo().getWindowingMode());
+    }
+
+    /**
      * Returns {@link true} if a {@link Rect} has zero width and zero height,
      * {@code false} otherwise.
      */