Loading core/java/android/window/DisplayWindowPolicyController.java +4 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.window; import android.annotation.NonNull; import android.content.ComponentName; import android.content.pm.ActivityInfo; import android.util.ArraySet; import java.io.PrintWriter; import java.util.List; Loading Loading @@ -81,8 +82,10 @@ public abstract class DisplayWindowPolicyController { /** * This is called when the apps that contains running activities on the display has changed. * The running activities refer to the non-finishing activities regardless of they are running * in a process. */ public void onRunningAppsChanged(int[] runningUids) {} public void onRunningAppsChanged(ArraySet<Integer> runningUids) {} /** Dump debug data */ public void dump(String prefix, final PrintWriter pw) { Loading services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java +2 −4 Original line number Diff line number Diff line Loading @@ -84,11 +84,9 @@ class GenericWindowPolicyController extends DisplayWindowPolicyController { } @Override public void onRunningAppsChanged(int[] runningUids) { public void onRunningAppsChanged(ArraySet<Integer> runningUids) { mRunningUids.clear(); for (int i = 0; i < runningUids.length; i++) { mRunningUids.add(runningUids[i]); } mRunningUids.addAll(runningUids); } /** Loading services/core/java/com/android/server/wm/ActivityRecord.java +9 −1 Original line number Diff line number Diff line Loading @@ -1546,10 +1546,17 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A void onDisplayChanged(DisplayContent dc) { DisplayContent prevDc = mDisplayContent; super.onDisplayChanged(dc); if (prevDc == null || prevDc == mDisplayContent) { if (prevDc == mDisplayContent) { return; } mDisplayContent.onRunningActivityChanged(); if (prevDc == null) { return; } prevDc.onRunningActivityChanged(); // TODO(b/169035022): move to a more-appropriate place. mTransitionController.collect(this); if (prevDc.mOpeningApps.remove(this)) { Loading Loading @@ -3905,6 +3912,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // Reset the last saved PiP snap fraction on removal. mDisplayContent.mPinnedTaskController.onActivityHidden(mActivityComponent); mDisplayContent.onRunningActivityChanged(); mWmService.mEmbeddedWindowController.onActivityRemoved(this); mRemovingFromDisplay = false; } Loading services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +30 −0 Original line number Diff line number Diff line Loading @@ -364,6 +364,17 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { /** Check if placing task or activity on specified display is allowed. */ boolean canPlaceEntityOnDisplay(int displayId, int callingPid, int callingUid, ActivityInfo activityInfo) { return canPlaceEntityOnDisplay(displayId, callingPid, callingUid, null /* task */, activityInfo); } boolean canPlaceEntityOnDisplay(int displayId, int callingPid, int callingUid, Task task) { return canPlaceEntityOnDisplay(displayId, callingPid, callingUid, task, null /* activityInfo */); } private boolean canPlaceEntityOnDisplay(int displayId, int callingPid, int callingUid, Task task, ActivityInfo activityInfo) { if (displayId == DEFAULT_DISPLAY) { // No restrictions for the default display. return true; Loading @@ -372,12 +383,31 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { // Can't launch on secondary displays if feature is not supported. return false; } if (!isCallerAllowedToLaunchOnDisplay(callingPid, callingUid, displayId, activityInfo)) { // Can't place activities to a display that has restricted launch rules. // In this case the request should be made by explicitly adding target display id and // by caller with corresponding permissions. See #isCallerAllowedToLaunchOnDisplay(). return false; } final DisplayContent displayContent = mRootWindowContainer.getDisplayContentOrCreate(displayId); if (displayContent != null && displayContent.mDwpcHelper.hasController()) { final ArrayList<ActivityInfo> activities = new ArrayList<>(); if (activityInfo != null) { activities.add(activityInfo); } if (task != null) { task.forAllActivities((r) -> { activities.add(r.info); }); } if (!displayContent.mDwpcHelper.canContainActivities(activities)) { return false; } } return true; } Loading services/core/java/com/android/server/wm/DisplayContent.java +10 −11 Original line number Diff line number Diff line Loading @@ -222,7 +222,6 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManager.DisplayImePolicy; import android.view.WindowManagerPolicyConstants.PointerEventListener; import android.window.DisplayWindowPolicyController; import android.window.IDisplayAreaOrganizer; import android.window.TransitionRequestInfo; Loading Loading @@ -698,12 +697,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp boolean mDontMoveToTop; /** * The policy controller of the windows that can be displayed on the virtual display. * The helper of policy controller. * * @see DisplayWindowPolicyController * @see DisplayWindowPolicyControllerHelper */ @Nullable DisplayWindowPolicyController mDisplayWindowPolicyController; DisplayWindowPolicyControllerHelper mDwpcHelper; private final Consumer<WindowState> mUpdateWindowsForAnimator = w -> { WindowStateAnimator winAnimator = w.mWinAnimator; Loading Loading @@ -2739,8 +2737,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mDisplayInfo.copyFrom(newDisplayInfo); } mDisplayWindowPolicyController = displayManagerInternal.getDisplayWindowPolicyController(mDisplayId); mDwpcHelper = new DisplayWindowPolicyControllerHelper(this); } updateBaseDisplayMetrics(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight, Loading Loading @@ -3453,10 +3450,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mInputMonitor.dump(pw, " "); pw.println(); mInsetsStateController.dump(prefix, pw); if (mDisplayWindowPolicyController != null) { pw.println(); mDisplayWindowPolicyController.dump(prefix, pw); } mDwpcHelper.dump(prefix, pw); } @Override Loading Loading @@ -3684,6 +3678,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return true; } /** Update the top activity and the uids of non-finishing activity */ void onRunningActivityChanged() { mDwpcHelper.onRunningActivityChanged(); } /** Called when the focused {@link TaskDisplayArea} on this display may have changed. */ void onLastFocusedTaskDisplayAreaChanged(@Nullable TaskDisplayArea taskDisplayArea) { // Only record the TaskDisplayArea that handles orientation request. Loading Loading
core/java/android/window/DisplayWindowPolicyController.java +4 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.window; import android.annotation.NonNull; import android.content.ComponentName; import android.content.pm.ActivityInfo; import android.util.ArraySet; import java.io.PrintWriter; import java.util.List; Loading Loading @@ -81,8 +82,10 @@ public abstract class DisplayWindowPolicyController { /** * This is called when the apps that contains running activities on the display has changed. * The running activities refer to the non-finishing activities regardless of they are running * in a process. */ public void onRunningAppsChanged(int[] runningUids) {} public void onRunningAppsChanged(ArraySet<Integer> runningUids) {} /** Dump debug data */ public void dump(String prefix, final PrintWriter pw) { Loading
services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java +2 −4 Original line number Diff line number Diff line Loading @@ -84,11 +84,9 @@ class GenericWindowPolicyController extends DisplayWindowPolicyController { } @Override public void onRunningAppsChanged(int[] runningUids) { public void onRunningAppsChanged(ArraySet<Integer> runningUids) { mRunningUids.clear(); for (int i = 0; i < runningUids.length; i++) { mRunningUids.add(runningUids[i]); } mRunningUids.addAll(runningUids); } /** Loading
services/core/java/com/android/server/wm/ActivityRecord.java +9 −1 Original line number Diff line number Diff line Loading @@ -1546,10 +1546,17 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A void onDisplayChanged(DisplayContent dc) { DisplayContent prevDc = mDisplayContent; super.onDisplayChanged(dc); if (prevDc == null || prevDc == mDisplayContent) { if (prevDc == mDisplayContent) { return; } mDisplayContent.onRunningActivityChanged(); if (prevDc == null) { return; } prevDc.onRunningActivityChanged(); // TODO(b/169035022): move to a more-appropriate place. mTransitionController.collect(this); if (prevDc.mOpeningApps.remove(this)) { Loading Loading @@ -3905,6 +3912,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // Reset the last saved PiP snap fraction on removal. mDisplayContent.mPinnedTaskController.onActivityHidden(mActivityComponent); mDisplayContent.onRunningActivityChanged(); mWmService.mEmbeddedWindowController.onActivityRemoved(this); mRemovingFromDisplay = false; } Loading
services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +30 −0 Original line number Diff line number Diff line Loading @@ -364,6 +364,17 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { /** Check if placing task or activity on specified display is allowed. */ boolean canPlaceEntityOnDisplay(int displayId, int callingPid, int callingUid, ActivityInfo activityInfo) { return canPlaceEntityOnDisplay(displayId, callingPid, callingUid, null /* task */, activityInfo); } boolean canPlaceEntityOnDisplay(int displayId, int callingPid, int callingUid, Task task) { return canPlaceEntityOnDisplay(displayId, callingPid, callingUid, task, null /* activityInfo */); } private boolean canPlaceEntityOnDisplay(int displayId, int callingPid, int callingUid, Task task, ActivityInfo activityInfo) { if (displayId == DEFAULT_DISPLAY) { // No restrictions for the default display. return true; Loading @@ -372,12 +383,31 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { // Can't launch on secondary displays if feature is not supported. return false; } if (!isCallerAllowedToLaunchOnDisplay(callingPid, callingUid, displayId, activityInfo)) { // Can't place activities to a display that has restricted launch rules. // In this case the request should be made by explicitly adding target display id and // by caller with corresponding permissions. See #isCallerAllowedToLaunchOnDisplay(). return false; } final DisplayContent displayContent = mRootWindowContainer.getDisplayContentOrCreate(displayId); if (displayContent != null && displayContent.mDwpcHelper.hasController()) { final ArrayList<ActivityInfo> activities = new ArrayList<>(); if (activityInfo != null) { activities.add(activityInfo); } if (task != null) { task.forAllActivities((r) -> { activities.add(r.info); }); } if (!displayContent.mDwpcHelper.canContainActivities(activities)) { return false; } } return true; } Loading
services/core/java/com/android/server/wm/DisplayContent.java +10 −11 Original line number Diff line number Diff line Loading @@ -222,7 +222,6 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManager.DisplayImePolicy; import android.view.WindowManagerPolicyConstants.PointerEventListener; import android.window.DisplayWindowPolicyController; import android.window.IDisplayAreaOrganizer; import android.window.TransitionRequestInfo; Loading Loading @@ -698,12 +697,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp boolean mDontMoveToTop; /** * The policy controller of the windows that can be displayed on the virtual display. * The helper of policy controller. * * @see DisplayWindowPolicyController * @see DisplayWindowPolicyControllerHelper */ @Nullable DisplayWindowPolicyController mDisplayWindowPolicyController; DisplayWindowPolicyControllerHelper mDwpcHelper; private final Consumer<WindowState> mUpdateWindowsForAnimator = w -> { WindowStateAnimator winAnimator = w.mWinAnimator; Loading Loading @@ -2739,8 +2737,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mDisplayInfo.copyFrom(newDisplayInfo); } mDisplayWindowPolicyController = displayManagerInternal.getDisplayWindowPolicyController(mDisplayId); mDwpcHelper = new DisplayWindowPolicyControllerHelper(this); } updateBaseDisplayMetrics(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight, Loading Loading @@ -3453,10 +3450,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mInputMonitor.dump(pw, " "); pw.println(); mInsetsStateController.dump(prefix, pw); if (mDisplayWindowPolicyController != null) { pw.println(); mDisplayWindowPolicyController.dump(prefix, pw); } mDwpcHelper.dump(prefix, pw); } @Override Loading Loading @@ -3684,6 +3678,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return true; } /** Update the top activity and the uids of non-finishing activity */ void onRunningActivityChanged() { mDwpcHelper.onRunningActivityChanged(); } /** Called when the focused {@link TaskDisplayArea} on this display may have changed. */ void onLastFocusedTaskDisplayAreaChanged(@Nullable TaskDisplayArea taskDisplayArea) { // Only record the TaskDisplayArea that handles orientation request. Loading