package android.view;
import static android.app.RemoteAnimationTargetProto.CLIP_RECT;
import static android.app.RemoteAnimationTargetProto.CONTENT_INSETS;
import static android.app.RemoteAnimationTargetProto.IS_TRANSLUCENT;
import static android.app.RemoteAnimationTargetProto.LEASH;
import static android.app.RemoteAnimationTargetProto.MODE;
import static android.app.RemoteAnimationTargetProto.POSITION;
import static android.app.RemoteAnimationTargetProto.PREFIX_ORDER_INDEX;
import static android.app.RemoteAnimationTargetProto.SOURCE_CONTAINER_BOUNDS;
import static android.app.RemoteAnimationTargetProto.TASK_ID;
import static android.app.RemoteAnimationTargetProto.WINDOW_CONFIGURATION;
import android.annotation.IntDef;
import android.app.WindowConfiguration;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.proto.ProtoOutputStream;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
public class RemoteAnimationTarget implements Parcelable {
public static final int MODE_OPENING = 0;
public static final int MODE_CLOSING = 1;
@IntDef(prefix = { "MODE_" }, value = {
MODE_OPENING,
MODE_CLOSING
})
@Retention(RetentionPolicy.SOURCE)
public @interface Mode {}
public final @Mode int mode;
public final int taskId;
public final SurfaceControl leash;
public final boolean isTranslucent;
public final Rect clipRect;
public final Rect contentInsets;
public final int prefixOrderIndex;
public final Point position;
public final Rect sourceContainerBounds;
public final WindowConfiguration windowConfiguration;
public boolean isNotInRecents;
public RemoteAnimationTarget(int taskId, int mode, SurfaceControl leash, boolean isTranslucent,
Rect clipRect, Rect contentInsets, int prefixOrderIndex, Point position,
Rect sourceContainerBounds, WindowConfiguration windowConfig, boolean isNotInRecents) {
this.mode = mode;
this.taskId = taskId;
this.leash = leash;
this.isTranslucent = isTranslucent;
this.clipRect = new Rect(clipRect);
this.contentInsets = new Rect(contentInsets);
this.prefixOrderIndex = prefixOrderIndex;
this.position = new Point(position);
this.sourceContainerBounds = new Rect(sourceContainerBounds);
this.windowConfiguration = windowConfig;
this.isNotInRecents = isNotInRecents;
}
public RemoteAnimationTarget(Parcel in) {
taskId = in.readInt();
mode = in.readInt();
leash = in.readParcelable(null);
isTranslucent = in.readBoolean();
clipRect = in.readParcelable(null);
contentInsets = in.readParcelable(null);
prefixOrderIndex = in.readInt();
position = in.readParcelable(null);
sourceContainerBounds = in.readParcelable(null);
windowConfiguration = in.readParcelable(null);
isNotInRecents = in.readBoolean();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(taskId);
dest.writeInt(mode);
dest.writeParcelable(leash, 0 );
dest.writeBoolean(isTranslucent);
dest.writeParcelable(clipRect, 0 );
dest.writeParcelable(contentInsets, 0 );
dest.writeInt(prefixOrderIndex);
dest.writeParcelable(position, 0 );
dest.writeParcelable(sourceContainerBounds, 0 );
dest.writeParcelable(windowConfiguration, 0 );
dest.writeBoolean(isNotInRecents);
}
public void dump(PrintWriter pw, String prefix) {
pw.print(prefix); pw.print("mode="); pw.print(mode);
pw.print(" taskId="); pw.print(taskId);
pw.print(" isTranslucent="); pw.print(isTranslucent);
pw.print(" clipRect="); clipRect.printShortString(pw);
pw.print(" contentInsets="); contentInsets.printShortString(pw);
pw.print(" prefixOrderIndex="); pw.print(prefixOrderIndex);
pw.print(" position="); position.printShortString(pw);
pw.print(" sourceContainerBounds="); sourceContainerBounds.printShortString(pw);
pw.println();
pw.print(prefix); pw.print("windowConfiguration="); pw.println(windowConfiguration);
pw.print(prefix); pw.print("leash="); pw.println(leash);
}
public void writeToProto(ProtoOutputStream proto, long fieldId) {
final long token = proto.start(fieldId);
proto.write(TASK_ID, taskId);
proto.write(MODE, mode);
leash.writeToProto(proto, LEASH);
proto.write(IS_TRANSLUCENT, isTranslucent);
clipRect.writeToProto(proto, CLIP_RECT);
contentInsets.writeToProto(proto, CONTENT_INSETS);
proto.write(PREFIX_ORDER_INDEX, prefixOrderIndex);
position.writeToProto(proto, POSITION);
sourceContainerBounds.writeToProto(proto, SOURCE_CONTAINER_BOUNDS);
windowConfiguration.writeToProto(proto, WINDOW_CONFIGURATION);
proto.end(token);
}
public static final Creator<RemoteAnimationTarget> CREATOR
= new Creator<RemoteAnimationTarget>() {
public RemoteAnimationTarget createFromParcel(Parcel in) {
return new RemoteAnimationTarget(in);
}
public RemoteAnimationTarget[] newArray(int size) {
return new RemoteAnimationTarget[size];
}
};
}