Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5abc4b45 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add API to indicate supported windowing modes on the virtual displays"...

Merge "Add API to indicate supported windowing modes on the virtual displays" into tm-dev am: 77946e2a

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

Change-Id: Ie595d69d20a3321cb8150c2b7bedc88481cb75b5
parents 6b68106f 77946e2a
Loading
Loading
Loading
Loading
+45 −2
Original line number Diff line number Diff line
@@ -17,12 +17,14 @@
package android.window;

import android.annotation.NonNull;
import android.app.WindowConfiguration;
import android.content.ComponentName;
import android.content.pm.ActivityInfo;
import android.util.ArraySet;

import java.io.PrintWriter;
import java.util.List;
import java.util.Set;

/**
 * Abstract class to control the policies of the windows that can be displayed on the virtual
@@ -45,6 +47,22 @@ public abstract class DisplayWindowPolicyController {
     */
    private int mSystemWindowFlags;

    /**
     * The set of windowing mode that are supported in this display.
     * @see android.app.WindowConfiguration.WindowingMode
     */
    private final Set<Integer> mSupportedWindowingModes = new ArraySet<>();

    /**
     * A controller to control the policies of the windows that can be displayed on the virtual
     * display.
     */
    public DisplayWindowPolicyController() {
        synchronized (mSupportedWindowingModes) {
            mSupportedWindowingModes.add(WindowConfiguration.WINDOWING_MODE_FULLSCREEN);
        }
    }

    /**
     * Returns {@code true} if the given window flags contain the flags that we're interested in.
     */
@@ -62,9 +80,34 @@ public abstract class DisplayWindowPolicyController {
    }

    /**
     * Returns {@code true} if the given activities can be displayed on this virtual display.
     * Returns {@code true} if the given windowing mode is supported in this display.
     */
    public final boolean isWindowingModeSupported(
            @WindowConfiguration.WindowingMode int windowingMode) {
        synchronized (mSupportedWindowingModes) {
            return mSupportedWindowingModes.contains(windowingMode);
        }
    }

    /**
     * Sets the windowing modes are supported in this display.
     *
     * @param supportedWindowingModes The set of
     * {@link android.app.WindowConfiguration.WindowingMode}.
     */
    public final void setSupportedWindowingModes(Set<Integer> supportedWindowingModes) {
        synchronized (mSupportedWindowingModes) {
            mSupportedWindowingModes.clear();
            mSupportedWindowingModes.addAll(supportedWindowingModes);
        }
    }

    /**
     * Returns {@code true} if the given activities can be displayed on this virtual display and
     * the windowing mode is supported.
     */
    public abstract boolean canContainActivities(@NonNull List<ActivityInfo> activities);
    public abstract boolean canContainActivities(@NonNull List<ActivityInfo> activities,
            @WindowConfiguration.WindowingMode int windowingMode);

    /**
     * Called when an Activity window is layouted with the new changes where contains the
+7 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTE

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.WindowConfiguration;
import android.app.compat.CompatChanges;
import android.companion.virtual.VirtualDeviceManager.ActivityListener;
import android.companion.virtual.VirtualDeviceParams;
@@ -119,6 +120,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
            @ActivityPolicy int defaultActivityPolicy,
            @NonNull ActivityListener activityListener,
            @NonNull Consumer<ActivityInfo> activityBlockedCallback) {
        super();
        mAllowedUsers = allowedUsers;
        mAllowedActivities = new ArraySet<>(allowedActivities);
        mBlockedActivities = new ArraySet<>(blockedActivities);
@@ -134,7 +136,11 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
    }

    @Override
    public boolean canContainActivities(@NonNull List<ActivityInfo> activities) {
    public boolean canContainActivities(@NonNull List<ActivityInfo> activities,
            @WindowConfiguration.WindowingMode int windowingMode) {
        if (!isWindowingModeSupported(windowingMode)) {
            return false;
        }
        // Can't display all the activities if any of them don't want to be displayed.
        final int activityCount = activities.size();
        for (int i = 0; i < activityCount; i++) {
+3 −1
Original line number Diff line number Diff line
@@ -2914,7 +2914,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
     */
    boolean supportsPictureInPicture() {
        return mAtmService.mSupportsPictureInPicture && isActivityTypeStandardOrUndefined()
                && info.supportsPictureInPicture();
                && info.supportsPictureInPicture()
                && (mDisplayContent != null && mDisplayContent.mDwpcHelper.isWindowingModeSupported(
                WINDOWING_MODE_PINNED));
    }

    /**
+2 −1
Original line number Diff line number Diff line
@@ -402,7 +402,8 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
                    activities.add(r.info);
                });
            }
            if (!displayContent.mDwpcHelper.canContainActivities(activities)) {
            if (!displayContent.mDwpcHelper.canContainActivities(activities,
                    displayContent.getWindowingMode())) {
                return false;
            }
        }
+16 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.wm;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.WindowConfiguration;
import android.content.pm.ActivityInfo;
import android.os.UserHandle;
import android.util.ArraySet;
@@ -63,13 +64,14 @@ class DisplayWindowPolicyControllerHelper {
    }

    /**
     * @see DisplayWindowPolicyController#canContainActivities(List)
     * @see DisplayWindowPolicyController#canContainActivities(List, int)
     */
    public boolean canContainActivities(@NonNull List<ActivityInfo> activities) {
    public boolean canContainActivities(@NonNull List<ActivityInfo> activities,
            @WindowConfiguration.WindowingMode int windowingMode) {
        if (mDisplayWindowPolicyController == null) {
            return true;
        }
        return mDisplayWindowPolicyController.canContainActivities(activities);
        return mDisplayWindowPolicyController.canContainActivities(activities, windowingMode);
    }

    /**
@@ -126,6 +128,17 @@ class DisplayWindowPolicyControllerHelper {
        }
    }

    /**
     * @see DisplayWindowPolicyController#isWindowingModeSupported(int)
     */
    public final boolean isWindowingModeSupported(
            @WindowConfiguration.WindowingMode int windowingMode) {
        if (mDisplayWindowPolicyController == null) {
            return true;
        }
        return mDisplayWindowPolicyController.isWindowingModeSupported(windowingMode);
    }

    void dump(String prefix, PrintWriter pw) {
        if (mDisplayWindowPolicyController != null) {
            pw.println();
Loading