1709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung/*
2709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * Copyright (C) 2017 The Android Open Source Project
3709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung *
4709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * Licensed under the Apache License, Version 2.0 (the "License");
5709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * you may not use this file except in compliance with the License.
6709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * You may obtain a copy of the License at
7709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung *
8709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung *      http://www.apache.org/licenses/LICENSE-2.0
9709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung *
10709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * Unless required by applicable law or agreed to in writing, software
11709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * distributed under the License is distributed on an "AS IS" BASIS,
12709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * See the License for the specific language governing permissions and
14709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * limitations under the License.
15709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung */
16709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
17709904f8003a7122e185cfd32d1209e0e6975b77Winson Chungpackage android.app;
18709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
19709904f8003a7122e185cfd32d1209e0e6975b77Winson Chungimport android.annotation.Nullable;
20709904f8003a7122e185cfd32d1209e0e6975b77Winson Chungimport android.graphics.Rect;
21709904f8003a7122e185cfd32d1209e0e6975b77Winson Chungimport android.os.Parcel;
22709904f8003a7122e185cfd32d1209e0e6975b77Winson Chungimport android.os.Parcelable;
23709904f8003a7122e185cfd32d1209e0e6975b77Winson Chungimport android.util.Rational;
24709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
25709904f8003a7122e185cfd32d1209e0e6975b77Winson Chungimport java.util.ArrayList;
26709904f8003a7122e185cfd32d1209e0e6975b77Winson Chungimport java.util.List;
27709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
28709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung/**
29709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * Represents a set of parameters used to initialize and update an Activity in picture-in-picture
30709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung * mode.
31709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung */
32000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkeypublic final class PictureInPictureParams implements Parcelable {
33709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
34709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
35709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * Builder class for {@link PictureInPictureParams} objects.
36709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
37709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public static class Builder {
38709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
39709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        @Nullable
40709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        private Rational mAspectRatio;
41709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
42709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        @Nullable
43709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        private List<RemoteAction> mUserActions;
44709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
45709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        @Nullable
46709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        private Rect mSourceRectHint;
47709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
48709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        /**
49709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * Sets the aspect ratio.  This aspect ratio is defined as the desired width / height, and
50709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * does not change upon device rotation.
51709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         *
52709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * @param aspectRatio the new aspect ratio for the activity in picture-in-picture, must be
53709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * between 2.39:1 and 1:2.39 (inclusive).
54709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         *
55709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * @return this builder instance.
56709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         */
57709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        public Builder setAspectRatio(Rational aspectRatio) {
58709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            mAspectRatio = aspectRatio;
59709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            return this;
60709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
61709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
62709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        /**
63709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * Sets the user actions.  If there are more than
64000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey         * {@link Activity#getMaxNumPictureInPictureActions()} actions, then the input list
65709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * will be truncated to that number.
66709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         *
67709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * @param actions the new actions to show in the picture-in-picture menu.
68709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         *
69709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * @return this builder instance.
70709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         *
71709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * @see RemoteAction
72709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         */
73709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        public Builder setActions(List<RemoteAction> actions) {
74709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            if (mUserActions != null) {
75709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                mUserActions = null;
76709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            }
77709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            if (actions != null) {
78709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                mUserActions = new ArrayList<>(actions);
79709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            }
80709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            return this;
81709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
82709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
83709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        /**
84709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * Sets the source bounds hint. These bounds are only used when an activity first enters
85709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * picture-in-picture, and describe the bounds in window coordinates of activity entering
86709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * picture-in-picture that will be visible following the transition. For the best effect,
87709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * these bounds should also match the aspect ratio in the arguments.
88709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         *
89709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * @param launchBounds window-coordinate bounds indicating the area of the activity that
90709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * will still be visible following the transition into picture-in-picture (eg. the video
91709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * view bounds in a video player)
92709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         *
93709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * @return this builder instance.
94709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         */
95709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        public Builder setSourceRectHint(Rect launchBounds) {
96709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            if (launchBounds == null) {
97709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                mSourceRectHint = null;
98709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            } else {
99709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                mSourceRectHint = new Rect(launchBounds);
100709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            }
101709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            return this;
102709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
103709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
104709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        /**
105709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * @return an immutable {@link PictureInPictureParams} to be used when entering or updating
106709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * the activity in picture-in-picture.
107709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         *
108709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * @see Activity#enterPictureInPictureMode(PictureInPictureParams)
109709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         * @see Activity#setPictureInPictureParams(PictureInPictureParams)
110709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung         */
111709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        public PictureInPictureParams build() {
112709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            PictureInPictureParams params = new PictureInPictureParams(mAspectRatio, mUserActions,
113709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                    mSourceRectHint);
114709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            return params;
115709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
116709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
117709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
118709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
119709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * The expected aspect ratio of the picture-in-picture.
120709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
121709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    @Nullable
122000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    private Rational mAspectRatio;
123709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
124709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
125709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * The set of actions that are associated with this activity when in picture-in-picture.
126709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
127709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    @Nullable
128000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    private List<RemoteAction> mUserActions;
129709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
130709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
131709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * The source bounds hint used when entering picture-in-picture, relative to the window bounds.
132709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * We can use this internally for the transition into picture-in-picture to ensure that a
133709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * particular source rect is visible throughout the whole transition.
134709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
135709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    @Nullable
136000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    private Rect mSourceRectHint;
137709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
138000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    /** {@hide} */
139709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    PictureInPictureParams() {
140709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
141709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
142000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    /** {@hide} */
143000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    PictureInPictureParams(Parcel in) {
144709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (in.readInt() != 0) {
145709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            mAspectRatio = new Rational(in.readInt(), in.readInt());
146709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
147709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (in.readInt() != 0) {
148709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            mUserActions = new ArrayList<>();
149709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            in.readParcelableList(mUserActions, RemoteAction.class.getClassLoader());
150709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
151709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (in.readInt() != 0) {
152709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            mSourceRectHint = Rect.CREATOR.createFromParcel(in);
153709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
154709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
155709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
156000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    /** {@hide} */
157000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    PictureInPictureParams(Rational aspectRatio, List<RemoteAction> actions,
158709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            Rect sourceRectHint) {
159709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        mAspectRatio = aspectRatio;
160709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        mUserActions = actions;
161709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        mSourceRectHint = sourceRectHint;
162709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
163709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
164709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
165709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * Copies the set parameters from the other picture-in-picture args.
166709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @hide
167709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
168709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public void copyOnlySet(PictureInPictureParams otherArgs) {
169709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (otherArgs.hasSetAspectRatio()) {
170709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            mAspectRatio = otherArgs.mAspectRatio;
171709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
172709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (otherArgs.hasSetActions()) {
173709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            mUserActions = otherArgs.mUserActions;
174709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
175709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (otherArgs.hasSourceBoundsHint()) {
176709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            mSourceRectHint = new Rect(otherArgs.getSourceRectHint());
177709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
178709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
179709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
180709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
181709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @return the aspect ratio. If none is set, return 0.
182709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @hide
183709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
184709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public float getAspectRatio() {
185709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (mAspectRatio != null) {
186709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            return mAspectRatio.floatValue();
187709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
188709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        return 0f;
189709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
190709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
191000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    /** @hide */
192000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    public Rational getAspectRatioRational() {
193000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey        return mAspectRatio;
194000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey    }
195000ce805050f0bdbf485464b84eb2c08bca5ad72Jeff Sharkey
196709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
197709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @return whether the aspect ratio is set.
198709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @hide
199709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
200709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public boolean hasSetAspectRatio() {
201709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        return mAspectRatio != null;
202709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
203709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
204709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
205709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @return the set of user actions.
206709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @hide
207709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
208709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public List<RemoteAction> getActions() {
209709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        return mUserActions;
210709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
211709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
212709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
213709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @return whether the user actions are set.
214709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @hide
215709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
216709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public boolean hasSetActions() {
217709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        return mUserActions != null;
218709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
219709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
220709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
221709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * Truncates the set of actions to the given {@param size}.
222709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @hide
223709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
224709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public void truncateActions(int size) {
225709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (hasSetActions()) {
22690853251f3c468a5e526724e437808f98d8d00b3Winson Chung            mUserActions = mUserActions.subList(0, Math.min(mUserActions.size(), size));
227709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
228709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
229709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
230709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
231709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @return the source rect hint
232709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @hide
233709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
234709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public Rect getSourceRectHint() {
235709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        return mSourceRectHint;
236709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
237709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
238709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    /**
239709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @return whether there are launch bounds set
240709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     * @hide
241709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung     */
242709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public boolean hasSourceBoundsHint() {
243709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        return mSourceRectHint != null && !mSourceRectHint.isEmpty();
244709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
245709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
246709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    @Override
247709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public int describeContents() {
248709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        return 0;
249709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
250709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
251709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    @Override
252709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public void writeToParcel(Parcel out, int flags) {
253709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (mAspectRatio != null) {
254709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            out.writeInt(1);
255709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            out.writeInt(mAspectRatio.getNumerator());
256709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            out.writeInt(mAspectRatio.getDenominator());
257709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        } else {
258709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            out.writeInt(0);
259709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
260709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (mUserActions != null) {
261709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            out.writeInt(1);
262709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            out.writeParcelableList(mUserActions, 0);
263709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        } else {
264709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            out.writeInt(0);
265709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
266709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        if (mSourceRectHint != null) {
267709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            out.writeInt(1);
268709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            mSourceRectHint.writeToParcel(out, 0);
269709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        } else {
270709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            out.writeInt(0);
271709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung        }
272709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    }
273709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung
274709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung    public static final Creator<PictureInPictureParams> CREATOR =
275709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            new Creator<PictureInPictureParams>() {
276709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                public PictureInPictureParams createFromParcel(Parcel in) {
277709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                    return new PictureInPictureParams(in);
278709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                }
279709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                public PictureInPictureParams[] newArray(int size) {
280709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                    return new PictureInPictureParams[size];
281709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung                }
282709904f8003a7122e185cfd32d1209e0e6975b77Winson Chung            };
28318f622f08ce84bfb1a6cf19bca33d3ef0ad4aca9Robert Carr}
284