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

Commit 9dfcf46a authored by Charles Chen's avatar Charles Chen
Browse files

Promote TaskFragment APIs to TestAPi

... to verify their behaviors in CTS
Also wraps ITaskFragmentOrganizer to TaskFragmentOrganizerToken
because we cannot make .aidl a TestApi.

Test: presubmit
Bug: 192442647

Change-Id: I848a33340449189af7d9d66a6468a9e397a0f53a
parent 9119cb96
Loading
Loading
Loading
Loading
+59 −0
Original line number Diff line number Diff line
@@ -3202,6 +3202,59 @@ package android.window {
    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskAppearedInfo> CREATOR;
  }

  public final class TaskFragmentAppearedInfo implements android.os.Parcelable {
    method @NonNull public android.view.SurfaceControl getLeash();
    method @NonNull public android.window.TaskFragmentInfo getTaskFragmentInfo();
    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentAppearedInfo> CREATOR;
  }

  public final class TaskFragmentCreationParams implements android.os.Parcelable {
    method @NonNull public android.os.IBinder getFragmentToken();
    method @NonNull public android.graphics.Rect getInitialBounds();
    method @NonNull public android.window.TaskFragmentOrganizerToken getOrganizer();
    method @NonNull public android.os.IBinder getOwnerToken();
    method public int getWindowingMode();
    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentCreationParams> CREATOR;
  }

  public static final class TaskFragmentCreationParams.Builder {
    ctor public TaskFragmentCreationParams.Builder(@NonNull android.window.TaskFragmentOrganizerToken, @NonNull android.os.IBinder, @NonNull android.os.IBinder);
    method @NonNull public android.window.TaskFragmentCreationParams build();
    method @NonNull public android.window.TaskFragmentCreationParams.Builder setInitialBounds(@NonNull android.graphics.Rect);
    method @NonNull public android.window.TaskFragmentCreationParams.Builder setWindowingMode(int);
  }

  public final class TaskFragmentInfo implements android.os.Parcelable {
    method public boolean equalsForTaskFragmentOrganizer(@Nullable android.window.TaskFragmentInfo);
    method @NonNull public java.util.List<android.os.IBinder> getActivities();
    method @NonNull public android.content.res.Configuration getConfiguration();
    method @NonNull public android.os.IBinder getFragmentToken();
    method @NonNull public android.graphics.Point getPositionInParent();
    method @NonNull public android.window.WindowContainerToken getToken();
    method public int getWindowingMode();
    method public boolean hasRunningActivity();
    method public boolean isEmpty();
    method public boolean isVisible();
    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentInfo> CREATOR;
  }

  public class TaskFragmentOrganizer extends android.window.WindowOrganizer {
    ctor public TaskFragmentOrganizer(@NonNull java.util.concurrent.Executor);
    method @NonNull public java.util.concurrent.Executor getExecutor();
    method @NonNull public android.window.TaskFragmentOrganizerToken getOrganizerToken();
    method public void onTaskFragmentAppeared(@NonNull android.window.TaskFragmentAppearedInfo);
    method public void onTaskFragmentError(@NonNull android.os.IBinder, @NonNull Throwable);
    method public void onTaskFragmentInfoChanged(@NonNull android.window.TaskFragmentInfo);
    method public void onTaskFragmentParentInfoChanged(@NonNull android.os.IBinder, @NonNull android.content.res.Configuration);
    method public void onTaskFragmentVanished(@NonNull android.window.TaskFragmentInfo);
    method @CallSuper public void registerOrganizer();
    method @CallSuper public void unregisterOrganizer();
  }

  public final class TaskFragmentOrganizerToken implements android.os.Parcelable {
    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentOrganizerToken> CREATOR;
  }

  public class TaskOrganizer extends android.window.WindowOrganizer {
    ctor public TaskOrganizer();
    method @BinderThread public void addStartingWindow(@NonNull android.window.StartingWindowInfo, @NonNull android.os.IBinder);
@@ -3230,9 +3283,13 @@ package android.window {

  public final class WindowContainerTransaction implements android.os.Parcelable {
    ctor public WindowContainerTransaction();
    method @NonNull public android.window.WindowContainerTransaction createTaskFragment(@NonNull android.window.TaskFragmentCreationParams);
    method @NonNull public android.window.WindowContainerTransaction deleteTaskFragment(@NonNull android.window.WindowContainerToken);
    method public int describeContents();
    method @NonNull public android.window.WindowContainerTransaction reorder(@NonNull android.window.WindowContainerToken, boolean);
    method @NonNull public android.window.WindowContainerTransaction reparent(@NonNull android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken, boolean);
    method @NonNull public android.window.WindowContainerTransaction reparentActivityToTaskFragment(@NonNull android.os.IBinder, @NonNull android.os.IBinder);
    method @NonNull public android.window.WindowContainerTransaction reparentChildren(@NonNull android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken);
    method @NonNull public android.window.WindowContainerTransaction reparentTasks(@Nullable android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken, @Nullable int[], @Nullable int[], boolean);
    method @NonNull public android.window.WindowContainerTransaction scheduleFinishEnterPip(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
    method @NonNull public android.window.WindowContainerTransaction setActivityWindowingMode(@NonNull android.window.WindowContainerToken, int);
@@ -3240,12 +3297,14 @@ package android.window {
    method @NonNull public android.window.WindowContainerTransaction setAppBounds(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
    method @NonNull public android.window.WindowContainerTransaction setBounds(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
    method @NonNull public android.window.WindowContainerTransaction setBoundsChangeTransaction(@NonNull android.window.WindowContainerToken, @NonNull android.view.SurfaceControl.Transaction);
    method @NonNull public android.window.WindowContainerTransaction setErrorCallbackToken(@NonNull android.os.IBinder);
    method @NonNull public android.window.WindowContainerTransaction setFocusable(@NonNull android.window.WindowContainerToken, boolean);
    method @NonNull public android.window.WindowContainerTransaction setHidden(@NonNull android.window.WindowContainerToken, boolean);
    method @NonNull public android.window.WindowContainerTransaction setLaunchRoot(@NonNull android.window.WindowContainerToken, @Nullable int[], @Nullable int[]);
    method @NonNull public android.window.WindowContainerTransaction setScreenSizeDp(@NonNull android.window.WindowContainerToken, int, int);
    method @NonNull public android.window.WindowContainerTransaction setSmallestScreenWidthDp(@NonNull android.window.WindowContainerToken, int);
    method @NonNull public android.window.WindowContainerTransaction setWindowingMode(@NonNull android.window.WindowContainerToken, int);
    method @NonNull public android.window.WindowContainerTransaction startActivityInTaskFragment(@NonNull android.os.IBinder, @NonNull android.os.IBinder, @NonNull android.content.Intent, @Nullable android.os.Bundle);
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.window.WindowContainerTransaction> CREATOR;
  }
+7 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.window;

import android.annotation.NonNull;
import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.SurfaceControl;
@@ -25,6 +26,7 @@ import android.view.SurfaceControl;
 * Data object for the TaskFragment info provided when a TaskFragment is presented to an organizer.
 * @hide
 */
@TestApi
public final class TaskFragmentAppearedInfo implements Parcelable {

    @NonNull
@@ -33,16 +35,19 @@ public final class TaskFragmentAppearedInfo implements Parcelable {
    @NonNull
    private final SurfaceControl mLeash;

    /** @hide */
    public TaskFragmentAppearedInfo(
            @NonNull TaskFragmentInfo taskFragmentInfo, @NonNull SurfaceControl leash) {
        mTaskFragmentInfo = taskFragmentInfo;
        mLeash = leash;
    }

    @NonNull
    public TaskFragmentInfo getTaskFragmentInfo() {
        return mTaskFragmentInfo;
    }

    @NonNull
    public SurfaceControl getLeash() {
        return mLeash;
    }
@@ -52,6 +57,7 @@ public final class TaskFragmentAppearedInfo implements Parcelable {
        mLeash = in.readTypedObject(SurfaceControl.CREATOR);
    }

    /** @hide */
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeTypedObject(mTaskFragmentInfo, flags);
@@ -79,6 +85,7 @@ public final class TaskFragmentAppearedInfo implements Parcelable {
                + "}";
    }

    /** @hide */
    @Override
    public int describeContents() {
        return 0;
+21 −10
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.app.WindowConfiguration.WindowingMode;

import android.annotation.NonNull;
import android.annotation.TestApi;
import android.graphics.Rect;
import android.os.IBinder;
import android.os.Parcel;
@@ -29,11 +30,12 @@ import android.os.Parcelable;
 * Data object for options to create TaskFragment with.
 * @hide
 */
@TestApi
public final class TaskFragmentCreationParams implements Parcelable {

    /** The organizer that will organize this TaskFragment. */
    @NonNull
    private final ITaskFragmentOrganizer mOrganizer;
    private final TaskFragmentOrganizerToken mOrganizer;

    /**
     * Unique token assigned from the client organizer to identify the {@link TaskFragmentInfo} when
@@ -58,25 +60,29 @@ public final class TaskFragmentCreationParams implements Parcelable {
    private int mWindowingMode = WINDOWING_MODE_UNDEFINED;

    private TaskFragmentCreationParams(
            @NonNull ITaskFragmentOrganizer organizer, @NonNull IBinder fragmentToken,
            @NonNull IBinder ownerToken) {
            @NonNull TaskFragmentOrganizerToken organizer,
            @NonNull IBinder fragmentToken, @NonNull IBinder ownerToken) {
        mOrganizer = organizer;
        mFragmentToken = fragmentToken;
        mOwnerToken = ownerToken;
    }

    public ITaskFragmentOrganizer getOrganizer() {
    @NonNull
    public TaskFragmentOrganizerToken getOrganizer() {
        return mOrganizer;
    }

    @NonNull
    public IBinder getFragmentToken() {
        return mFragmentToken;
    }

    @NonNull
    public IBinder getOwnerToken() {
        return mOwnerToken;
    }

    @NonNull
    public Rect getInitialBounds() {
        return mInitialBounds;
    }
@@ -87,16 +93,17 @@ public final class TaskFragmentCreationParams implements Parcelable {
    }

    private TaskFragmentCreationParams(Parcel in) {
        mOrganizer = ITaskFragmentOrganizer.Stub.asInterface(in.readStrongBinder());
        mOrganizer = TaskFragmentOrganizerToken.CREATOR.createFromParcel(in);
        mFragmentToken = in.readStrongBinder();
        mOwnerToken = in.readStrongBinder();
        mInitialBounds.readFromParcel(in);
        mWindowingMode = in.readInt();
    }

    /** @hide */
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeStrongInterface(mOrganizer);
        mOrganizer.writeToParcel(dest, flags);
        dest.writeStrongBinder(mFragmentToken);
        dest.writeStrongBinder(mOwnerToken);
        mInitialBounds.writeToParcel(dest, flags);
@@ -128,16 +135,17 @@ public final class TaskFragmentCreationParams implements Parcelable {
                + "}";
    }

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

    /** Builder to construct the options to create TaskFragment with. */
    public static class Builder {
    public static final class Builder {

        @NonNull
        private final ITaskFragmentOrganizer mOrganizer;
        private final TaskFragmentOrganizerToken mOrganizer;

        @NonNull
        private final IBinder mFragmentToken;
@@ -151,26 +159,29 @@ public final class TaskFragmentCreationParams implements Parcelable {
        @WindowingMode
        private int mWindowingMode = WINDOWING_MODE_UNDEFINED;

        public Builder(@NonNull ITaskFragmentOrganizer organizer, @NonNull IBinder fragmentToken,
                @NonNull IBinder ownerToken) {
        public Builder(@NonNull TaskFragmentOrganizerToken organizer,
                @NonNull IBinder fragmentToken, @NonNull IBinder ownerToken) {
            mOrganizer = organizer;
            mFragmentToken = fragmentToken;
            mOwnerToken = ownerToken;
        }

        /** Sets the initial bounds for the TaskFragment. */
        @NonNull
        public Builder setInitialBounds(@NonNull Rect bounds) {
            mInitialBounds.set(bounds);
            return this;
        }

        /** Sets the initial windowing mode for the TaskFragment. */
        @NonNull
        public Builder setWindowingMode(@WindowingMode int windowingMode) {
            mWindowingMode = windowingMode;
            return this;
        }

        /** Constructs the options to create TaskFragment with. */
        @NonNull
        public TaskFragmentCreationParams build() {
            final TaskFragmentCreationParams result = new TaskFragmentCreationParams(
                    mOrganizer, mFragmentToken, mOwnerToken);
+10 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static java.util.Objects.requireNonNull;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.content.res.Configuration;
import android.graphics.Point;
import android.os.IBinder;
@@ -35,6 +36,7 @@ import java.util.List;
 * Stores information about a particular TaskFragment.
 * @hide
 */
@TestApi
public final class TaskFragmentInfo implements Parcelable {

    /**
@@ -63,11 +65,13 @@ public final class TaskFragmentInfo implements Parcelable {
     * List of Activity tokens that are children of this TaskFragment. It only contains Activities
     * that belong to the organizer process for security.
     */
    @NonNull
    private final List<IBinder> mActivities = new ArrayList<>();

    /** Relative position of the fragment's top left corner in the parent container. */
    private final Point mPositionInParent;

    /** @hide */
    public TaskFragmentInfo(
            @NonNull IBinder fragmentToken, @NonNull WindowContainerToken token,
            @NonNull Configuration configuration, boolean isEmpty, boolean hasRunningActivity,
@@ -82,14 +86,17 @@ public final class TaskFragmentInfo implements Parcelable {
        mPositionInParent = requireNonNull(positionInParent);
    }

    @NonNull
    public IBinder getFragmentToken() {
        return mFragmentToken;
    }

    @NonNull
    public WindowContainerToken getToken() {
        return mToken;
    }

    @NonNull
    public Configuration getConfiguration() {
        return mConfiguration;
    }
@@ -106,6 +113,7 @@ public final class TaskFragmentInfo implements Parcelable {
        return mIsVisible;
    }

    @NonNull
    public List<IBinder> getActivities() {
        return mActivities;
    }
@@ -151,6 +159,7 @@ public final class TaskFragmentInfo implements Parcelable {
        mPositionInParent = requireNonNull(in.readTypedObject(Point.CREATOR));
    }

    /** @hide */
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeStrongBinder(mFragmentToken);
@@ -189,6 +198,7 @@ public final class TaskFragmentInfo implements Parcelable {
                + "}";
    }

    /** @hide */
    @Override
    public int describeContents() {
        return 0;
+11 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.window;

import android.annotation.CallSuper;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.IBinder;
@@ -26,9 +27,10 @@ import android.os.RemoteException;
import java.util.concurrent.Executor;

/**
 * Interface for WindowManager to delegate control of {@link com.android.server.wm.TaskFragment}.
 * Interface for WindowManager to delegate control of {@code TaskFragment}.
 * @hide
 */
@TestApi
public class TaskFragmentOrganizer extends WindowOrganizer {

    /**
@@ -39,6 +41,7 @@ public class TaskFragmentOrganizer extends WindowOrganizer {
    /**
     * Creates a {@link Bundle} with an exception that can be passed to
     * {@link ITaskFragmentOrganizer#onTaskFragmentError}.
     * @hide
     */
    public static Bundle putExceptionInBundle(@NonNull Throwable exception) {
        final Bundle exceptionBundle = new Bundle();
@@ -126,6 +129,8 @@ public class TaskFragmentOrganizer extends WindowOrganizer {
        super.applyTransaction(t);
    }

    // Suppress the lint because it is not a registration method.
    @SuppressWarnings("ExecutorRegistration")
    @Override
    public int applySyncTransaction(@NonNull WindowContainerTransaction t,
            @NonNull WindowContainerTransactionCallback callback) {
@@ -169,8 +174,11 @@ public class TaskFragmentOrganizer extends WindowOrganizer {
        }
    };

    public ITaskFragmentOrganizer getIOrganizer() {
        return mInterface;
    private final TaskFragmentOrganizerToken mToken = new TaskFragmentOrganizerToken(mInterface);

    @NonNull
    public TaskFragmentOrganizerToken getOrganizerToken() {
        return mToken;
    }

    private ITaskFragmentOrganizerController getController() {
Loading