PrintJobInfo.java revision 9b6d3a153f44010a75907c6a9742c89a57d4e5ee
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
22import java.util.Arrays;
23
24/**
25 * This class represents the description of a print job.
26 */
27public final class PrintJobInfo implements Parcelable {
28
29    /**
30     * Constant for matching any print job state.
31     *
32     * @hide
33     */
34    public static final int STATE_ANY = -1;
35
36    /**
37     * Constant for matching any print job state.
38     *
39     * @hide
40     */
41    public static final int STATE_ANY_VISIBLE_TO_CLIENTS = -2;
42
43    /**
44     * Constant for matching any active print job state.
45     *
46     * @hide
47     */
48    public static final int STATE_ANY_ACTIVE = -3;
49
50    /**
51     * Constant for matching any scheduled, i.e. delivered to a print
52     * service, print job state.
53     *
54     * @hide
55     */
56    public static final int STATE_ANY_SCHEDULED = -4;
57
58    /**
59     * Print job state: The print job is being created but not yet
60     * ready to be printed.
61     * <p>
62     * Next valid states: {@link #STATE_QUEUED}
63     * </p>
64     */
65    public static final int STATE_CREATED = 1;
66
67    /**
68     * Print job state: The print jobs is created, it is ready
69     * to be printed and should be processed.
70     * <p>
71     * Next valid states: {@link #STATE_STARTED}, {@link #STATE_FAILED},
72     * {@link #STATE_CANCELED}
73     * </p>
74     */
75    public static final int STATE_QUEUED = 2;
76
77    /**
78     * Print job state: The print job is being printed.
79     * <p>
80     * Next valid states: {@link #STATE_COMPLETED}, {@link #STATE_FAILED},
81     * {@link #STATE_CANCELED}, {@link #STATE_BLOCKED}
82     * </p>
83     */
84    public static final int STATE_STARTED = 3;
85
86    /**
87     * Print job state: The print job is blocked.
88     * <p>
89     * Next valid states: {@link #STATE_FAILED}, {@link #STATE_CANCELED},
90     * {@link #STATE_STARTED}
91     * </p>
92     */
93    public static final int STATE_BLOCKED = 4;
94
95    /**
96     * Print job state: The print job was successfully printed.
97     * This is a terminal state.
98     * <p>
99     * Next valid states: None
100     * </p>
101     */
102    public static final int STATE_COMPLETED = 5;
103
104    /**
105     * Print job state: The print job was printing but printing failed.
106     * This is a terminal state.
107     * <p>
108     * Next valid states: None
109     * </p>
110     */
111    public static final int STATE_FAILED = 6;
112
113    /**
114     * Print job state: The print job was canceled.
115     * This is a terminal state.
116     * <p>
117     * Next valid states: None
118     * </p>
119     */
120    public static final int STATE_CANCELED = 7;
121
122    /** The unique print job id. */
123    private PrintJobId mId;
124
125    /** The human readable print job label. */
126    private String mLabel;
127
128    /** The unique id of the printer. */
129    private PrinterId mPrinterId;
130
131    /** The name of the printer - internally used */
132    private String mPrinterName;
133
134    /** The status of the print job. */
135    private int mState;
136
137    /** The id of the app that created the job. */
138    private int mAppId;
139
140    /** Optional tag assigned by a print service.*/
141    private String mTag;
142
143    /** The wall time when the print job was created. */
144    private long mCreationTime;
145
146    /** How many copies to print. */
147    private int mCopies;
148
149    /** Reason for the print job being in its current state. */
150    private String mStateReason;
151
152    /** The pages to print */
153    private PageRange[] mPageRanges;
154
155    /** The print job attributes size. */
156    private PrintAttributes mAttributes;
157
158    /** Information about the printed document. */
159    private PrintDocumentInfo mDocumentInfo;
160
161    /** Whether we are trying to cancel this print job. */
162    private boolean mCanceling;
163
164    /** @hide*/
165    public PrintJobInfo() {
166        /* do nothing */
167    }
168
169    /** @hide */
170    public PrintJobInfo(PrintJobInfo other) {
171        mId = other.mId;
172        mLabel = other.mLabel;
173        mPrinterId = other.mPrinterId;
174        mPrinterName = other.mPrinterName;
175        mState = other.mState;
176        mAppId = other.mAppId;
177        mTag = other.mTag;
178        mCreationTime = other.mCreationTime;
179        mCopies = other.mCopies;
180        mStateReason = other.mStateReason;
181        mPageRanges = other.mPageRanges;
182        mAttributes = other.mAttributes;
183        mDocumentInfo = other.mDocumentInfo;
184        mCanceling = other.mCanceling;
185    }
186
187    private PrintJobInfo(Parcel parcel) {
188        mId = parcel.readParcelable(null);
189        mLabel = parcel.readString();
190        mPrinterId = parcel.readParcelable(null);
191        mPrinterName = parcel.readString();
192        mState = parcel.readInt();
193        mAppId = parcel.readInt();
194        mTag = parcel.readString();
195        mCreationTime = parcel.readLong();
196        mCopies = parcel.readInt();
197        mStateReason = parcel.readString();
198        if (parcel.readInt() == 1) {
199            Parcelable[] parcelables = parcel.readParcelableArray(null);
200            mPageRanges = new PageRange[parcelables.length];
201            for (int i = 0; i < parcelables.length; i++) {
202                mPageRanges[i] = (PageRange) parcelables[i];
203            }
204        }
205        if (parcel.readInt() == 1) {
206            mAttributes = PrintAttributes.CREATOR.createFromParcel(parcel);
207        }
208        if (parcel.readInt() == 1) {
209            mDocumentInfo = PrintDocumentInfo.CREATOR.createFromParcel(parcel);
210        }
211        mCanceling = (parcel.readInt() == 1);
212    }
213
214    /**
215     * Gets the unique print job id.
216     *
217     * @return The id.
218     */
219    public PrintJobId getId() {
220        return mId;
221    }
222
223    /**
224     * Sets the unique print job id.
225     *
226     * @param The job id.
227     *
228     * @hide
229     */
230    public void setId(PrintJobId id) {
231        this.mId = id;
232    }
233
234    /**
235     * Gets the human readable job label.
236     *
237     * @return The label.
238     */
239    public String getLabel() {
240        return mLabel;
241    }
242
243    /**
244     * Sets the human readable job label.
245     *
246     * @param label The label.
247     *
248     * @hide
249     */
250    public void setLabel(String label) {
251        mLabel = label;
252    }
253
254    /**
255     * Gets the unique target printer id.
256     *
257     * @return The target printer id.
258     */
259    public PrinterId getPrinterId() {
260        return mPrinterId;
261    }
262
263    /**
264     * Sets the unique target pritner id.
265     *
266     * @param printerId The target printer id.
267     *
268     * @hide
269     */
270    public void setPrinterId(PrinterId printerId) {
271        mPrinterId = printerId;
272    }
273
274    /**
275     * Gets the name of the target printer.
276     *
277     * @return The printer name.
278     *
279     * @hide
280     */
281    public String getPrinterName() {
282        return mPrinterName;
283    }
284
285    /**
286     * Sets the name of the target printer.
287     *
288     * @param printerName The printer name.
289     *
290     * @hide
291     */
292    public void setPrinterName(String printerName) {
293        mPrinterName = printerName;
294    }
295
296    /**
297     * Gets the current job state.
298     *
299     * @return The job state.
300     */
301    public int getState() {
302        return mState;
303    }
304
305    /**
306     * Sets the current job state.
307     *
308     * @param state The job state.
309     *
310     * @hide
311     */
312    public void setState(int state) {
313        mState = state;
314    }
315
316    /**
317     * Sets the owning application id.
318     *
319     * @return The owning app id.
320     *
321     * @hide
322     */
323    public int getAppId() {
324        return mAppId;
325    }
326
327    /**
328     * Sets the owning application id.
329     *
330     * @param appId The owning app id.
331     *
332     * @hide
333     */
334    public void setAppId(int appId) {
335        mAppId = appId;
336    }
337
338    /**
339     * Gets the optional tag assigned by a print service.
340     *
341     * @return The tag.
342     *
343     * @hide
344     */
345    public String getTag() {
346        return mTag;
347    }
348
349    /**
350     * Sets the optional tag assigned by a print service.
351     *
352     * @param tag The tag.
353     *
354     * @hide
355     */
356    public void setTag(String tag) {
357        mTag = tag;
358    }
359
360    /**
361     * Gets the wall time in millisecond when this print job was created.
362     *
363     * @return The creation time in milliseconds.
364     */
365    public long getCreationTime() {
366        return mCreationTime;
367    }
368
369    /**
370     * Sets the wall time in milliseconds when this print job was created.
371     *
372     * @param creationTime The creation time in milliseconds.
373     *
374     * @hide
375     */
376    public void setCreationTime(long creationTime) {
377        if (creationTime < 0) {
378            throw new IllegalArgumentException("creationTime must be non-negative.");
379        }
380        mCreationTime = creationTime;
381    }
382
383    /**
384     * Gets the number of copies.
385     *
386     * @return The number of copies or zero if not set.
387     */
388    public int getCopies() {
389        return mCopies;
390    }
391
392    /**
393     * Sets the number of copies.
394     *
395     * @param copyCount The number of copies.
396     *
397     * @hide
398     */
399    public void setCopies(int copyCount) {
400        if (copyCount < 1) {
401            throw new IllegalArgumentException("Copies must be more than one.");
402        }
403        mCopies = copyCount;
404    }
405
406    /**
407     * Gets the reason for the print job being in the current state.
408     *
409     * @return The reason, or null if there is no reason or the
410     * reason is unknown.
411     *
412     * @hide
413     */
414    public String getStateReason() {
415        return mStateReason;
416    }
417
418    /**
419     * Sets the reason for the print job being in the current state.
420     *
421     * @param stateReason The reason, or null if there is no reason
422     * or the reason is unknown.
423     *
424     * @hide
425     */
426    public void setStateReason(String stateReason) {
427        mStateReason = stateReason;
428    }
429
430    /**
431     * Gets the included pages.
432     *
433     * @return The included pages or <code>null</code> if not set.
434     */
435    public PageRange[] getPages() {
436        return mPageRanges;
437    }
438
439    /**
440     * Sets the included pages.
441     *
442     * @return The included pages.
443     *
444     * @hide
445     */
446    public void setPages(PageRange[] pageRanges) {
447        mPageRanges = pageRanges;
448    }
449
450    /**
451     * Gets the print job attributes.
452     *
453     * @return The attributes.
454     */
455    public PrintAttributes getAttributes() {
456        return mAttributes;
457    }
458
459    /**
460     * Sets the print job attributes.
461     *
462     * @param attributes The attributes.
463     *
464     * @hide
465     */
466    public void setAttributes(PrintAttributes attributes) {
467        mAttributes = attributes;
468    }
469
470    /**
471     * Gets the info describing the printed document.
472     *
473     * @return The document info.
474     *
475     * @hide
476     */
477    public PrintDocumentInfo getDocumentInfo() {
478        return mDocumentInfo;
479    }
480
481    /**
482     * Sets the info describing the printed document.
483     *
484     * @param info The document info.
485     *
486     * @hide
487     */
488    public void setDocumentInfo(PrintDocumentInfo info) {
489        mDocumentInfo = info;
490    }
491
492    /**
493     * Gets whether this print is being cancelled.
494     *
495     * @return True if the print job is being cancelled.
496     *
497     * @hide
498     */
499    public boolean isCancelling() {
500        return mCanceling;
501    }
502
503    /**
504     * Sets whether this print is being cancelled.
505     *
506     * @param cancelling True if the print job is being cancelled.
507     *
508     * @hide
509     */
510    public void setCancelling(boolean cancelling) {
511        mCanceling = cancelling;
512    }
513
514    @Override
515    public int describeContents() {
516        return 0;
517    }
518
519    @Override
520    public void writeToParcel(Parcel parcel, int flags) {
521        parcel.writeParcelable(mId, flags);
522        parcel.writeString(mLabel);
523        parcel.writeParcelable(mPrinterId, flags);
524        parcel.writeString(mPrinterName);
525        parcel.writeInt(mState);
526        parcel.writeInt(mAppId);
527        parcel.writeString(mTag);
528        parcel.writeLong(mCreationTime);
529        parcel.writeInt(mCopies);
530        parcel.writeString(mStateReason);
531        if (mPageRanges != null) {
532            parcel.writeInt(1);
533            parcel.writeParcelableArray(mPageRanges, flags);
534        } else {
535            parcel.writeInt(0);
536        }
537        if (mAttributes != null) {
538            parcel.writeInt(1);
539            mAttributes.writeToParcel(parcel, flags);
540        } else {
541            parcel.writeInt(0);
542        }
543        if (mDocumentInfo != null) {
544            parcel.writeInt(1);
545            mDocumentInfo.writeToParcel(parcel, flags);
546        } else {
547            parcel.writeInt(0);
548        }
549        parcel.writeInt(mCanceling ? 1 : 0);
550    }
551
552    @Override
553    public String toString() {
554        StringBuilder builder = new StringBuilder();
555        builder.append("PrintJobInfo{");
556        builder.append("label: ").append(mLabel);
557        builder.append(", id: ").append(mId);
558        builder.append(", status: ").append(stateToString(mState));
559        builder.append(", printer: " + mPrinterId);
560        builder.append(", tag: ").append(mTag);
561        builder.append(", creationTime: " + mCreationTime);
562        builder.append(", copies: ").append(mCopies);
563        builder.append(", attributes: " + (mAttributes != null
564                ? mAttributes.toString() : null));
565        builder.append(", documentInfo: " + (mDocumentInfo != null
566                ? mDocumentInfo.toString() : null));
567        builder.append(", cancelling: " + mCanceling);
568        builder.append(", pages: " + (mPageRanges != null
569                ? Arrays.toString(mPageRanges) : null));
570        builder.append("}");
571        return builder.toString();
572    }
573
574    /** @hide */
575    public static String stateToString(int state) {
576        switch (state) {
577            case STATE_CREATED: {
578                return "STATE_CREATED";
579            }
580            case STATE_QUEUED: {
581                return "STATE_QUEUED";
582            }
583            case STATE_STARTED: {
584                return "STATE_STARTED";
585            }
586            case STATE_FAILED: {
587                return "STATE_FAILED";
588            }
589            case STATE_COMPLETED: {
590                return "STATE_COMPLETED";
591            }
592            case STATE_CANCELED: {
593                return "STATE_CANCELED";
594            }
595            default: {
596                return "STATE_UNKNOWN";
597            }
598        }
599    }
600
601    public static final Parcelable.Creator<PrintJobInfo> CREATOR =
602            new Creator<PrintJobInfo>() {
603        @Override
604        public PrintJobInfo createFromParcel(Parcel parcel) {
605            return new PrintJobInfo(parcel);
606        }
607
608        @Override
609        public PrintJobInfo[] newArray(int size) {
610            return new PrintJobInfo[size];
611        }
612    };
613}
614