PrintDocumentInfo.java revision d26d4898fcc9b78f4b66118895c375384098205e
1a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov/*
2a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * Copyright (C) 2013 The Android Open Source Project
3a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov *
4a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License");
5a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * you may not use this file except in compliance with the License.
6a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * You may obtain a copy of the License at
7a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov *
8a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov *      http://www.apache.org/licenses/LICENSE-2.0
9a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov *
10a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * Unless required by applicable law or agreed to in writing, software
11a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS,
12a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * See the License for the specific language governing permissions and
14a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * limitations under the License.
15a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov */
16a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
17a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganovpackage android.print;
18a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
19a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganovimport android.os.Parcel;
20a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganovimport android.os.Parcelable;
21aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganovimport android.print.PrintAttributes.Margins;
22aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganovimport android.print.PrintAttributes.MediaSize;
23798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganovimport android.text.TextUtils;
24a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
25a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov/**
26a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * This class encapsulates information about a printed document.
27a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov */
28a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganovpublic final class PrintDocumentInfo implements Parcelable {
29a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
30a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
31aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Constant for an unknown media size.
32aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
33aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public static final MediaSize MEDIA_SIZE_UNKNOWN = new MediaSize("Unknown", "Unknown", 1, 1);
34aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
35aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
36aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Constant for unknown page count..
37a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
38a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final int PAGE_COUNT_UNKNOWN = -1;
39a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
40a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
41aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Content type: unknown.
42a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
43a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final int CONTENT_TYPE_UNKNOWN = -1;
44a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
45a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
46a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Content type: document.
47a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
48a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final int CONTENT_TYPE_DOCUMENT = 0;
49a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
50a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
51a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Content type: photo.
52a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
53a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final int CONTENT_TYPE_PHOTO = 1;
54a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
55798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    private String mName;
56a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private int mPageCount;
57a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private int mContentType;
58aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    private int mOrientation;
59aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    private int mFittingMode;
60aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    private int mColorMode;
61aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    private Margins mMargins;
62aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    private MediaSize mMediaSize;
63d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    private long mDataSize;
64a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
65a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
66a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Creates a new instance.
67a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
68a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private PrintDocumentInfo() {
69aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /* do nothing */
70a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
71a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
72a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
73a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Creates a new instance.
74a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
75a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @param Prototype from which to clone.
76a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
77a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private PrintDocumentInfo(PrintDocumentInfo prototype) {
78798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        mName = prototype.mName;
79a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mPageCount = prototype.mPageCount;
80a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mContentType = prototype.mContentType;
81aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mOrientation = prototype.mOrientation;
82aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mFittingMode = prototype.mFittingMode;
83aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mColorMode = prototype.mColorMode;
84aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMargins = prototype.mMargins;
85aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMediaSize = prototype.mMediaSize;
86d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov        mDataSize = prototype.mDataSize;
87a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
88a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
89a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
90a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Creates a new instance.
91a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
92a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @param parcel Data from which to initialize.
93a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
94a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private PrintDocumentInfo(Parcel parcel) {
95798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        mName = parcel.readString();
96a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mPageCount = parcel.readInt();
97a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mContentType = parcel.readInt();
98aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mOrientation = parcel.readInt();
99aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mFittingMode = parcel.readInt();
100aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mColorMode = parcel.readInt();
101aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMargins = Margins.createFromParcel(parcel);
102aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMediaSize = MediaSize.createFromParcel(parcel);
103d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov        mDataSize = parcel.readLong();
104a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
105a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
106a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
107798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     * Gets the document name.
108798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     *
109798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     * @return The document name.
110798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     */
111798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    public String getName() {
112798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        return mName;
113798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    }
114798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov
115798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    /**
116a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Gets the total number of pages.
117a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
118a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @return The number of pages.
119a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
120a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #PAGE_COUNT_UNKNOWN
121a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
122a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public int getPageCount() {
123a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return mPageCount;
124a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
125a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
126a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
127a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Gets the content type.
128a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
129a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @return The content type.
130a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
131a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #CONTENT_TYPE_UNKNOWN
132a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #CONTENT_TYPE_DOCUMENT
133a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #CONTENT_TYPE_PHOTO
134a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
135a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public int getContentType() {
136a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return mContentType;
137a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
138a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
139aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
140aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Gets the document orientation.
141aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
142aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @return The orientation.
143aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
144aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#ORIENTATION_PORTRAIT PrintAttributes.ORIENTATION_PORTRAIT
145aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#ORIENTATION_LANDSCAPE PrintAttributes.ORIENTATION_LANDSCAPE
146aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
147aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public int getOrientation() {
148aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        return mOrientation;
149aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    }
150aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
151aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
152aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Gets the document fitting mode.
153aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
154aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @return The fitting mode.
155aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
156aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#FITTING_MODE_NONE PrintAttributes.FITTING_MODE_NONE
157aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#FITTING_MODE_SCALE_TO_FILL PrintAttributes.FITTING_MODE_SCALE_TO_FILL
158aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#FITTING_MODE_SCALE_TO_FIT PrintAttributes.FITTING_MODE_SCALE_TO_FIT
159aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
160aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public int getFittingMode() {
161aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        return mFittingMode;
162aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    }
163aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
164aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
165aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Gets document color mode.
166aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
167aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @return The color mode.
168aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
169aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#COLOR_MODE_COLOR PrintAttributes.COLOR_MODE_COLOR
170aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#COLOR_MODE_MONOCHROME PrintAttributes.COLOR_MODE_MONOCHROME
171aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
172aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public int getColorMode() {
173aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        return mColorMode;
174aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    }
175aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
176aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
177aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Gets the document margins.
178aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
179aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @return The margins.
180aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
181aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public Margins getMargins() {
182aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        return mMargins;
183aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    }
184aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
185aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
186aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Gets the media size.
187aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
188aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @return The media size.
189aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
190aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public MediaSize getMediaSize() {
191aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        return mMediaSize;
192aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    }
193aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
194d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    /**
195d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * Gets the document data size in bytes.
196d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     *
197d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * @return The data size.
198d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     */
199d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    public long getDataSize() {
200d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov        return mDataSize;
201d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    }
202d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov
203d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    /**
204d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * Sets the document data size in bytes.
205d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     *
206d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * @param dataSize The data size.
207d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     *
208d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * @hide
209d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     */
210d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    public void setDataSize(long dataSize) {
211d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov        mDataSize = dataSize;
212d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    }
213d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov
214a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    @Override
215a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public int describeContents() {
216a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return 0;
217a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
218a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
219a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    @Override
220a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public void writeToParcel(Parcel parcel, int flags) {
221798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        parcel.writeString(mName);
222a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        parcel.writeInt(mPageCount);
223a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        parcel.writeInt(mContentType);
224aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        parcel.writeInt(mOrientation);
225aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        parcel.writeInt(mFittingMode);
226aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        parcel.writeInt(mColorMode);
227aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMargins.writeToParcel(parcel);
228aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMediaSize.writeToParcel(parcel);
229d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov        parcel.writeLong(mDataSize);
230a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
231a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
23288d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov    @Override
23385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    public int hashCode() {
23485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        final int prime = 31;
23585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        int result = 1;
236798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        result = prime * result + ((mName != null) ? mName.hashCode() : 0);
23785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        result = prime * result + mContentType;
23885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        result = prime * result + mPageCount;
239aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        result = prime * result + mOrientation;
240aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        result = prime * result + mFittingMode;
241aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        result = prime * result + mColorMode;
242aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        result = prime * result + (mMargins != null ? mMargins.hashCode() : 0);
243aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        result = prime * result + (mMediaSize != null ? mMediaSize.hashCode() : 0);
244d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov        result = prime * result + (int) mDataSize;
245d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov        result = prime * result + (int) mDataSize >> 32;
24685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        return result;
24785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    }
24885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov
24985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    @Override
25085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    public boolean equals(Object obj) {
25185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (this == obj) {
25285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return true;
25385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
25485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (obj == null) {
25585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
25685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
25785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (getClass() != obj.getClass()) {
25885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
25985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
26085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        PrintDocumentInfo other = (PrintDocumentInfo) obj;
261798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        if (!TextUtils.equals(mName, other.mName)) {
262798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            return false;
263798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        }
26485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (mContentType != other.mContentType) {
26585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
26685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
26785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (mPageCount != other.mPageCount) {
26885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
26985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
270aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        if (mOrientation != other.mOrientation) {
271aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return false;
272aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
273aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        if (mFittingMode != other.mFittingMode) {
274aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return false;
275aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
276aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        if (mColorMode != other.mColorMode) {
277aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return false;
278aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
279aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        if (mMargins == null) {
280aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (other.mMargins != null) {
281aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                return false;
282aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
283aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        } else if (!mMargins.equals(other.mMargins)) {
284aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return false;
285aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
286aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        if (mMediaSize == null) {
287aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (other.mMediaSize != null) {
288aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                return false;
289aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
290aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        } else if (!mMediaSize.equals(other.mMediaSize)) {
291aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return false;
292aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
293d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov        if (mDataSize != other.mDataSize) {
294d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov            return false;
295d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov        }
29685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        return true;
29785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    }
29885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov
29985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    @Override
30088d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov    public String toString() {
30188d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        StringBuilder builder = new StringBuilder();
30288d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        builder.append("PrintDocumentInfo{");
303798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        builder.append("name=").append(mName);
304798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        builder.append(", pageCount=").append(mPageCount);
305798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        builder.append(", contentType=").append(contentTyepToString(mContentType));
306aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        builder.append(", orientation=").append(PrintAttributes.orientationToString(mOrientation));
307aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        builder.append(", fittingMode=").append(PrintAttributes.fittingModeToString(mFittingMode));
308aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        builder.append(", colorMode=").append(PrintAttributes.colorModeToString(mColorMode));
309aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        builder.append(", margins=").append(mMargins);
310aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        builder.append(", mediaSize=").append(mMediaSize);
311d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov        builder.append(", size=").append(mDataSize);
31288d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        builder.append("}");
31388d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        return builder.toString();
31488d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov    }
31588d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov
316798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    private String contentTyepToString(int contentType) {
317798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        switch (contentType) {
318798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            case CONTENT_TYPE_DOCUMENT: {
319798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov                return "CONTENT_TYPE_DOCUMENT";
320798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            }
321798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            case CONTENT_TYPE_PHOTO: {
322798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov                return "CONTENT_TYPE_PHOTO";
323798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            }
324798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            default: {
325798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov                return "CONTENT_TYPE_UNKNOWN";
326798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            }
327798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        }
328798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    }
329798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov
330a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
331a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Builder for creating an {@link PrintDocumentInfo}.
332a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
333a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final class Builder {
334798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        private final PrintDocumentInfo mPrototype;
335798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov
336798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        /**
337798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         * Constructor.
338aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
339aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * The values of the relevant properties are initialized from the
340aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * provided print attributes. For example, the orientation is set
341aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * to be the same as the orientation returned by calling {@link
342aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * PrintAttributes#getOrientation() PrintAttributes.getOrientation()}.
343aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
344798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         *
345798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         * @param name The document name. Cannot be empty.
346aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param attributes Print attributes. Cannot be null.
347798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         *
348798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         * @throws IllegalArgumentException If the name is empty.
349798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         */
350aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder(String name, PrintAttributes attributes) {
351aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (TextUtils.isEmpty(name)) {
352aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                throw new IllegalArgumentException("name cannot be empty");
353aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
354aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (attributes == null) {
355aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                throw new IllegalArgumentException("attributes cannot be null");
356aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
357aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype = new PrintDocumentInfo();
358aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mName = name;
359aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mOrientation = attributes.getOrientation();
360aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mFittingMode = attributes.getFittingMode();
361aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mColorMode = attributes.getColorMode();
362aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMargins = attributes.getMargins();
363aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMediaSize = attributes.getMediaSize();
364aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
365aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
366aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
367aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Constructor.
368aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
369aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * The values of the relevant properties are initialized with default
370aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * values. Please refer to the documentation of the individual setters
371aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * for information about the default values.
372aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
373aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
374aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param name The document name. Cannot be empty.
375aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
376798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        public Builder(String name) {
377798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            if (TextUtils.isEmpty(name)) {
378798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov                throw new IllegalArgumentException("name cannot be empty");
379798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            }
380798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            mPrototype = new PrintDocumentInfo();
381798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            mPrototype.mName = name;
382aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mOrientation = PrintAttributes.ORIENTATION_PORTRAIT;
383aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mFittingMode = PrintAttributes.FITTING_MODE_NONE;
384aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mColorMode = PrintAttributes.COLOR_MODE_COLOR;
385aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMargins = Margins.NO_MARGINS;
386aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMediaSize = MEDIA_SIZE_UNKNOWN;
387798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        }
388a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
389a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        /**
390a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * Sets the total number of pages.
391aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
392aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link #PAGE_COUNT_UNKNOWN}
393aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
394a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
395a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @param pageCount The number of pages. Must be greater than
396a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * or equal to zero or {@link PrintDocumentInfo#PAGE_COUNT_UNKNOWN}.
397a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         */
398a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public Builder setPageCount(int pageCount) {
399a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            if (pageCount < 0 && pageCount != PAGE_COUNT_UNKNOWN) {
400a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                throw new IllegalArgumentException("pageCount"
401a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                        + " must be greater than or euqal to zero or"
402a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                        + " DocumentInfo#PAGE_COUNT_UNKNOWN");
403a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            }
404a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            mPrototype.mPageCount = pageCount;
405a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return this;
406a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
407a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
408a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        /**
409a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * Sets the content type.
410aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
411aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link #CONTENT_TYPE_UNKNOWN}
412aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
413a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
414a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @param type The content type.
415a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
416a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @see #CONTENT_TYPE_UNKNOWN
417a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @see #CONTENT_TYPE_DOCUMENT
418a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @see #CONTENT_TYPE_PHOTO
419a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         */
420a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public Builder setContentType(int type) {
421a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            mPrototype.mContentType = type;
422a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return this;
423a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
424a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
425a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        /**
426aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Sets the orientation.
427aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
428aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link PrintAttributes#ORIENTATION_PORTRAIT
429aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * PrintAttributes.ORIENTATION_PORTRAIT}
430aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
431aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
432aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param orientation The orientation.
433aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
434aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#ORIENTATION_PORTRAIT PrintAttributes.ORIENTATION_PORTRAIT
435aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#ORIENTATION_LANDSCAPE PrintAttributes.ORIENTATION_LANDSCAPE
436aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
437aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder setOrientation(int orientation) {
438aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            PrintAttributes.enforceValidOrientation(orientation);
439aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mOrientation = orientation;
440aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return this;
441aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
442aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
443aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
444aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Sets the content fitting mode.
445aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
446aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link PrintAttributes#FITTING_MODE_NONE
447aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * PrintAttributes.FITTING_MODE_NONE}
448aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
449aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
450aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param fittingMode The fitting mode.
451aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
452aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#FITTING_MODE_NONE PrintAttributes.FITTING_MODE_NONE
453aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#FITTING_MODE_SCALE_TO_FILL PrintAttributes.FITTING_MODE_SCALE_TO_FILL
454aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#FITTING_MODE_SCALE_TO_FIT PrintAttributes.FITTING_MODE_SCALE_TO_FIT
455aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
456aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder setFittingMode(int fittingMode) {
457aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            PrintAttributes.enforceValidFittingMode(fittingMode);
458aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mFittingMode = fittingMode;
459aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return this;
460aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
461aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
462aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
463aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Sets the content color mode.
464aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
465aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link PrintAttributes#COLOR_MODE_COLOR
466aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * PrintAttributes.COLOR_MODE_COLOR}
467aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
468aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
469aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param colorMode The color mode.
470aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
471aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#COLOR_MODE_COLOR PrintAttributes.COLOR_MODE_COLOR
472aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#COLOR_MODE_MONOCHROME PrintAttributes.COLOR_MODE_MONOCHROME
473aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
474aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder setColorMode(int colorMode) {
475aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            PrintAttributes.enforceValidColorMode(colorMode);
476aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mColorMode = colorMode;
477aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return this;
478aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
479aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
480aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
481aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Sets the document margins.
482aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
483aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link PrintAttributes.Margins#NO_MARGINS Margins.NO_MARGINS}
484aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
485aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
486aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param margins The margins. Cannot be null.
487aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
488aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder setMargins(Margins margins) {
489aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (margins == null) {
490aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                throw new IllegalArgumentException("margins cannot be null");
491aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
492aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMargins = margins;
493aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return this;
494aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
495aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
496aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
497aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Sets the document media size.
498aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
499aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong>#MEDIA_SIZE_UNKNOWN
500aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
501aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
502aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param mediaSize The media size. Cannot be null.
503aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
504aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see #MEDIA_SIZE_UNKNOWN
505aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
506aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder setMediaSize(MediaSize mediaSize) {
507aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (mediaSize == null) {
508aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                throw new IllegalArgumentException("media size cannot be null");
509aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
510aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMediaSize = mediaSize;
511aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return this;
512aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
513aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
514aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
515a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * Creates a new {@link PrintDocumentInfo} instance.
516a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
517a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @return The new instance.
518a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         */
519a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public PrintDocumentInfo create() {
520a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return new PrintDocumentInfo(mPrototype);
521a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
522a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
523a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
524a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final Parcelable.Creator<PrintDocumentInfo> CREATOR =
525a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            new Creator<PrintDocumentInfo>() {
526a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        @Override
527a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public PrintDocumentInfo createFromParcel(Parcel parcel) {
528a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return new PrintDocumentInfo(parcel);
529a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
530a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
531a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        @Override
532a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public PrintDocumentInfo[] newArray(int size) {
533a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return new PrintDocumentInfo[size];
534a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
535a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    };
536a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov}
537