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