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

Commit 3f4c002e authored by Winson Chung's avatar Winson Chung
Browse files

Return the existing tasks when registering an organizer

- Existing tasks for supported windowing modes are returned when
  registering the organizer and the organizer will not receive
  onTaskAppeared() for these tasks.  For now, the shell task
  organizer will keep these tasks for reporting task appeared when
  individual components add listeners for their windowing modes.
- Fixed some tests now that we organize fullscreen tasks

Bug: 162028888
Test: atest WindowOrganizerTests
Test: atest ShellTaskOrganizerTests
Change-Id: Iedc5f58fbfa819e753a5dcea7a8eb9dee8b6843b
parent dc6aaed8
Loading
Loading
Loading
Loading
+11 −2
Original line number Original line Diff line number Diff line
@@ -5784,6 +5784,15 @@ package android.window {
    field public static final int FEATURE_WINDOW_TOKENS = 2; // 0x2
    field public static final int FEATURE_WINDOW_TOKENS = 2; // 0x2
  }
  }


  public final class TaskAppearedInfo implements android.os.Parcelable {
    ctor public TaskAppearedInfo(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl);
    method public int describeContents();
    method @NonNull public android.view.SurfaceControl getLeash();
    method @NonNull public android.app.ActivityManager.RunningTaskInfo getTaskInfo();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskAppearedInfo> CREATOR;
  }

  public class TaskOrganizer extends android.window.WindowOrganizer {
  public class TaskOrganizer extends android.window.WindowOrganizer {
    ctor public TaskOrganizer();
    ctor public TaskOrganizer();
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.app.ActivityManager.RunningTaskInfo createRootTask(int, int);
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.app.ActivityManager.RunningTaskInfo createRootTask(int, int);
@@ -5795,10 +5804,10 @@ package android.window {
    method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl);
    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 onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method @BinderThread public void onTaskVanished(@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();
    method @CallSuper @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public java.util.List<android.window.TaskAppearedInfo> registerOrganizer();
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void setInterceptBackPressedOnTaskRoot(@NonNull android.window.WindowContainerToken, boolean);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void setInterceptBackPressedOnTaskRoot(@NonNull android.window.WindowContainerToken, boolean);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void setLaunchRoot(int, @NonNull android.window.WindowContainerToken);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void setLaunchRoot(int, @NonNull android.window.WindowContainerToken);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public final void unregisterOrganizer();
    method @CallSuper @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void unregisterOrganizer();
  }
  }


  public final class WindowContainerToken implements android.os.Parcelable {
  public final class WindowContainerToken implements android.os.Parcelable {
+2 −1
Original line number Original line Diff line number Diff line
@@ -165,7 +165,8 @@ interface IActivityTaskManager {
    int getTaskForActivity(in IBinder token, in boolean onlyRoot);
    int getTaskForActivity(in IBinder token, in boolean onlyRoot);
    /** Finish all activities that were started for result from the specified activity. */
    /** Finish all activities that were started for result from the specified activity. */
    void finishSubActivity(in IBinder token, in String resultWho, int requestCode);
    void finishSubActivity(in IBinder token, in String resultWho, int requestCode);
    ParceledListSlice getRecentTasks(int maxNum, int flags, int userId);
    ParceledListSlice<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags,
            int userId);
    boolean willActivityBeVisible(in IBinder token);
    boolean willActivityBeVisible(in IBinder token);
    void setRequestedOrientation(in IBinder token, int requestedOrientation);
    void setRequestedOrientation(in IBinder token, int requestedOrientation);
    int getRequestedOrientation(in IBinder token);
    int getRequestedOrientation(in IBinder token);
+6 −1
Original line number Original line Diff line number Diff line
@@ -17,7 +17,9 @@
package android.window;
package android.window;


import android.app.ActivityManager;
import android.app.ActivityManager;
import android.content.pm.ParceledListSlice;
import android.window.ITaskOrganizer;
import android.window.ITaskOrganizer;
import android.window.TaskAppearedInfo;
import android.window.WindowContainerToken;
import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;
import android.window.WindowContainerTransaction;


@@ -26,8 +28,11 @@ interface ITaskOrganizerController {


    /**
    /**
     * Register a TaskOrganizer to manage all the tasks with supported windowing modes.
     * Register a TaskOrganizer to manage all the tasks with supported windowing modes.
     *
     * @return a list of the tasks that should be managed by the organizer, not including tasks
     *         created via {@link #createRootTask}.
     */
     */
    void registerTaskOrganizer(ITaskOrganizer organizer);
    ParceledListSlice<TaskAppearedInfo> registerTaskOrganizer(ITaskOrganizer organizer);


    /**
    /**
     * Unregisters a previously registered task organizer.
     * Unregisters a previously registered task organizer.
+24 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.window;

/**
 * Data object for the task info provided when a task is presented to an organizer.
 * @hide
 */
parcelable TaskAppearedInfo;
+86 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.window;

import android.annotation.NonNull;
import android.annotation.TestApi;
import android.app.ActivityManager.RunningTaskInfo;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.SurfaceControl;

/**
 * Data object for the task info provided when a task is presented to an organizer.
 * @hide
 */
@TestApi
public final class TaskAppearedInfo implements Parcelable {

    @NonNull
    private final RunningTaskInfo mTaskInfo;

    @NonNull
    private final SurfaceControl mLeash;

    @NonNull
    public static final Creator<TaskAppearedInfo> CREATOR = new Creator<TaskAppearedInfo>() {
        @Override
        public TaskAppearedInfo createFromParcel(Parcel source) {
            final RunningTaskInfo taskInfo = source.readTypedObject(RunningTaskInfo.CREATOR);
            final SurfaceControl leash = source.readTypedObject(SurfaceControl.CREATOR);
            return new TaskAppearedInfo(taskInfo, leash);
        }

        @Override
        public TaskAppearedInfo[] newArray(int size) {
            return new TaskAppearedInfo[size];
        }

    };

    public TaskAppearedInfo(@NonNull RunningTaskInfo taskInfo, @NonNull SurfaceControl leash) {
        mTaskInfo = taskInfo;
        mLeash = leash;
    }

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeTypedObject(mTaskInfo, flags);
        dest.writeTypedObject(mLeash, flags);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * @return the task info.
     */
    @NonNull
    public RunningTaskInfo getTaskInfo() {
        return mTaskInfo;
    }

    /**
     * @return the leash for the task.
     */
    @NonNull
    public SurfaceControl getLeash() {
        return mLeash;
    }
}
Loading