RemoteAnimationTarget.java revision 593e9567fdc2a7b5c7e06c12c9af4b32f4216d85
133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi/*
233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * Copyright (C) 2018 The Android Open Source Project
333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi *
433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License");
533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * you may not use this file except in compliance with the License.
633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * You may obtain a copy of the License at
733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi *
833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi *      http://www.apache.org/licenses/LICENSE-2.0
933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi *
1033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * Unless required by applicable law or agreed to in writing, software
1133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS,
1233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * See the License for the specific language governing permissions and
1433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * limitations under the License
1533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi */
1633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
1733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggipackage android.view;
1833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
1933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport android.annotation.IntDef;
20e2d721781fc024cbd9a14929741e5b476242291fWinson Chungimport android.app.WindowConfiguration;
2133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport android.graphics.Point;
2233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport android.graphics.Rect;
2333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport android.os.Parcel;
2433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport android.os.Parcelable;
2533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
2633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport java.lang.annotation.Retention;
2733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport java.lang.annotation.RetentionPolicy;
2833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
2933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi/**
3033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * Describes an activity to be animated as part of a remote animation.
3133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi *
3233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * @hide
3333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi */
3433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggipublic class RemoteAnimationTarget implements Parcelable {
3533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
3633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
3733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The app is in the set of opening apps of this transition.
3833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
3933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public static final int MODE_OPENING = 0;
4033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
4133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
4233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The app is in the set of closing apps of this transition.
4333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
4433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public static final int MODE_CLOSING = 1;
4533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
4633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    @IntDef(prefix = { "MODE_" }, value = {
4733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi            MODE_OPENING,
4833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi            MODE_CLOSING
4933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    })
5033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    @Retention(RetentionPolicy.SOURCE)
5133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public @interface Mode {}
5233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
5333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
5433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The {@link Mode} to describe whether this app is opening or closing.
5533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
5633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final @Mode int mode;
5733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
5833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
5933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The id of the task this app belongs to.
6033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
6133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final int taskId;
6233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
6333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
6433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The {@link SurfaceControl} object to actually control the transform of the app.
6533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
6633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final SurfaceControl leash;
6733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
6833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
6933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * Whether the app is translucent and may reveal apps behind.
7033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
7133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final boolean isTranslucent;
7233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
7333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
7433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The clip rect window manager applies when clipping the app's main surface in screen space
7533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * coordinates. This is just a hint to the animation runner: If running a clip-rect animation,
7633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * anything that extends beyond these bounds will not have any effect. This implies that any
7733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * clip-rect animation should likely stop at these bounds.
7833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
7933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final Rect clipRect;
8033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
8133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
82584d652a1dba2b09975a1555c71ed339374faac7Winson Chung     * The insets of the main app window.
83584d652a1dba2b09975a1555c71ed339374faac7Winson Chung     */
84584d652a1dba2b09975a1555c71ed339374faac7Winson Chung    public final Rect contentInsets;
85584d652a1dba2b09975a1555c71ed339374faac7Winson Chung
86584d652a1dba2b09975a1555c71ed339374faac7Winson Chung    /**
8733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The index of the element in the tree in prefix order. This should be used for z-layering
8833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * to preserve original z-layer order in the hierarchy tree assuming no "boosting" needs to
8933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * happen.
9033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
9133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final int prefixOrderIndex;
9233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
9333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
9433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The source position of the app, in screen spaces coordinates. If the position of the leash
9533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * is modified from the controlling app, any animation transform needs to be offset by this
9633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * amount.
9733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
9833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final Point position;
9933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
10033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
10133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The bounds of the source container the app lives in, in screen space coordinates. If the crop
10233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * of the leash is modified from the controlling app, it needs to take the source container
10333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * bounds into account when calculating the crop.
10433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
10533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final Rect sourceContainerBounds;
10633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
107e2d721781fc024cbd9a14929741e5b476242291fWinson Chung    /**
108e2d721781fc024cbd9a14929741e5b476242291fWinson Chung     * The window configuration for the target.
109e2d721781fc024cbd9a14929741e5b476242291fWinson Chung     */
110e2d721781fc024cbd9a14929741e5b476242291fWinson Chung    public final WindowConfiguration windowConfiguration;
111e2d721781fc024cbd9a14929741e5b476242291fWinson Chung
112593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev    /**
113593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev     * Whether the task is not presented in Recents UI.
114593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev     */
115593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev    public boolean isNotInRecents;
116593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev
11733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public RemoteAnimationTarget(int taskId, int mode, SurfaceControl leash, boolean isTranslucent,
118584d652a1dba2b09975a1555c71ed339374faac7Winson Chung            Rect clipRect, Rect contentInsets, int prefixOrderIndex, Point position,
119593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev            Rect sourceContainerBounds, WindowConfiguration windowConfig, boolean isNotInRecents) {
12033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.mode = mode;
12133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.taskId = taskId;
12233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.leash = leash;
12333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.isTranslucent = isTranslucent;
12433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.clipRect = new Rect(clipRect);
125584d652a1dba2b09975a1555c71ed339374faac7Winson Chung        this.contentInsets = new Rect(contentInsets);
12633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.prefixOrderIndex = prefixOrderIndex;
12733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.position = new Point(position);
12833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.sourceContainerBounds = new Rect(sourceContainerBounds);
129e2d721781fc024cbd9a14929741e5b476242291fWinson Chung        this.windowConfiguration = windowConfig;
130593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev        this.isNotInRecents = isNotInRecents;
13133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    }
13233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
13333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public RemoteAnimationTarget(Parcel in) {
13433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        taskId = in.readInt();
13533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        mode = in.readInt();
13633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        leash = in.readParcelable(null);
13733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        isTranslucent = in.readBoolean();
13833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        clipRect = in.readParcelable(null);
139584d652a1dba2b09975a1555c71ed339374faac7Winson Chung        contentInsets = in.readParcelable(null);
14033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        prefixOrderIndex = in.readInt();
14133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        position = in.readParcelable(null);
14233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        sourceContainerBounds = in.readParcelable(null);
143e2d721781fc024cbd9a14929741e5b476242291fWinson Chung        windowConfiguration = in.readParcelable(null);
144593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev        isNotInRecents = in.readBoolean();
14533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    }
14633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
14733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    @Override
14833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public int describeContents() {
14933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        return 0;
15033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    }
15133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
15233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    @Override
15333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public void writeToParcel(Parcel dest, int flags) {
15433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeInt(taskId);
15533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeInt(mode);
15633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeParcelable(leash, 0 /* flags */);
15733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeBoolean(isTranslucent);
15833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeParcelable(clipRect, 0 /* flags */);
159584d652a1dba2b09975a1555c71ed339374faac7Winson Chung        dest.writeParcelable(contentInsets, 0 /* flags */);
16033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeInt(prefixOrderIndex);
16133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeParcelable(position, 0 /* flags */);
16233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeParcelable(sourceContainerBounds, 0 /* flags */);
163e2d721781fc024cbd9a14929741e5b476242291fWinson Chung        dest.writeParcelable(windowConfiguration, 0 /* flags */);
164593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev        dest.writeBoolean(isNotInRecents);
16533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    }
16633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
16733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public static final Creator<RemoteAnimationTarget> CREATOR
16833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi            = new Creator<RemoteAnimationTarget>() {
16933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        public RemoteAnimationTarget createFromParcel(Parcel in) {
17033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi            return new RemoteAnimationTarget(in);
17133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        }
17233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
17333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        public RemoteAnimationTarget[] newArray(int size) {
17433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi            return new RemoteAnimationTarget[size];
17533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        }
17633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    };
17733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi}
178