blob: 653ad4bfc4e4adecdb4068b69531be3377214e29 [file] [log] [blame]
Svetoslav Ganova0027152013-06-25 14:59:53 -07001/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.print;
18
19import android.os.Parcel;
20import android.os.Parcelable;
Svetoslav Ganov798bed62013-08-11 12:29:39 -070021import android.text.TextUtils;
Svetoslav Ganova0027152013-06-25 14:59:53 -070022
23/**
24 * This class encapsulates information about a printed document.
25 */
26public final class PrintDocumentInfo implements Parcelable {
27
28 /**
29 * Constant for unknown page count (default).
30 */
31 public static final int PAGE_COUNT_UNKNOWN = -1;
32
33 /**
34 * Content type: unknown (default).
35 */
36 public static final int CONTENT_TYPE_UNKNOWN = -1;
37
38 /**
39 * Content type: document.
40 */
41 public static final int CONTENT_TYPE_DOCUMENT = 0;
42
43 /**
44 * Content type: photo.
45 */
46 public static final int CONTENT_TYPE_PHOTO = 1;
47
Svetoslav Ganov798bed62013-08-11 12:29:39 -070048 private String mName;
Svetoslav Ganova0027152013-06-25 14:59:53 -070049 private int mPageCount;
50 private int mContentType;
51
52 /**
53 * Creates a new instance.
54 */
55 private PrintDocumentInfo() {
56 mPageCount = PAGE_COUNT_UNKNOWN;
57 mContentType = CONTENT_TYPE_UNKNOWN;
58 }
59
60 /**
61 * Creates a new instance.
62 *
63 * @param Prototype from which to clone.
64 */
65 private PrintDocumentInfo(PrintDocumentInfo prototype) {
Svetoslav Ganov798bed62013-08-11 12:29:39 -070066 mName = prototype.mName;
Svetoslav Ganova0027152013-06-25 14:59:53 -070067 mPageCount = prototype.mPageCount;
68 mContentType = prototype.mContentType;
69 }
70
71 /**
72 * Creates a new instance.
73 *
74 * @param parcel Data from which to initialize.
75 */
76 private PrintDocumentInfo(Parcel parcel) {
Svetoslav Ganov798bed62013-08-11 12:29:39 -070077 mName = parcel.readString();
Svetoslav Ganova0027152013-06-25 14:59:53 -070078 mPageCount = parcel.readInt();
79 mContentType = parcel.readInt();
80 }
81
82 /**
Svetoslav Ganov798bed62013-08-11 12:29:39 -070083 * Gets the document name.
84 *
85 * @return The document name.
86 */
87 public String getName() {
88 return mName;
89 }
90
91 /**
Svetoslav Ganova0027152013-06-25 14:59:53 -070092 * Gets the total number of pages.
93 *
94 * @return The number of pages.
95 *
96 * @see #PAGE_COUNT_UNKNOWN
97 */
98 public int getPageCount() {
99 return mPageCount;
100 }
101
102 /**
103 * Gets the content type.
104 *
105 * @return The content type.
106 *
107 * @see #CONTENT_TYPE_UNKNOWN
108 * @see #CONTENT_TYPE_DOCUMENT
109 * @see #CONTENT_TYPE_PHOTO
110 */
111 public int getContentType() {
112 return mContentType;
113 }
114
115 @Override
116 public int describeContents() {
117 return 0;
118 }
119
120 @Override
121 public void writeToParcel(Parcel parcel, int flags) {
Svetoslav Ganov798bed62013-08-11 12:29:39 -0700122 parcel.writeString(mName);
Svetoslav Ganova0027152013-06-25 14:59:53 -0700123 parcel.writeInt(mPageCount);
124 parcel.writeInt(mContentType);
125 }
126
Svetoslav Ganov88d19912013-07-22 12:32:03 -0700127 @Override
Svetoslav Ganov85b1f882013-07-24 17:00:06 -0700128 public int hashCode() {
129 final int prime = 31;
130 int result = 1;
Svetoslav Ganov798bed62013-08-11 12:29:39 -0700131 result = prime * result + ((mName != null) ? mName.hashCode() : 0);
Svetoslav Ganov85b1f882013-07-24 17:00:06 -0700132 result = prime * result + mContentType;
133 result = prime * result + mPageCount;
134 return result;
135 }
136
137 @Override
138 public boolean equals(Object obj) {
139 if (this == obj) {
140 return true;
141 }
142 if (obj == null) {
143 return false;
144 }
145 if (getClass() != obj.getClass()) {
146 return false;
147 }
148 PrintDocumentInfo other = (PrintDocumentInfo) obj;
Svetoslav Ganov798bed62013-08-11 12:29:39 -0700149 if (!TextUtils.equals(mName, other.mName)) {
150 return false;
151 }
Svetoslav Ganov85b1f882013-07-24 17:00:06 -0700152 if (mContentType != other.mContentType) {
153 return false;
154 }
155 if (mPageCount != other.mPageCount) {
156 return false;
157 }
158 return true;
159 }
160
161 @Override
Svetoslav Ganov88d19912013-07-22 12:32:03 -0700162 public String toString() {
163 StringBuilder builder = new StringBuilder();
164 builder.append("PrintDocumentInfo{");
Svetoslav Ganov798bed62013-08-11 12:29:39 -0700165 builder.append("name=").append(mName);
166 builder.append(", pageCount=").append(mPageCount);
167 builder.append(", contentType=").append(contentTyepToString(mContentType));
Svetoslav Ganov88d19912013-07-22 12:32:03 -0700168 builder.append("}");
169 return builder.toString();
170 }
171
Svetoslav Ganov798bed62013-08-11 12:29:39 -0700172 private String contentTyepToString(int contentType) {
173 switch (contentType) {
174 case CONTENT_TYPE_DOCUMENT: {
175 return "CONTENT_TYPE_DOCUMENT";
176 }
177 case CONTENT_TYPE_PHOTO: {
178 return "CONTENT_TYPE_PHOTO";
179 }
180 default: {
181 return "CONTENT_TYPE_UNKNOWN";
182 }
183 }
184 }
185
Svetoslav Ganova0027152013-06-25 14:59:53 -0700186 /**
187 * Builder for creating an {@link PrintDocumentInfo}.
188 */
189 public static final class Builder {
Svetoslav Ganov798bed62013-08-11 12:29:39 -0700190 private final PrintDocumentInfo mPrototype;
191
192 /**
193 * Constructor.
194 *
195 * @param name The document name. Cannot be empty.
196 *
197 * @throws IllegalArgumentException If the name is empty.
198 */
199 public Builder(String name) {
200 if (TextUtils.isEmpty(name)) {
201 throw new IllegalArgumentException("name cannot be empty");
202 }
203 mPrototype = new PrintDocumentInfo();
204 mPrototype.mName = name;
205 }
Svetoslav Ganova0027152013-06-25 14:59:53 -0700206
207 /**
208 * Sets the total number of pages.
209 *
210 * @param pageCount The number of pages. Must be greater than
211 * or equal to zero or {@link PrintDocumentInfo#PAGE_COUNT_UNKNOWN}.
212 */
213 public Builder setPageCount(int pageCount) {
214 if (pageCount < 0 && pageCount != PAGE_COUNT_UNKNOWN) {
215 throw new IllegalArgumentException("pageCount"
216 + " must be greater than or euqal to zero or"
217 + " DocumentInfo#PAGE_COUNT_UNKNOWN");
218 }
219 mPrototype.mPageCount = pageCount;
220 return this;
221 }
222
223 /**
224 * Sets the content type.
225 *
226 * @param type The content type.
227 *
228 * @see #CONTENT_TYPE_UNKNOWN
229 * @see #CONTENT_TYPE_DOCUMENT
230 * @see #CONTENT_TYPE_PHOTO
231 */
232 public Builder setContentType(int type) {
233 mPrototype.mContentType = type;
234 return this;
235 }
236
237 /**
238 * Creates a new {@link PrintDocumentInfo} instance.
239 *
240 * @return The new instance.
241 */
242 public PrintDocumentInfo create() {
243 return new PrintDocumentInfo(mPrototype);
244 }
245 }
246
247 public static final Parcelable.Creator<PrintDocumentInfo> CREATOR =
248 new Creator<PrintDocumentInfo>() {
249 @Override
250 public PrintDocumentInfo createFromParcel(Parcel parcel) {
251 return new PrintDocumentInfo(parcel);
252 }
253
254 @Override
255 public PrintDocumentInfo[] newArray(int size) {
256 return new PrintDocumentInfo[size];
257 }
258 };
259}