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

Commit 1df5eb01 authored by Wale Ogunwale's avatar Wale Ogunwale Committed by Android (Google) Code Review
Browse files

Merge "Add TestApi interfaces for window organizers" into rvc-dev

parents a56084ea adf116ec
Loading
Loading
Loading
Loading
+72 −0
Original line number Diff line number Diff line
@@ -5158,3 +5158,75 @@ package android.widget {

}

package android.window {

  public class DisplayAreaOrganizer extends android.window.WindowOrganizer {
    ctor public DisplayAreaOrganizer();
    method public void onDisplayAreaAppeared(@NonNull android.window.WindowContainerToken);
    method public void onDisplayAreaVanished(@NonNull android.window.WindowContainerToken);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void registerOrganizer(int);
    field public static final int FEATURE_ROOT = 0; // 0x0
    field public static final int FEATURE_SYSTEM_FIRST = 0; // 0x0
    field public static final int FEATURE_SYSTEM_LAST = 10000; // 0x2710
    field public static final int FEATURE_TASK_CONTAINER = 1; // 0x1
    field public static final int FEATURE_UNDEFINED = -1; // 0xffffffff
    field public static final int FEATURE_VENDOR_FIRST = 10001; // 0x2711
    field public static final int FEATURE_WINDOW_TOKENS = 2; // 0x2
  }

  public class TaskOrganizer extends android.window.WindowOrganizer {
    ctor public TaskOrganizer();
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static android.app.ActivityManager.RunningTaskInfo createRootTask(int, int);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static boolean deleteRootTask(@NonNull android.window.WindowContainerToken);
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static java.util.List<android.app.ActivityManager.RunningTaskInfo> getChildTasks(@NonNull android.window.WindowContainerToken, @NonNull int[]);
    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 public void onBackPressedOnTaskRoot(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void registerOrganizer(int);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void setInterceptBackPressedOnTaskRoot(boolean);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static void setLaunchRoot(int, @NonNull android.window.WindowContainerToken);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void unregisterOrganizer();
  }

  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;
  }

  public final class WindowContainerTransaction implements android.os.Parcelable {
    ctor public WindowContainerTransaction();
    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 scheduleFinishEnterPip(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
    method @NonNull public android.window.WindowContainerTransaction setActivityWindowingMode(@NonNull android.window.WindowContainerToken, int);
    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 setFocusable(@NonNull android.window.WindowContainerToken, boolean);
    method @NonNull public android.window.WindowContainerTransaction setHidden(@NonNull android.window.WindowContainerToken, boolean);
    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 public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.window.WindowContainerTransaction> CREATOR;
  }

  public abstract class WindowContainerTransactionCallback {
    ctor public WindowContainerTransactionCallback();
    method public abstract void onTransactionReady(int, @NonNull android.view.SurfaceControl.Transaction);
  }

  public class WindowOrganizer {
    ctor public WindowOrganizer();
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public int applySyncTransaction(@NonNull android.window.WindowContainerTransaction, @NonNull android.window.WindowContainerTransactionCallback);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static void applyTransaction(@NonNull android.window.WindowContainerTransaction);
  }

}
+4 −4
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ import android.util.ArrayMap;
import android.util.DisplayMetrics;
import android.util.Singleton;
import android.util.Size;
import android.window.IWindowContainer;
import android.window.WindowContainerToken;
import android.view.Surface;

import com.android.internal.app.LocalePicker;
@@ -2759,7 +2759,7 @@ public class ActivityManager {
        // Index of the stack in the display's stack list, can be used for comparison of stack order
        @UnsupportedAppUsage
        public int position;
        public IWindowContainer stackToken;
        public WindowContainerToken stackToken;
        /**
         * The full configuration the stack is currently running in.
         * @hide
@@ -2793,7 +2793,7 @@ public class ActivityManager {
            dest.writeInt(userId);
            dest.writeInt(visible ? 1 : 0);
            dest.writeInt(position);
            dest.writeStrongInterface(stackToken);
            stackToken.writeToParcel(dest, 0);
            if (topActivity != null) {
                dest.writeInt(1);
                topActivity.writeToParcel(dest, 0);
@@ -2825,7 +2825,7 @@ public class ActivityManager {
            userId = source.readInt();
            visible = source.readInt() > 0;
            position = source.readInt();
            stackToken = IWindowContainer.Stub.asInterface(source.readStrongBinder());
            stackToken = WindowContainerToken.CREATOR.createFromParcel(source);
            if (source.readInt() > 0) {
                topActivity = ComponentName.readFromParcel(source);
            }
+6 −3
Original line number Diff line number Diff line
@@ -42,6 +42,9 @@ import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.window.TaskEmbedder;
import android.window.TaskOrganizerTaskEmbedder;
import android.window.VirtualDisplayTaskEmbedder;

import dalvik.system.CloseGuard;

@@ -52,11 +55,11 @@ import dalvik.system.CloseGuard;
 * @hide
 */
@TestApi
public class ActivityView extends ViewGroup implements TaskEmbedder.Host {
public class ActivityView extends ViewGroup implements android.window.TaskEmbedder.Host {

    private static final String TAG = "ActivityView";

    private TaskEmbedder mTaskEmbedder;
    private android.window.TaskEmbedder mTaskEmbedder;

    private final SurfaceView mSurfaceView;
    private final SurfaceCallback mSurfaceCallback;
@@ -487,7 +490,7 @@ public class ActivityView extends ViewGroup implements TaskEmbedder.Host {

    /** @hide */
    @Override
    public void onTaskBackgroundColorChanged(TaskEmbedder ts, int bgColor) {
    public void onTaskBackgroundColorChanged(android.window.TaskEmbedder ts, int bgColor) {
        if (mSurfaceView != null) {
            mSurfaceView.setResizeBackgroundColor(bgColor);
        }
+4 −4
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ import android.content.res.Configuration;
import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log;
import android.window.IWindowContainer;
import android.window.WindowContainerToken;

/**
 * Stores information about a particular Task.
@@ -147,7 +147,7 @@ public class TaskInfo {
     * @hide
     */
    @NonNull
    public IWindowContainer token;
    public WindowContainerToken token;

    /**
     * The PictureInPictureParams for the Task, if set.
@@ -222,7 +222,7 @@ public class TaskInfo {
        supportsSplitScreenMultiWindow = source.readBoolean();
        resizeMode = source.readInt();
        configuration.readFromParcel(source);
        token = IWindowContainer.Stub.asInterface(source.readStrongBinder());
        token = WindowContainerToken.CREATOR.createFromParcel(source);
        topActivityType = source.readInt();
        pictureInPictureParams = source.readInt() != 0
                ? PictureInPictureParams.CREATOR.createFromParcel(source)
@@ -265,7 +265,7 @@ public class TaskInfo {
        dest.writeBoolean(supportsSplitScreenMultiWindow);
        dest.writeInt(resizeMode);
        configuration.writeToParcel(dest, flags);
        dest.writeStrongInterface(token);
        token.writeToParcel(dest, flags);
        dest.writeInt(topActivityType);
        if (pictureInPictureParams == null) {
            dest.writeInt(0);
+91 −0
Original line number 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.RequiresPermission;
import android.annotation.TestApi;
import android.os.RemoteException;
import android.util.Singleton;

/**
 * Interface for WindowManager to delegate control of display areas.
 * @hide
 */
@TestApi
public class DisplayAreaOrganizer extends WindowOrganizer {

    public static final int FEATURE_UNDEFINED = -1;
    public static final int FEATURE_SYSTEM_FIRST = 0;
    // The Root display area on a display
    public static final int FEATURE_ROOT = FEATURE_SYSTEM_FIRST;
    // Display area hosting the task container.
    public static final int FEATURE_TASK_CONTAINER = FEATURE_SYSTEM_FIRST + 1;
    // Display area hosting non-activity window tokens.
    public static final int FEATURE_WINDOW_TOKENS = FEATURE_SYSTEM_FIRST + 2;

    public static final int FEATURE_SYSTEM_LAST = 10_000;

    // Vendor specific display area definition can start with this value.
    public static final int FEATURE_VENDOR_FIRST = FEATURE_SYSTEM_LAST + 1;

    @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
    public void registerOrganizer(int displayAreaFeature) {
        try {
            getController().registerOrganizer(mInterface, displayAreaFeature);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    public void onDisplayAreaAppeared(@NonNull WindowContainerToken displayArea) {}

    public void onDisplayAreaVanished(@NonNull WindowContainerToken displayArea) {}


    private final IDisplayAreaOrganizer mInterface = new IDisplayAreaOrganizer.Stub() {

        @Override
        public void onDisplayAreaAppeared(@NonNull WindowContainerToken displayArea) {
            DisplayAreaOrganizer.this.onDisplayAreaAppeared(displayArea);
        }

        @Override
        public void onDisplayAreaVanished(@NonNull WindowContainerToken displayArea) {
            DisplayAreaOrganizer.this.onDisplayAreaVanished(displayArea);
        }
    };

    private static IDisplayAreaOrganizerController getController() {
        return IDisplayAreaOrganizerControllerSingleton.get();
    }

    private static final Singleton<IDisplayAreaOrganizerController>
            IDisplayAreaOrganizerControllerSingleton =
            new Singleton<IDisplayAreaOrganizerController>() {
                @Override
                protected IDisplayAreaOrganizerController create() {
                    try {
                        return getWindowOrganizerController()
                                .getDisplayAreaOrganizerController();
                    } catch (RemoteException e) {
                        return null;
                    }
                }
            };

}
Loading