PrintJobInfo.java revision a00271533f639c8ed36429c663889ac9f654bc72
1/*
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;
21
22/**
23 * This class represents the description of a print job.
24 */
25public final class PrintJobInfo implements Parcelable {
26
27    /** Undefined print job id. */
28    public static final int PRINT_JOB_ID_UNDEFINED = -1;
29
30    /**
31     * Constant for matching any print job state.
32     *
33     * @hide
34     */
35    public static final int STATE_ANY = -1;
36
37    /**
38     * Print job state: The print job is being created but not yet
39     * ready to be printed.
40     * <p>
41     * Next valid states: {@link #STATE_QUEUED}
42     * </p>
43     */
44    public static final int STATE_CREATED = 1;
45
46    /**
47     * Print job status: The print jobs is created, it is ready
48     * to be printed and should be processed.
49     * <p>
50     * Next valid states: {@link #STATE_STARTED}, {@link #STATE_FAILED},
51     * {@link #STATE_CANCELED}
52     * </p>
53     */
54    public static final int STATE_QUEUED = 2;
55
56    /**
57     * Print job status: The print job is being printed.
58     * <p>
59     * Next valid states: {@link #STATE_COMPLETED}, {@link #STATE_FAILED},
60     * {@link #STATE_CANCELED}
61     * </p>
62     */
63    public static final int STATE_STARTED = 3;
64
65    /**
66     * Print job status: The print job was successfully printed.
67     * This is a terminal state.
68     * <p>
69     * Next valid states: None
70     * </p>
71     */
72    public static final int STATE_COMPLETED = 4;
73
74    /**
75     * Print job status: The print job was printing but printing failed.
76     * This is a terminal state.
77     * <p>
78     * Next valid states: None
79     * </p>
80     */
81    public static final int STATE_FAILED = 5;
82
83    /**
84     * Print job status: The print job was canceled.
85     * This is a terminal state.
86     * <p>
87     * Next valid states: None
88     * </p>
89     */
90    public static final int STATE_CANCELED = 6;
91
92    /** The unique print job id. */
93    private int mId;
94
95    /** The human readable print job label. */
96    private CharSequence mLabel;
97
98    /** The unique id of the printer. */
99    private PrinterId mPrinterId;
100
101    /** The status of the print job. */
102    private int mState;
103
104    /** The id of the app that created the job. */
105    private int mAppId;
106
107    /** The id of the user that created the job. */
108    private int mUserId;
109
110    /** Optional tag assigned by a print service.*/
111    private String mTag;
112
113    /** The pages to print */
114    private PageRange[] mPageRanges;
115
116    /** The print job attributes size. */
117    private PrintAttributes mAttributes;
118
119    /** Information about the printed document. */
120    private PrintDocumentInfo mDocumentInfo;
121
122    /** @hide*/
123    public PrintJobInfo() {
124        /* do nothing */
125    }
126
127    /** @hide */
128    public PrintJobInfo(PrintJobInfo other) {
129        mId = other.mId;
130        mLabel = other.mLabel;
131        mPrinterId = other.mPrinterId;
132        mState = other.mState;
133        mAppId = other.mAppId;
134        mUserId = other.mUserId;
135        mAttributes = other.mAttributes;
136        mDocumentInfo = other.mDocumentInfo;
137    }
138
139    private PrintJobInfo(Parcel parcel) {
140        mId = parcel.readInt();
141        mLabel = parcel.readCharSequence();
142        mPrinterId = parcel.readParcelable(null);
143        mState = parcel.readInt();
144        mAppId = parcel.readInt();
145        mUserId = parcel.readInt();
146        if (parcel.readInt() == 1) {
147            mPageRanges = (PageRange[]) parcel.readParcelableArray(null);
148        }
149        if (parcel.readInt() == 1) {
150            mAttributes = PrintAttributes.CREATOR.createFromParcel(parcel);
151        }
152        if (parcel.readInt() == 1) {
153            mDocumentInfo = PrintDocumentInfo.CREATOR.createFromParcel(parcel);
154        }
155    }
156
157    /**
158     * Gets the unique print job id.
159     *
160     * @return The id.
161     */
162    public int getId() {
163        return mId;
164    }
165
166    /**
167     * Sets the unique print job id.
168     *
169     * @param The job id.
170     *
171     * @hide
172     */
173    public void setId(int id) {
174        this.mId = id;
175    }
176
177    /**
178     * Gets the human readable job label.
179     *
180     * @return The label.
181     */
182    public CharSequence getLabel() {
183        return mLabel;
184    }
185
186    /**
187     * Sets the human readable job label.
188     *
189     * @param label The label.
190     *
191     * @hide
192     */
193    public void setLabel(CharSequence label) {
194        mLabel = label;
195    }
196
197    /**
198     * Gets the unique target printer id.
199     *
200     * @return The target printer id.
201     */
202    public PrinterId getPrinterId() {
203        return mPrinterId;
204    }
205
206    /**
207     * Sets the unique target pritner id.
208     *
209     * @param printerId The target printer id.
210     *
211     * @hide
212     */
213    public void setPrinterId(PrinterId printerId) {
214        mPrinterId = printerId;
215    }
216
217    /**
218     * Gets the current job state.
219     *
220     * @return The job state.
221     */
222    public int getState() {
223        return mState;
224    }
225
226    /**
227     * Sets the current job state.
228     *
229     * @param state The job state.
230     *
231     * @hide
232     */
233    public void setState(int state) {
234        mState = state;
235    }
236
237    /**
238     * Sets the owning application id.
239     *
240     * @return The owning app id.
241     *
242     * @hide
243     */
244    public int getAppId() {
245        return mAppId;
246    }
247
248    /**
249     * Sets the owning application id.
250     *
251     * @param appId The owning app id.
252     *
253     * @hide
254     */
255    public void setAppId(int appId) {
256        mAppId = appId;
257    }
258
259    /**
260     * Gets the owning user id.
261     *
262     * @return The user id.
263     *
264     * @hide
265     */
266    public int getUserId() {
267        return mUserId;
268    }
269
270    /**
271     * Sets the owning user id.
272     *
273     * @param userId The user id.
274     *
275     * @hide
276     */
277    public void setUserId(int userId) {
278        mUserId = userId;
279    }
280
281    /**
282     * Gets the optional tag assigned by a print service.
283     *
284     * @return The tag.
285     */
286    public String getTag() {
287        return mTag;
288    }
289
290    /**
291     * Sets the optional tag assigned by a print service.
292     *
293     * @param tag The tag.
294     *
295     * @hide
296     */
297    public void setTag(String tag) {
298        mTag = tag;
299    }
300
301    /**
302     * Gets the included pages.
303     *
304     * @return The included pages or <code>null</code> if not set.
305     */
306    public PageRange[] getPages() {
307        return mPageRanges;
308    }
309
310    /**
311     * Sets the included pages.
312     *
313     * @return The included pages.
314     *
315     * @hide
316     */
317    public void setPages(PageRange[] pageRanges) {
318        mPageRanges = pageRanges;
319    }
320
321    /**
322     * Gets the print job attributes.
323     *
324     * @return The attributes.
325     */
326    public PrintAttributes getAttributes() {
327        return mAttributes;
328    }
329
330    /**
331     * Sets the print job attributes.
332     *
333     * @param attributes The attributes.
334     *
335     * @hide
336     */
337    public void setAttributes(PrintAttributes attributes) {
338        mAttributes = attributes;
339    }
340
341    /**
342     * Gets the info describing the printed document.
343     *
344     * @return The document info.
345     *
346     * @hide
347     */
348    public PrintDocumentInfo getDocumentInfo() {
349        return mDocumentInfo;
350    }
351
352    /**
353     * Sets the info describing the printed document.
354     *
355     * @param info The document info.
356     *
357     * @hide
358     */
359    public void setDocumentInfo(PrintDocumentInfo info) {
360        mDocumentInfo = info;
361    }
362
363    @Override
364    public int describeContents() {
365        return 0;
366    }
367
368    @Override
369    public void writeToParcel(Parcel parcel, int flags) {
370        parcel.writeInt(mId);
371        parcel.writeCharSequence(mLabel);
372        parcel.writeParcelable(mPrinterId, flags);
373        parcel.writeInt(mState);
374        parcel.writeInt(mAppId);
375        parcel.writeInt(mUserId);
376        if (mPageRanges != null) {
377            parcel.writeInt(1);
378            parcel.writeParcelableArray(mPageRanges, flags);
379        } else {
380            parcel.writeInt(0);
381        }
382        if (mAttributes != null) {
383            parcel.writeInt(1);
384            mAttributes.writeToParcel(parcel, flags);
385        } else {
386            parcel.writeInt(0);
387        }
388        if (mDocumentInfo != null) {
389            parcel.writeInt(1);
390            mDocumentInfo.writeToParcel(parcel, flags);
391        } else {
392            parcel.writeInt(0);
393        }
394    }
395
396    @Override
397    public String toString() {
398        StringBuilder builder = new StringBuilder();
399        builder.append("PrintJobInfo{");
400        builder.append("label: ").append(mLabel);
401        builder.append(", id: ").append(mId);
402        builder.append(", status: ").append(stateToString(mState));
403        builder.append(", printer: " + mPrinterId);
404        builder.append(", attributes: " + (mAttributes != null
405                ? mAttributes.toString() : null));
406        builder.append(", documentInfo: " + (mDocumentInfo != null
407                ? mDocumentInfo.toString() : null));
408        builder.append("}");
409        return builder.toString();
410    }
411
412    /** @hide */
413    public static String stateToString(int state) {
414        switch (state) {
415            case STATE_CREATED: {
416                return "STATUS_CREATED";
417            }
418            case STATE_QUEUED: {
419                return "STATE_QUEUED";
420            }
421            case STATE_STARTED: {
422                return "STATE_STARTED";
423            }
424            case STATE_FAILED: {
425                return "STATUS_FAILED";
426            }
427            case STATE_COMPLETED: {
428                return "STATUS_COMPLETED";
429            }
430            case STATE_CANCELED: {
431                return "STATUS_CANCELED";
432            }
433            default: {
434                return "STATUS_UNKNOWN";
435            }
436        }
437    }
438
439
440    public static final Parcelable.Creator<PrintJobInfo> CREATOR =
441            new Creator<PrintJobInfo>() {
442        @Override
443        public PrintJobInfo createFromParcel(Parcel parcel) {
444            return new PrintJobInfo(parcel);
445        }
446
447        @Override
448        public PrintJobInfo[] newArray(int size) {
449            return new PrintJobInfo[size];
450        }
451    };
452}
453