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