PrintDocumentInfo.java revision aec1417ca9eb63209668ac17da90cf8a07c6076c
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;
63a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
64a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
65a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Creates a new instance.
66a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
67a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private PrintDocumentInfo() {
68aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /* do nothing */
69a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
70a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
71a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
72a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Creates a new instance.
73a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
74a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @param Prototype from which to clone.
75a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
76a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private PrintDocumentInfo(PrintDocumentInfo prototype) {
77798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        mName = prototype.mName;
78a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mPageCount = prototype.mPageCount;
79a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mContentType = prototype.mContentType;
80aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mOrientation = prototype.mOrientation;
81aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mFittingMode = prototype.mFittingMode;
82aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mColorMode = prototype.mColorMode;
83aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMargins = prototype.mMargins;
84aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMediaSize = prototype.mMediaSize;
85a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
86a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
87a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
88a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Creates a new instance.
89a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
90a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @param parcel Data from which to initialize.
91a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
92a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private PrintDocumentInfo(Parcel parcel) {
93798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        mName = parcel.readString();
94a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mPageCount = parcel.readInt();
95a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mContentType = parcel.readInt();
96aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mOrientation = parcel.readInt();
97aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mFittingMode = parcel.readInt();
98aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mColorMode = parcel.readInt();
99aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMargins = Margins.createFromParcel(parcel);
100aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMediaSize = MediaSize.createFromParcel(parcel);
101a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
102a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
103a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
104798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     * Gets the document name.
105798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     *
106798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     * @return The document name.
107798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     */
108798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    public String getName() {
109798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        return mName;
110798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    }
111798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov
112798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    /**
113a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Gets the total number of pages.
114a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
115a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @return The number of pages.
116a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
117a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #PAGE_COUNT_UNKNOWN
118a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
119a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public int getPageCount() {
120a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return mPageCount;
121a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
122a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
123a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
124a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Gets the content type.
125a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
126a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @return The content type.
127a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
128a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #CONTENT_TYPE_UNKNOWN
129a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #CONTENT_TYPE_DOCUMENT
130a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #CONTENT_TYPE_PHOTO
131a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
132a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public int getContentType() {
133a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return mContentType;
134a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
135a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
136aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
137aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Gets the document orientation.
138aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
139aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @return The orientation.
140aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
141aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#ORIENTATION_PORTRAIT PrintAttributes.ORIENTATION_PORTRAIT
142aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#ORIENTATION_LANDSCAPE PrintAttributes.ORIENTATION_LANDSCAPE
143aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
144aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public int getOrientation() {
145aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        return mOrientation;
146aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    }
147aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
148aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
149aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Gets the document fitting mode.
150aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
151aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @return The fitting mode.
152aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
153aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#FITTING_MODE_NONE PrintAttributes.FITTING_MODE_NONE
154aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#FITTING_MODE_SCALE_TO_FILL PrintAttributes.FITTING_MODE_SCALE_TO_FILL
155aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#FITTING_MODE_SCALE_TO_FIT PrintAttributes.FITTING_MODE_SCALE_TO_FIT
156aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
157aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public int getFittingMode() {
158aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        return mFittingMode;
159aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    }
160aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
161aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
162aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Gets document color mode.
163aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
164aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @return The color mode.
165aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
166aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#COLOR_MODE_COLOR PrintAttributes.COLOR_MODE_COLOR
167aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @see PrintAttributes#COLOR_MODE_MONOCHROME PrintAttributes.COLOR_MODE_MONOCHROME
168aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
169aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public int getColorMode() {
170aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        return mColorMode;
171aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    }
172aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
173aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
174aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Gets the document margins.
175aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
176aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @return The margins.
177aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
178aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public Margins getMargins() {
179aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        return mMargins;
180aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    }
181aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
182aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    /**
183aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * Gets the media size.
184aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     *
185aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     * @return The media size.
186aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov     */
187aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    public MediaSize getMediaSize() {
188aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        return mMediaSize;
189aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov    }
190aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
191a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    @Override
192a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public int describeContents() {
193a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return 0;
194a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
195a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
196a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    @Override
197a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public void writeToParcel(Parcel parcel, int flags) {
198798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        parcel.writeString(mName);
199a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        parcel.writeInt(mPageCount);
200a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        parcel.writeInt(mContentType);
201aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        parcel.writeInt(mOrientation);
202aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        parcel.writeInt(mFittingMode);
203aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        parcel.writeInt(mColorMode);
204aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMargins.writeToParcel(parcel);
205aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        mMediaSize.writeToParcel(parcel);
206a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
207a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
20888d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov    @Override
20985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    public int hashCode() {
21085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        final int prime = 31;
21185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        int result = 1;
212798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        result = prime * result + ((mName != null) ? mName.hashCode() : 0);
21385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        result = prime * result + mContentType;
21485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        result = prime * result + mPageCount;
215aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        result = prime * result + mOrientation;
216aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        result = prime * result + mFittingMode;
217aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        result = prime * result + mColorMode;
218aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        result = prime * result + (mMargins != null ? mMargins.hashCode() : 0);
219aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        result = prime * result + (mMediaSize != null ? mMediaSize.hashCode() : 0);
22085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        return result;
22185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    }
22285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov
22385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    @Override
22485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    public boolean equals(Object obj) {
22585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (this == obj) {
22685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return true;
22785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
22885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (obj == null) {
22985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
23085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
23185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (getClass() != obj.getClass()) {
23285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
23385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
23485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        PrintDocumentInfo other = (PrintDocumentInfo) obj;
235798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        if (!TextUtils.equals(mName, other.mName)) {
236798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            return false;
237798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        }
23885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (mContentType != other.mContentType) {
23985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
24085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
24185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (mPageCount != other.mPageCount) {
24285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            return false;
24385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
244aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        if (mOrientation != other.mOrientation) {
245aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return false;
246aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
247aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        if (mFittingMode != other.mFittingMode) {
248aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return false;
249aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
250aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        if (mColorMode != other.mColorMode) {
251aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return false;
252aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
253aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        if (mMargins == null) {
254aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (other.mMargins != null) {
255aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                return false;
256aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
257aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        } else if (!mMargins.equals(other.mMargins)) {
258aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return false;
259aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
260aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        if (mMediaSize == null) {
261aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (other.mMediaSize != null) {
262aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                return false;
263aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
264aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        } else if (!mMediaSize.equals(other.mMediaSize)) {
265aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return false;
266aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
26785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        return true;
26885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    }
26985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov
27085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    @Override
27188d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov    public String toString() {
27288d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        StringBuilder builder = new StringBuilder();
27388d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        builder.append("PrintDocumentInfo{");
274798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        builder.append("name=").append(mName);
275798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        builder.append(", pageCount=").append(mPageCount);
276798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        builder.append(", contentType=").append(contentTyepToString(mContentType));
277aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        builder.append(", orientation=").append(PrintAttributes.orientationToString(mOrientation));
278aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        builder.append(", fittingMode=").append(PrintAttributes.fittingModeToString(mFittingMode));
279aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        builder.append(", colorMode=").append(PrintAttributes.colorModeToString(mColorMode));
280aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        builder.append(", margins=").append(mMargins);
281aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        builder.append(", mediaSize=").append(mMediaSize);
28288d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        builder.append("}");
28388d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        return builder.toString();
28488d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov    }
28588d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov
286798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    private String contentTyepToString(int contentType) {
287798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        switch (contentType) {
288798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            case CONTENT_TYPE_DOCUMENT: {
289798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov                return "CONTENT_TYPE_DOCUMENT";
290798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            }
291798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            case CONTENT_TYPE_PHOTO: {
292798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov                return "CONTENT_TYPE_PHOTO";
293798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            }
294798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            default: {
295798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov                return "CONTENT_TYPE_UNKNOWN";
296798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            }
297798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        }
298798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    }
299798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov
300a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
301a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Builder for creating an {@link PrintDocumentInfo}.
302a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
303a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final class Builder {
304798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        private final PrintDocumentInfo mPrototype;
305798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov
306798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        /**
307798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         * Constructor.
308aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
309aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * The values of the relevant properties are initialized from the
310aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * provided print attributes. For example, the orientation is set
311aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * to be the same as the orientation returned by calling {@link
312aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * PrintAttributes#getOrientation() PrintAttributes.getOrientation()}.
313aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
314798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         *
315798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         * @param name The document name. Cannot be empty.
316aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param attributes Print attributes. Cannot be null.
317798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         *
318798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         * @throws IllegalArgumentException If the name is empty.
319798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov         */
320aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder(String name, PrintAttributes attributes) {
321aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (TextUtils.isEmpty(name)) {
322aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                throw new IllegalArgumentException("name cannot be empty");
323aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
324aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (attributes == null) {
325aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                throw new IllegalArgumentException("attributes cannot be null");
326aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
327aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype = new PrintDocumentInfo();
328aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mName = name;
329aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mOrientation = attributes.getOrientation();
330aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mFittingMode = attributes.getFittingMode();
331aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mColorMode = attributes.getColorMode();
332aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMargins = attributes.getMargins();
333aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMediaSize = attributes.getMediaSize();
334aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
335aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
336aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
337aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Constructor.
338aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
339aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * The values of the relevant properties are initialized with default
340aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * values. Please refer to the documentation of the individual setters
341aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * for information about the default values.
342aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
343aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
344aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param name The document name. Cannot be empty.
345aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
346798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        public Builder(String name) {
347798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            if (TextUtils.isEmpty(name)) {
348798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov                throw new IllegalArgumentException("name cannot be empty");
349798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            }
350798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            mPrototype = new PrintDocumentInfo();
351798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov            mPrototype.mName = name;
352aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mOrientation = PrintAttributes.ORIENTATION_PORTRAIT;
353aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mFittingMode = PrintAttributes.FITTING_MODE_NONE;
354aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mColorMode = PrintAttributes.COLOR_MODE_COLOR;
355aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMargins = Margins.NO_MARGINS;
356aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMediaSize = MEDIA_SIZE_UNKNOWN;
357798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        }
358a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
359a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        /**
360a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * Sets the total number of pages.
361aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
362aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link #PAGE_COUNT_UNKNOWN}
363aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
364a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
365a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @param pageCount The number of pages. Must be greater than
366a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * or equal to zero or {@link PrintDocumentInfo#PAGE_COUNT_UNKNOWN}.
367a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         */
368a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public Builder setPageCount(int pageCount) {
369a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            if (pageCount < 0 && pageCount != PAGE_COUNT_UNKNOWN) {
370a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                throw new IllegalArgumentException("pageCount"
371a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                        + " must be greater than or euqal to zero or"
372a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                        + " DocumentInfo#PAGE_COUNT_UNKNOWN");
373a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            }
374a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            mPrototype.mPageCount = pageCount;
375a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return this;
376a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
377a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
378a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        /**
379a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * Sets the content type.
380aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
381aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link #CONTENT_TYPE_UNKNOWN}
382aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
383a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
384a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @param type The content type.
385a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
386a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @see #CONTENT_TYPE_UNKNOWN
387a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @see #CONTENT_TYPE_DOCUMENT
388a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @see #CONTENT_TYPE_PHOTO
389a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         */
390a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public Builder setContentType(int type) {
391a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            mPrototype.mContentType = type;
392a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return this;
393a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
394a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
395a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        /**
396aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Sets the orientation.
397aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
398aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link PrintAttributes#ORIENTATION_PORTRAIT
399aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * PrintAttributes.ORIENTATION_PORTRAIT}
400aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
401aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
402aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param orientation The orientation.
403aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
404aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#ORIENTATION_PORTRAIT PrintAttributes.ORIENTATION_PORTRAIT
405aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#ORIENTATION_LANDSCAPE PrintAttributes.ORIENTATION_LANDSCAPE
406aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
407aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder setOrientation(int orientation) {
408aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            PrintAttributes.enforceValidOrientation(orientation);
409aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mOrientation = orientation;
410aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return this;
411aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
412aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
413aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
414aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Sets the content fitting mode.
415aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
416aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link PrintAttributes#FITTING_MODE_NONE
417aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * PrintAttributes.FITTING_MODE_NONE}
418aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
419aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
420aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param fittingMode The fitting mode.
421aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
422aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#FITTING_MODE_NONE PrintAttributes.FITTING_MODE_NONE
423aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#FITTING_MODE_SCALE_TO_FILL PrintAttributes.FITTING_MODE_SCALE_TO_FILL
424aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#FITTING_MODE_SCALE_TO_FIT PrintAttributes.FITTING_MODE_SCALE_TO_FIT
425aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
426aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder setFittingMode(int fittingMode) {
427aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            PrintAttributes.enforceValidFittingMode(fittingMode);
428aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mFittingMode = fittingMode;
429aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return this;
430aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
431aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
432aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
433aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Sets the content color mode.
434aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
435aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link PrintAttributes#COLOR_MODE_COLOR
436aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * PrintAttributes.COLOR_MODE_COLOR}
437aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
438aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
439aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param colorMode The color mode.
440aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
441aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#COLOR_MODE_COLOR PrintAttributes.COLOR_MODE_COLOR
442aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see PrintAttributes#COLOR_MODE_MONOCHROME PrintAttributes.COLOR_MODE_MONOCHROME
443aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
444aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder setColorMode(int colorMode) {
445aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            PrintAttributes.enforceValidColorMode(colorMode);
446aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mColorMode = colorMode;
447aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return this;
448aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
449aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
450aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
451aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Sets the document margins.
452aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
453aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong> {@link PrintAttributes.Margins#NO_MARGINS Margins.NO_MARGINS}
454aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
455aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
456aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param margins The margins. Cannot be null.
457aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
458aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder setMargins(Margins margins) {
459aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (margins == null) {
460aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                throw new IllegalArgumentException("margins cannot be null");
461aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
462aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMargins = margins;
463aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return this;
464aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
465aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
466aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
467aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * Sets the document media size.
468aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <p>
469aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * <strong>Default: </strong>#MEDIA_SIZE_UNKNOWN
470aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * </p>
471aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
472aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @param mediaSize The media size. Cannot be null.
473aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         *
474aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         * @see #MEDIA_SIZE_UNKNOWN
475aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov         */
476aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        public Builder setMediaSize(MediaSize mediaSize) {
477aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            if (mediaSize == null) {
478aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov                throw new IllegalArgumentException("media size cannot be null");
479aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            }
480aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            mPrototype.mMediaSize = mediaSize;
481aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov            return this;
482aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        }
483aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov
484aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov        /**
485a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * Creates a new {@link PrintDocumentInfo} instance.
486a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
487a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @return The new instance.
488a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         */
489a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public PrintDocumentInfo create() {
490a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return new PrintDocumentInfo(mPrototype);
491a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
492a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
493a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
494a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final Parcelable.Creator<PrintDocumentInfo> CREATOR =
495a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            new Creator<PrintDocumentInfo>() {
496a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        @Override
497a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public PrintDocumentInfo createFromParcel(Parcel parcel) {
498a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return new PrintDocumentInfo(parcel);
499a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
500a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
501a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        @Override
502a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public PrintDocumentInfo[] newArray(int size) {
503a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return new PrintDocumentInfo[size];
504a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
505a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    };
506a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov}
507