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
19f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport static android.app.RemoteAnimationTargetProto.CLIP_RECT;
20f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport static android.app.RemoteAnimationTargetProto.CONTENT_INSETS;
21f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport static android.app.RemoteAnimationTargetProto.IS_TRANSLUCENT;
22f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport static android.app.RemoteAnimationTargetProto.LEASH;
23f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport static android.app.RemoteAnimationTargetProto.MODE;
24f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport static android.app.RemoteAnimationTargetProto.POSITION;
25f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport static android.app.RemoteAnimationTargetProto.PREFIX_ORDER_INDEX;
26f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport static android.app.RemoteAnimationTargetProto.SOURCE_CONTAINER_BOUNDS;
27f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport static android.app.RemoteAnimationTargetProto.TASK_ID;
28f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport static android.app.RemoteAnimationTargetProto.WINDOW_CONFIGURATION;
29f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi
3033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport android.annotation.IntDef;
31e2d721781fc024cbd9a14929741e5b476242291fWinson Chungimport android.app.WindowConfiguration;
3233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport android.graphics.Point;
3333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport android.graphics.Rect;
3433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport android.os.Parcel;
3533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport android.os.Parcelable;
36f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport android.util.proto.ProtoOutputStream;
3733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
38f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggiimport java.io.PrintWriter;
3933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport java.lang.annotation.Retention;
4033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggiimport java.lang.annotation.RetentionPolicy;
4133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
4233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi/**
4333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * Describes an activity to be animated as part of a remote animation.
4433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi *
4533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi * @hide
4633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi */
4733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggipublic class RemoteAnimationTarget implements Parcelable {
4833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
4933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
5033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The app is in the set of opening apps of this transition.
5133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
5233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public static final int MODE_OPENING = 0;
5333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
5433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
5533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The app is in the set of closing apps of this transition.
5633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
5733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public static final int MODE_CLOSING = 1;
5833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
5933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    @IntDef(prefix = { "MODE_" }, value = {
6033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi            MODE_OPENING,
6133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi            MODE_CLOSING
6233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    })
6333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    @Retention(RetentionPolicy.SOURCE)
6433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public @interface Mode {}
6533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
6633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
6733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The {@link Mode} to describe whether this app is opening or closing.
6833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
6933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final @Mode int mode;
7033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
7133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
7233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The id of the task this app belongs to.
7333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
7433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final int taskId;
7533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
7633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
7733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The {@link SurfaceControl} object to actually control the transform of the app.
7833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
7933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final SurfaceControl leash;
8033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
8133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
8233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * Whether the app is translucent and may reveal apps behind.
8333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
8433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final boolean isTranslucent;
8533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
8633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
8733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The clip rect window manager applies when clipping the app's main surface in screen space
8833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * coordinates. This is just a hint to the animation runner: If running a clip-rect animation,
8933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * anything that extends beyond these bounds will not have any effect. This implies that any
9033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * clip-rect animation should likely stop at these bounds.
9133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
9233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final Rect clipRect;
9333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
9433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
95584d652a1dba2b09975a1555c71ed339374faac7Winson Chung     * The insets of the main app window.
96584d652a1dba2b09975a1555c71ed339374faac7Winson Chung     */
97584d652a1dba2b09975a1555c71ed339374faac7Winson Chung    public final Rect contentInsets;
98584d652a1dba2b09975a1555c71ed339374faac7Winson Chung
99584d652a1dba2b09975a1555c71ed339374faac7Winson Chung    /**
10033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The index of the element in the tree in prefix order. This should be used for z-layering
10133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * to preserve original z-layer order in the hierarchy tree assuming no "boosting" needs to
10233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * happen.
10333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
10433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final int prefixOrderIndex;
10533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
10633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
10733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The source position of the app, in screen spaces coordinates. If the position of the leash
10833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * is modified from the controlling app, any animation transform needs to be offset by this
10933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * amount.
11033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
11133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final Point position;
11233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
11333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    /**
11433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * The bounds of the source container the app lives in, in screen space coordinates. If the crop
11533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * of the leash is modified from the controlling app, it needs to take the source container
11633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     * bounds into account when calculating the crop.
11733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi     */
11833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public final Rect sourceContainerBounds;
11933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
120e2d721781fc024cbd9a14929741e5b476242291fWinson Chung    /**
121e2d721781fc024cbd9a14929741e5b476242291fWinson Chung     * The window configuration for the target.
122e2d721781fc024cbd9a14929741e5b476242291fWinson Chung     */
123e2d721781fc024cbd9a14929741e5b476242291fWinson Chung    public final WindowConfiguration windowConfiguration;
124e2d721781fc024cbd9a14929741e5b476242291fWinson Chung
125593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev    /**
126593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev     * Whether the task is not presented in Recents UI.
127593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev     */
128593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev    public boolean isNotInRecents;
129593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev
13033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public RemoteAnimationTarget(int taskId, int mode, SurfaceControl leash, boolean isTranslucent,
131584d652a1dba2b09975a1555c71ed339374faac7Winson Chung            Rect clipRect, Rect contentInsets, int prefixOrderIndex, Point position,
132593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev            Rect sourceContainerBounds, WindowConfiguration windowConfig, boolean isNotInRecents) {
13333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.mode = mode;
13433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.taskId = taskId;
13533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.leash = leash;
13633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.isTranslucent = isTranslucent;
13733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.clipRect = new Rect(clipRect);
138584d652a1dba2b09975a1555c71ed339374faac7Winson Chung        this.contentInsets = new Rect(contentInsets);
13933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.prefixOrderIndex = prefixOrderIndex;
14033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.position = new Point(position);
14133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        this.sourceContainerBounds = new Rect(sourceContainerBounds);
142e2d721781fc024cbd9a14929741e5b476242291fWinson Chung        this.windowConfiguration = windowConfig;
143593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev        this.isNotInRecents = isNotInRecents;
14433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    }
14533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
14633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public RemoteAnimationTarget(Parcel in) {
14733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        taskId = in.readInt();
14833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        mode = in.readInt();
14933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        leash = in.readParcelable(null);
15033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        isTranslucent = in.readBoolean();
15133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        clipRect = in.readParcelable(null);
152584d652a1dba2b09975a1555c71ed339374faac7Winson Chung        contentInsets = in.readParcelable(null);
15333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        prefixOrderIndex = in.readInt();
15433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        position = in.readParcelable(null);
15533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        sourceContainerBounds = in.readParcelable(null);
156e2d721781fc024cbd9a14929741e5b476242291fWinson Chung        windowConfiguration = in.readParcelable(null);
157593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev        isNotInRecents = in.readBoolean();
15833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    }
15933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
16033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    @Override
16133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public int describeContents() {
16233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        return 0;
16333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    }
16433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
16533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    @Override
16633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public void writeToParcel(Parcel dest, int flags) {
16733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeInt(taskId);
16833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeInt(mode);
16933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeParcelable(leash, 0 /* flags */);
17033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeBoolean(isTranslucent);
17133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeParcelable(clipRect, 0 /* flags */);
172584d652a1dba2b09975a1555c71ed339374faac7Winson Chung        dest.writeParcelable(contentInsets, 0 /* flags */);
17333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeInt(prefixOrderIndex);
17433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeParcelable(position, 0 /* flags */);
17533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        dest.writeParcelable(sourceContainerBounds, 0 /* flags */);
176e2d721781fc024cbd9a14929741e5b476242291fWinson Chung        dest.writeParcelable(windowConfiguration, 0 /* flags */);
177593e9567fdc2a7b5c7e06c12c9af4b32f4216d85Vadim Tryshev        dest.writeBoolean(isNotInRecents);
17833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    }
17933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
180f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi    public void dump(PrintWriter pw, String prefix) {
181f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.print(prefix); pw.print("mode="); pw.print(mode);
182f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.print(" taskId="); pw.print(taskId);
183f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.print(" isTranslucent="); pw.print(isTranslucent);
184f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.print(" clipRect="); clipRect.printShortString(pw);
185f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.print(" contentInsets="); contentInsets.printShortString(pw);
186f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.print(" prefixOrderIndex="); pw.print(prefixOrderIndex);
187f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.print(" position="); position.printShortString(pw);
188f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.print(" sourceContainerBounds="); sourceContainerBounds.printShortString(pw);
189f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.println();
190f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.print(prefix); pw.print("windowConfiguration="); pw.println(windowConfiguration);
191f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        pw.print(prefix); pw.print("leash="); pw.println(leash);
192f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi    }
193f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi
194f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi    public void writeToProto(ProtoOutputStream proto, long fieldId) {
195f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        final long token = proto.start(fieldId);
196f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        proto.write(TASK_ID, taskId);
197f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        proto.write(MODE, mode);
198f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        leash.writeToProto(proto, LEASH);
199f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        proto.write(IS_TRANSLUCENT, isTranslucent);
200f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        clipRect.writeToProto(proto, CLIP_RECT);
201f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        contentInsets.writeToProto(proto, CONTENT_INSETS);
202f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        proto.write(PREFIX_ORDER_INDEX, prefixOrderIndex);
203f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        position.writeToProto(proto, POSITION);
204f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        sourceContainerBounds.writeToProto(proto, SOURCE_CONTAINER_BOUNDS);
205f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        windowConfiguration.writeToProto(proto, WINDOW_CONFIGURATION);
206f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi        proto.end(token);
207f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi    }
208f75d161dd84f90b1a014e7c48ce0654cf806c0ddJorim Jaggi
20933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    public static final Creator<RemoteAnimationTarget> CREATOR
21033a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi            = new Creator<RemoteAnimationTarget>() {
21133a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        public RemoteAnimationTarget createFromParcel(Parcel in) {
21233a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi            return new RemoteAnimationTarget(in);
21333a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        }
21433a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi
21533a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        public RemoteAnimationTarget[] newArray(int size) {
21633a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi            return new RemoteAnimationTarget[size];
21733a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi        }
21833a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi    };
21933a701a55c28dd20390acee1ba7881a500830d7dJorim Jaggi}
220