Merge "Check Task windowing mode when reporting display features" into tm-dev am: cfe0279f69 am: 6eb9f091f0

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18972307

Change-Id: I955e801eccdb912b26526ada42c2755c6cf92ce2
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Andrii Kulian
2022-06-22 05:55:40 +00:00
committed by Automerger Merge Worker

View File

@@ -25,7 +25,10 @@ import static androidx.window.util.ExtensionHelper.transformToWindowSpaceRect;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.Activity; import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.AppTask;
import android.app.Application; import android.app.Application;
import android.app.WindowConfiguration;
import android.content.Context; import android.content.Context;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.Bundle; import android.os.Bundle;
@@ -183,7 +186,7 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent {
return features; return features;
} }
if (activity.isInMultiWindowMode()) { if (isTaskInMultiWindowMode(activity)) {
// It is recommended not to report any display features in multi-window mode, since it // 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. // won't be possible to synchronize the display feature positions with window movement.
return features; return features;
@@ -209,6 +212,32 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent {
return features; return features;
} }
/**
* 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, * Returns {@link true} if a {@link Rect} has zero width and zero height,
* {@code false} otherwise. * {@code false} otherwise.