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

Commit 7de50009 authored by chaviw's avatar chaviw
Browse files

Remove getLeash from WindowContainerToken

If the WindowContainer was revoked from a registered organizer, the
client could still call getLeash to system server and control the leash
for the WindowContainer. Instead, pass the leash back to the client in
onTaskAppeared and onDisplayAreaAppeared. Once the WindowContainer is
revoked from the client, the leash will reference the old
WindowContainer SurfaceControl and will not be able to control the
WindowContainer anymore.

Test: Split screen
Test: DisplayAreaOrganizerTest
Test: WindowOrganizerTest
Bug: 154558563
Change-Id: I1f6eb987a2a3fecfef912a3009ee52989c85ff4b
parent da7b3c28
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -5283,7 +5283,7 @@ package android.window {

  public class DisplayAreaOrganizer extends android.window.WindowOrganizer {
    ctor public DisplayAreaOrganizer();
    method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo);
    method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo, @NonNull android.view.SurfaceControl);
    method public void onDisplayAreaVanished(@NonNull android.window.DisplayAreaInfo);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void registerOrganizer(int);
    field public static final int FEATURE_DEFAULT_TASK_CONTAINER = 1; // 0x1
@@ -5303,7 +5303,7 @@ package android.window {
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static android.window.WindowContainerToken getImeTarget(int);
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static java.util.List<android.app.ActivityManager.RunningTaskInfo> getRootTasks(int, @NonNull int[]);
    method @BinderThread public void onBackPressedOnTaskRoot(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl);
    method @BinderThread public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method @BinderThread public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public final void registerOrganizer(int);
@@ -5314,7 +5314,6 @@ package android.window {

  public final class WindowContainerToken implements android.os.Parcelable {
    method public int describeContents();
    method @Nullable public android.view.SurfaceControl getLeash();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.window.WindowContainerToken> CREATOR;
  }
+6 −3
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.annotation.RequiresPermission;
import android.annotation.TestApi;
import android.os.RemoteException;
import android.util.Singleton;
import android.view.SurfaceControl;

/**
 * Interface for WindowManager to delegate control of display areas.
@@ -64,7 +65,8 @@ public class DisplayAreaOrganizer extends WindowOrganizer {
        }
    }

    public void onDisplayAreaAppeared(@NonNull DisplayAreaInfo displayAreaInfo) {}
    public void onDisplayAreaAppeared(@NonNull DisplayAreaInfo displayAreaInfo,
            @NonNull SurfaceControl leash) {}

    public void onDisplayAreaVanished(@NonNull DisplayAreaInfo displayAreaInfo) {}

@@ -76,8 +78,9 @@ public class DisplayAreaOrganizer extends WindowOrganizer {
    private final IDisplayAreaOrganizer mInterface = new IDisplayAreaOrganizer.Stub() {

        @Override
        public void onDisplayAreaAppeared(@NonNull DisplayAreaInfo displayAreaInfo) {
            DisplayAreaOrganizer.this.onDisplayAreaAppeared(displayAreaInfo);
        public void onDisplayAreaAppeared(@NonNull DisplayAreaInfo displayAreaInfo,
                @NonNull SurfaceControl leash) {
            DisplayAreaOrganizer.this.onDisplayAreaAppeared(displayAreaInfo, leash);
        }

        @Override
+2 −1
Original line number Diff line number Diff line
@@ -17,13 +17,14 @@
package android.window;

import android.window.DisplayAreaInfo;
import android.view.SurfaceControl;

/**
 * Interface for WindowManager to delegate control of display areas.
 * {@hide}
 */
oneway interface IDisplayAreaOrganizer {
    void onDisplayAreaAppeared(in DisplayAreaInfo displayAreaInfo);
    void onDisplayAreaAppeared(in DisplayAreaInfo displayAreaInfo, in SurfaceControl leash);
    void onDisplayAreaVanished(in DisplayAreaInfo displayAreaInfo);
    void onDisplayAreaInfoChanged(in DisplayAreaInfo displayAreaInfo);
}
+8 −1
Original line number Diff line number Diff line
@@ -25,7 +25,14 @@ import android.window.WindowContainerToken;
 * {@hide}
 */
oneway interface ITaskOrganizer {
    void onTaskAppeared(in ActivityManager.RunningTaskInfo taskInfo);
    /**
     * A callback when the Task is available for the registered organizer. The client is responsible
     * for releasing the SurfaceControl in the callback.
     *
     * @param taskInfo The information about the Task that's available
     * @param leash A persistent leash for this Task.
     */
    void onTaskAppeared(in ActivityManager.RunningTaskInfo taskInfo, in SurfaceControl leash);
    void onTaskVanished(in ActivityManager.RunningTaskInfo taskInfo);

    /**
+0 −5
Original line number Diff line number Diff line
@@ -24,9 +24,4 @@ import android.view.SurfaceControl;
 * @hide
 */
interface IWindowContainerToken {

    /**
     * Gets a persistent leash for this container or {@code null}.
     */
    SurfaceControl getLeash();
}
Loading