PrintDocumentInfo.java revision a00271533f639c8ed36429c663889ac9f654bc72
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;
21a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
22a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov/**
23a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov * This class encapsulates information about a printed document.
24a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov */
25a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganovpublic final class PrintDocumentInfo implements Parcelable {
26a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
27a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
28a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Constant for unknown page count (default).
29a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
30a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final int PAGE_COUNT_UNKNOWN = -1;
31a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
32a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
33a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Content type: unknown (default).
34a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
35a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final int CONTENT_TYPE_UNKNOWN = -1;
36a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
37a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
38a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Content type: document.
39a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
40a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final int CONTENT_TYPE_DOCUMENT = 0;
41a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
42a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
43a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Content type: photo.
44a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
45a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final int CONTENT_TYPE_PHOTO = 1;
46a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
47a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private int mPageCount;
48a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private int mContentType;
49a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
50a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
51a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Creates a new instance.
52a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
53a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private PrintDocumentInfo() {
54a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mPageCount = PAGE_COUNT_UNKNOWN;
55a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mContentType = CONTENT_TYPE_UNKNOWN;
56a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
57a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
58a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
59a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Creates a new instance.
60a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
61a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @param Prototype from which to clone.
62a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
63a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private PrintDocumentInfo(PrintDocumentInfo prototype) {
64a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mPageCount = prototype.mPageCount;
65a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mContentType = prototype.mContentType;
66a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
67a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
68a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
69a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Creates a new instance.
70a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
71a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @param parcel Data from which to initialize.
72a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
73a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private PrintDocumentInfo(Parcel parcel) {
74a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mPageCount = parcel.readInt();
75a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mContentType = parcel.readInt();
76a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
77a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
78a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
79a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Gets the total number of pages.
80a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
81a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @return The number of pages.
82a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
83a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #PAGE_COUNT_UNKNOWN
84a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
85a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public int getPageCount() {
86a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return mPageCount;
87a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
88a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
89a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
90a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Gets the content type.
91a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
92a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @return The content type.
93a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
94a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #CONTENT_TYPE_UNKNOWN
95a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #CONTENT_TYPE_DOCUMENT
96a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @see #CONTENT_TYPE_PHOTO
97a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
98a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public int getContentType() {
99a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return mContentType;
100a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
101a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
102a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    @Override
103a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public int describeContents() {
104a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return 0;
105a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
106a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
107a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    @Override
108a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public void writeToParcel(Parcel parcel, int flags) {
109a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        parcel.writeInt(mPageCount);
110a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        parcel.writeInt(mContentType);
111a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
112a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
113a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
114a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Builder for creating an {@link PrintDocumentInfo}.
115a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
116a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final class Builder {
117a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        private final PrintDocumentInfo mPrototype = new PrintDocumentInfo();
118a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
119a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        /**
120a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * Sets the total number of pages.
121a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
122a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @param pageCount The number of pages. Must be greater than
123a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * or equal to zero or {@link PrintDocumentInfo#PAGE_COUNT_UNKNOWN}.
124a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         */
125a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public Builder setPageCount(int pageCount) {
126a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            if (pageCount < 0 && pageCount != PAGE_COUNT_UNKNOWN) {
127a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                throw new IllegalArgumentException("pageCount"
128a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                        + " must be greater than or euqal to zero or"
129a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                        + " DocumentInfo#PAGE_COUNT_UNKNOWN");
130a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            }
131a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            mPrototype.mPageCount = pageCount;
132a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return this;
133a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
134a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
135a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        /**
136a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * Sets the content type.
137a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
138a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @param type The content type.
139a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
140a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @see #CONTENT_TYPE_UNKNOWN
141a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @see #CONTENT_TYPE_DOCUMENT
142a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @see #CONTENT_TYPE_PHOTO
143a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         */
144a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public Builder setContentType(int type) {
145a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            mPrototype.mContentType = type;
146a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return this;
147a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
148a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
149a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        /**
150a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * Creates a new {@link PrintDocumentInfo} instance.
151a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         *
152a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         * @return The new instance.
153a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov         */
154a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public PrintDocumentInfo create() {
155a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return new PrintDocumentInfo(mPrototype);
156a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
157a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
158a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
159a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public static final Parcelable.Creator<PrintDocumentInfo> CREATOR =
160a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            new Creator<PrintDocumentInfo>() {
161a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        @Override
162a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public PrintDocumentInfo createFromParcel(Parcel parcel) {
163a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return new PrintDocumentInfo(parcel);
164a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
165a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
166a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        @Override
167a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        public PrintDocumentInfo[] newArray(int size) {
168a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov            return new PrintDocumentInfo[size];
169a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
170a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    };
171a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov}
172