14b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/*
24b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Copyright (C) 2013 The Android Open Source Project
34b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *
44b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License");
54b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * you may not use this file except in compliance with the License.
64b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * You may obtain a copy of the License at
74b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *
84b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *      http://www.apache.org/licenses/LICENSE-2.0
94b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *
104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Unless required by applicable law or agreed to in writing, software
114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS,
124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * See the License for the specific language governing permissions and
144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * limitations under the License.
154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */
164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpackage android.print;
184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
19b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmannimport android.annotation.FloatRange;
20c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport android.annotation.IntDef;
21c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport android.annotation.IntRange;
22c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport android.annotation.NonNull;
23b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmannimport android.annotation.Nullable;
24d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmannimport android.annotation.StringRes;
25b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmannimport android.annotation.TestApi;
26d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmannimport android.content.pm.PackageManager;
27d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmannimport android.content.res.Resources;
28b4fda134761c9521a7e127db3806a07a18763b77Svetoslavimport android.os.Bundle;
294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcel;
304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcelable;
314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
32b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmannimport com.android.internal.util.Preconditions;
33b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
34c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport java.lang.annotation.Retention;
35c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport java.lang.annotation.RetentionPolicy;
3685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganovimport java.util.Arrays;
3785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov
384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/**
394d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * This class represents the description of a print job. The print job
404d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * state includes properties such as its id, print attributes used for
414d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * generating the content, and so on. Note that the print jobs state may
424d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * change over time and this class represents a snapshot of this state.
434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */
444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpublic final class PrintJobInfo implements Parcelable {
454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
46c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    /** @hide */
47c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    @IntDef({
48c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann            STATE_CREATED, STATE_QUEUED, STATE_STARTED, STATE_BLOCKED, STATE_COMPLETED,
49c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann            STATE_FAILED, STATE_CANCELED
50c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    })
51c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    @Retention(RetentionPolicy.SOURCE)
52c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public @interface State {
53c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    }
54c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann
554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Constant for matching any print job state.
574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static final int STATE_ANY = -1;
614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
6388d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov     * Constant for matching any print job state.
6488d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov     *
6588d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov     * @hide
6688d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov     */
6788d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov    public static final int STATE_ANY_VISIBLE_TO_CLIENTS = -2;
6888d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov
6988d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov    /**
70d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * Constant for matching any active print job state.
71d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     *
72d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * @hide
73d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     */
74d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    public static final int STATE_ANY_ACTIVE = -3;
75d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov
76d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    /**
779b6d3a153f44010a75907c6a9742c89a57d4e5eeSvetoslav Ganov     * Constant for matching any scheduled, i.e. delivered to a print
789b6d3a153f44010a75907c6a9742c89a57d4e5eeSvetoslav Ganov     * service, print job state.
799b6d3a153f44010a75907c6a9742c89a57d4e5eeSvetoslav Ganov     *
809b6d3a153f44010a75907c6a9742c89a57d4e5eeSvetoslav Ganov     * @hide
819b6d3a153f44010a75907c6a9742c89a57d4e5eeSvetoslav Ganov     */
829b6d3a153f44010a75907c6a9742c89a57d4e5eeSvetoslav Ganov    public static final int STATE_ANY_SCHEDULED = -4;
839b6d3a153f44010a75907c6a9742c89a57d4e5eeSvetoslav Ganov
849b6d3a153f44010a75907c6a9742c89a57d4e5eeSvetoslav Ganov    /**
854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Print job state: The print job is being created but not yet
864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * ready to be printed.
874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Next valid states: {@link #STATE_QUEUED}
894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static final int STATE_CREATED = 1;
924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
94d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * Print job state: The print jobs is created, it is ready
954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * to be printed and should be processed.
964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Next valid states: {@link #STATE_STARTED}, {@link #STATE_FAILED},
984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * {@link #STATE_CANCELED}
994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
1004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
1014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static final int STATE_QUEUED = 2;
1024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
104d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * Print job state: The print job is being printed.
1054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
1064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Next valid states: {@link #STATE_COMPLETED}, {@link #STATE_FAILED},
107d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * {@link #STATE_CANCELED}, {@link #STATE_BLOCKED}
1084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
1094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
1104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static final int STATE_STARTED = 3;
1114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
113d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * Print job state: The print job is blocked.
114d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * <p>
115d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * Next valid states: {@link #STATE_FAILED}, {@link #STATE_CANCELED},
116d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * {@link #STATE_STARTED}
117d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * </p>
118d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     */
119d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    public static final int STATE_BLOCKED = 4;
120d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov
121d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    /**
1224d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     * Print job state: The print job is successfully printed.
1234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * This is a terminal state.
1244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
1254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Next valid states: None
1264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
1274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
128d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    public static final int STATE_COMPLETED = 5;
1294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
131d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov     * Print job state: The print job was printing but printing failed.
1324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
1334d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     * Next valid states: {@link #STATE_CANCELED}, {@link #STATE_STARTED}
1344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
1354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
136d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    public static final int STATE_FAILED = 6;
1374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
1394d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     * Print job state: The print job is canceled.
1404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * This is a terminal state.
1414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
1424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Next valid states: None
1434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
1444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
145d26d4898fcc9b78f4b66118895c375384098205eSvetoslav Ganov    public static final int STATE_CANCELED = 7;
1464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /** The unique print job id. */
1482fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    private PrintJobId mId;
1494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /** The human readable print job label. */
151269403b032f965ff3847eb982c2f697229dc5a92Svetoslav    private String mLabel;
1524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /** The unique id of the printer. */
1544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private PrinterId mPrinterId;
1554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
156798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    /** The name of the printer - internally used */
157798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    private String mPrinterName;
158798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov
159d91cb3ea61ea5096637c5d2b5e3e6147d0d2cce3Svetoslav Ganov    /** The state of the print job. */
1604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private int mState;
1614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /** The id of the app that created the job. */
1634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private int mAppId;
1644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /** Optional tag assigned by a print service.*/
1664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private String mTag;
1674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
168704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov    /** The wall time when the print job was created. */
169704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov    private long mCreationTime;
170704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov
17185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    /** How many copies to print. */
17285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    private int mCopies;
17385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov
1744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /** The pages to print */
1754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private PageRange[] mPageRanges;
1764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /** The print job attributes size. */
1784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private PrintAttributes mAttributes;
1794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
180a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /** Information about the printed document. */
181a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    private PrintDocumentInfo mDocumentInfo;
182a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
183b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    /** The progress made on printing this job or -1 if not set. */
184b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    private float mProgress;
185b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
186b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    /** A short string describing the status of this job. */
187d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann    private @Nullable CharSequence mStatus;
188d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann
189d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann    /** A string resource describing the status of this job. */
190d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann    private @StringRes int mStatusRes;
191d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann    private @Nullable CharSequence mStatusResAppPackageName;
192b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
193b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    /** Advanced printer specific options. */
194b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    private Bundle mAdvancedOptions;
195b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
196a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov    /** Whether we are trying to cancel this print job. */
197a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov    private boolean mCanceling;
198a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov
199a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /** @hide*/
200a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public PrintJobInfo() {
201b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        mProgress = -1;
202a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
203a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
204a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /** @hide */
205a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public PrintJobInfo(PrintJobInfo other) {
206a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mId = other.mId;
207a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mLabel = other.mLabel;
208a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mPrinterId = other.mPrinterId;
209798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        mPrinterName = other.mPrinterName;
210a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mState = other.mState;
211a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mAppId = other.mAppId;
21288d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        mTag = other.mTag;
213704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov        mCreationTime = other.mCreationTime;
21485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        mCopies = other.mCopies;
21585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        mPageRanges = other.mPageRanges;
216a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mAttributes = other.mAttributes;
217a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mDocumentInfo = other.mDocumentInfo;
218b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        mProgress = other.mProgress;
219b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        mStatus = other.mStatus;
220d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        mStatusRes = other.mStatusRes;
221d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        mStatusResAppPackageName = other.mStatusResAppPackageName;
222a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov        mCanceling = other.mCanceling;
223b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        mAdvancedOptions = other.mAdvancedOptions;
224a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
225a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
226c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    private PrintJobInfo(@NonNull Parcel parcel) {
2272fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        mId = parcel.readParcelable(null);
228269403b032f965ff3847eb982c2f697229dc5a92Svetoslav        mLabel = parcel.readString();
229a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mPrinterId = parcel.readParcelable(null);
230798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        mPrinterName = parcel.readString();
231a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mState = parcel.readInt();
232a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mAppId = parcel.readInt();
23388d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        mTag = parcel.readString();
234704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov        mCreationTime = parcel.readLong();
23585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        mCopies = parcel.readInt();
236b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        Parcelable[] parcelables = parcel.readParcelableArray(null);
237b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        if (parcelables != null) {
23885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            mPageRanges = new PageRange[parcelables.length];
23985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            for (int i = 0; i < parcelables.length; i++) {
24085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov                mPageRanges[i] = (PageRange) parcelables[i];
24185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            }
242a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        }
243b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        mAttributes = (PrintAttributes) parcel.readParcelable(null);
244b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        mDocumentInfo = (PrintDocumentInfo) parcel.readParcelable(null);
245b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        mProgress = parcel.readFloat();
246b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        mStatus = parcel.readCharSequence();
247d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        mStatusRes = parcel.readInt();
248d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        mStatusResAppPackageName = parcel.readCharSequence();
249a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov        mCanceling = (parcel.readInt() == 1);
250b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        mAdvancedOptions = parcel.readBundle();
251d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann
252d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        if (mAdvancedOptions != null) {
253d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann            Preconditions.checkArgument(!mAdvancedOptions.containsKey(null));
254d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        }
255a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    }
256a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov
2574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
2584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Gets the unique print job id.
2594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
2604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The id.
2614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
26222f86b4e77c77312e8b3f08fc598be00c323f750Philip P. Moltmann    public @Nullable PrintJobId getId() {
2634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mId;
2644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
2674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Sets the unique print job id.
2684b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
269b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * @param id The job id.
2704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
2714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
2724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
273c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public void setId(@NonNull PrintJobId id) {
2744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        this.mId = id;
2754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
2784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Gets the human readable job label.
2794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
2804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The label.
2814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
282c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public @NonNull String getLabel() {
2834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mLabel;
2844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
2874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Sets the human readable job label.
2884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
2894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param label The label.
2904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
2914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
2924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
293c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public void setLabel(@NonNull String label) {
2944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mLabel = label;
2954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
2984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Gets the unique target printer id.
2994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
3004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The target printer id.
3014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
302c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public @Nullable PrinterId getPrinterId() {
3034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mPrinterId;
3044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
3054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
3064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
307b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * Sets the unique target printer id.
3084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
3094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param printerId The target printer id.
3104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
3114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
3124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
313c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public void setPrinterId(@NonNull PrinterId printerId) {
3144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mPrinterId = printerId;
3154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
3164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
3174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
318798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     * Gets the name of the target printer.
319798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     *
320798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     * @return The printer name.
321798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     *
322798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     * @hide
323798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     */
324c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public @Nullable String getPrinterName() {
325798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        return mPrinterName;
326798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    }
327798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov
328798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    /**
329798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     * Sets the name of the target printer.
330798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     *
331798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     * @param printerName The printer name.
332798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     *
333798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     * @hide
334798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov     */
335c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public void setPrinterName(@NonNull String printerName) {
336798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        mPrinterName = printerName;
337798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    }
338798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov
339798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov    /**
3404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Gets the current job state.
3414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
3424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The job state.
3434d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     *
3444d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     * @see #STATE_CREATED
3454d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     * @see #STATE_QUEUED
3464d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     * @see #STATE_STARTED
3474d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     * @see #STATE_COMPLETED
3484d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     * @see #STATE_BLOCKED
3494d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     * @see #STATE_FAILED
3504d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov     * @see #STATE_CANCELED
3514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
352c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public @State int getState() {
3534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mState;
3544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
3554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
3564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
3574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Sets the current job state.
3584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
3594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param state The job state.
3604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
3614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
3624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
3634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public void setState(int state) {
3644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mState = state;
3654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
3664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
3674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
368b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * Sets the progress of the print job.
369b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     *
370b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * @param progress the progress of the job
371b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     *
372b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * @hide
373b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     */
374b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    public void setProgress(@FloatRange(from=0.0, to=1.0) float progress) {
375b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        Preconditions.checkArgumentInRange(progress, 0, 1, "progress");
376b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
377b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        mProgress = progress;
378b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    }
379b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
380b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    /**
381b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * Sets the status of the print job.
382b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     *
383b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * @param status the status of the job, can be null
384b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     *
385b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * @hide
386b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     */
387b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    public void setStatus(@Nullable CharSequence status) {
388d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        mStatusRes = 0;
389d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        mStatusResAppPackageName = null;
390d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann
391b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        mStatus = status;
392b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    }
393b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
394b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    /**
395d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann     * Sets the status of the print job.
396d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann     *
397d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann     * @param status The new status as a string resource
398d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann     * @param appPackageName App package name the resource belongs to
399d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann     *
400d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann     * @hide
401d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann     */
402d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann    public void setStatus(@StringRes int status, @NonNull CharSequence appPackageName) {
403d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        mStatus = null;
404d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann
405d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        mStatusRes = status;
406d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        mStatusResAppPackageName = appPackageName;
407d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann    }
408d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann
409d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann    /**
4104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Sets the owning application id.
4114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
4124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The owning app id.
4134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
4144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
4154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
4164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public int getAppId() {
4174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mAppId;
4184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
4194b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
4204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
4214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Sets the owning application id.
4224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
4234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param appId The owning app id.
4244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
4254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
4264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
4274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public void setAppId(int appId) {
4284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mAppId = appId;
4294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
4304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
4314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
4324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Gets the optional tag assigned by a print service.
4334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
4344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The tag.
435b450d0d4d7fca16674fea02f15e21dc737352c40Svetoslav     *
436b450d0d4d7fca16674fea02f15e21dc737352c40Svetoslav     * @hide
4374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
4384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String getTag() {
4394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mTag;
4404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
4414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
4424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
4434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Sets the optional tag assigned by a print service.
4444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
4454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param tag The tag.
4464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
4474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
4484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
4494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public void setTag(String tag) {
4504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mTag = tag;
4514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
4524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
4534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
454704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov     * Gets the wall time in millisecond when this print job was created.
455704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov     *
456704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov     * @return The creation time in milliseconds.
457704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov     */
458704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov    public long getCreationTime() {
459704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov        return mCreationTime;
460704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov    }
461704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov
462704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov    /**
463704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov     * Sets the wall time in milliseconds when this print job was created.
464704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov     *
465704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov     * @param creationTime The creation time in milliseconds.
466704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov     *
467704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov     * @hide
468704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov     */
469704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov    public void setCreationTime(long creationTime) {
470704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov        if (creationTime < 0) {
471704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov            throw new IllegalArgumentException("creationTime must be non-negative.");
472704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov        }
473704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov        mCreationTime = creationTime;
474704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov    }
475704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov
476704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov    /**
47785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov     * Gets the number of copies.
47885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov     *
47985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov     * @return The number of copies or zero if not set.
48085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov     */
481c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public @IntRange(from = 0) int getCopies() {
48285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        return mCopies;
48385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    }
48485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov
48585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    /**
48685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov     * Sets the number of copies.
48785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov     *
48885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov     * @param copyCount The number of copies.
48985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov     *
49085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov     * @hide
49185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov     */
49285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    public void setCopies(int copyCount) {
49385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        if (copyCount < 1) {
49485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov            throw new IllegalArgumentException("Copies must be more than one.");
49585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        }
49685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        mCopies = copyCount;
49785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    }
49885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov
49985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov    /**
50053f57d162b0553102fbd5c4ccdda87dbfce5b763Svetoslav     * Gets the included pages.
5014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
50253f57d162b0553102fbd5c4ccdda87dbfce5b763Svetoslav     * @return The included pages or <code>null</code> if not set.
5034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
504c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public @Nullable PageRange[] getPages() {
5054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mPageRanges;
5064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
5074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
5084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
50953f57d162b0553102fbd5c4ccdda87dbfce5b763Svetoslav     * Sets the included pages.
5104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
5111c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav     * @param pageRanges The included pages.
5124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
5134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
5144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
51553f57d162b0553102fbd5c4ccdda87dbfce5b763Svetoslav    public void setPages(PageRange[] pageRanges) {
5164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mPageRanges = pageRanges;
5174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
5184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
5194b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
5204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Gets the print job attributes.
5214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
5224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The attributes.
5234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
524c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public @NonNull PrintAttributes getAttributes() {
5254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mAttributes;
5264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
5274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
5284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
5294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Sets the print job attributes.
5304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
5314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param attributes The attributes.
5324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
5334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
5344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
5354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public void setAttributes(PrintAttributes attributes) {
5364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mAttributes = attributes;
5374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
5384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
539a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
540a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Gets the info describing the printed document.
541a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
542a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @return The document info.
543a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
544a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @hide
545a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
546a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public PrintDocumentInfo getDocumentInfo() {
547a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return mDocumentInfo;
5484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
5494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
550a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    /**
551a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * Sets the info describing the printed document.
552a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
553a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @param info The document info.
554a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     *
555a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     * @hide
556a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov     */
557a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov    public void setDocumentInfo(PrintDocumentInfo info) {
558a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        mDocumentInfo = info;
5594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
5604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
561a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov    /**
562a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     * Gets whether this print is being cancelled.
563a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     *
564a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     * @return True if the print job is being cancelled.
565a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     *
566a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     * @hide
567a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     */
568a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov    public boolean isCancelling() {
569a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov        return mCanceling;
570a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov    }
571a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov
572a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov    /**
573a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     * Sets whether this print is being cancelled.
574a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     *
575a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     * @param cancelling True if the print job is being cancelled.
576a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     *
577a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     * @hide
578a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov     */
579a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov    public void setCancelling(boolean cancelling) {
580a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov        mCanceling = cancelling;
581a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov    }
582a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov
583b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    /**
584b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * Gets whether this job has a given advanced (printer specific) print
585b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * option.
586b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
587b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @param key The option key.
588b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @return Whether the option is present.
589b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
590b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @hide
591b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     */
592b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    public boolean hasAdvancedOption(String key) {
593b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        return mAdvancedOptions != null && mAdvancedOptions.containsKey(key);
594b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    }
595b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
596b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    /**
597b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * Gets the value of an advanced (printer specific) print option.
598b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
599b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @param key The option key.
600b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @return The option value.
601b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
602b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @hide
603b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     */
604b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    public String getAdvancedStringOption(String key) {
605b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        if (mAdvancedOptions != null) {
606b4fda134761c9521a7e127db3806a07a18763b77Svetoslav            return mAdvancedOptions.getString(key);
607b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        }
608b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        return null;
609b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    }
610b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
611b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    /**
612b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * Gets the value of an advanced (printer specific) print option.
613b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
614b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @param key The option key.
615b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @return The option value.
616b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
617b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @hide
618b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     */
619b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    public int getAdvancedIntOption(String key) {
620b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        if (mAdvancedOptions != null) {
621b4fda134761c9521a7e127db3806a07a18763b77Svetoslav            return mAdvancedOptions.getInt(key);
622b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        }
623b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        return 0;
624b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    }
625b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
626b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    /**
627b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * Gets the advanced options.
628b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
629b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @return The advanced options.
630b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
631b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @hide
632b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     */
633b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    public Bundle getAdvancedOptions() {
634b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        return mAdvancedOptions;
635b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    }
636b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
637b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    /**
638b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * Sets the advanced options.
639b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
640b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @param options The advanced options.
641b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
642b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @hide
643b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     */
644b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    public void setAdvancedOptions(Bundle options) {
645b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        mAdvancedOptions = options;
646b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    }
647b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
6484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
6494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public int describeContents() {
6504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return 0;
6514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
6524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
6534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
6544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public void writeToParcel(Parcel parcel, int flags) {
6552fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        parcel.writeParcelable(mId, flags);
656269403b032f965ff3847eb982c2f697229dc5a92Svetoslav        parcel.writeString(mLabel);
6574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeParcelable(mPrinterId, flags);
658798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov        parcel.writeString(mPrinterName);
6594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeInt(mState);
6604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeInt(mAppId);
66188d199130d44c6bacb383a7757e782cf97483c68Svetoslav Ganov        parcel.writeString(mTag);
662704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov        parcel.writeLong(mCreationTime);
66385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        parcel.writeInt(mCopies);
664b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        parcel.writeParcelableArray(mPageRanges, flags);
665b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        parcel.writeParcelable(mAttributes, flags);
666b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        parcel.writeParcelable(mDocumentInfo, 0);
667b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        parcel.writeFloat(mProgress);
668b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        parcel.writeCharSequence(mStatus);
669d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        parcel.writeInt(mStatusRes);
670d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        parcel.writeCharSequence(mStatusResAppPackageName);
671a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov        parcel.writeInt(mCanceling ? 1 : 0);
672b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        parcel.writeBundle(mAdvancedOptions);
6734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
6744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
6754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
6764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String toString() {
6774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        StringBuilder builder = new StringBuilder();
6784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        builder.append("PrintJobInfo{");
6794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        builder.append("label: ").append(mLabel);
6804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        builder.append(", id: ").append(mId);
681d91cb3ea61ea5096637c5d2b5e3e6147d0d2cce3Svetoslav Ganov        builder.append(", state: ").append(stateToString(mState));
6824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        builder.append(", printer: " + mPrinterId);
68385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        builder.append(", tag: ").append(mTag);
684704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov        builder.append(", creationTime: " + mCreationTime);
68585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        builder.append(", copies: ").append(mCopies);
686a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        builder.append(", attributes: " + (mAttributes != null
687a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                ? mAttributes.toString() : null));
688a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        builder.append(", documentInfo: " + (mDocumentInfo != null
689a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov                ? mDocumentInfo.toString() : null));
690a18661d5922e5ae24ccce8e815aeba437a2fba82Svetoslav Ganov        builder.append(", cancelling: " + mCanceling);
69185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov        builder.append(", pages: " + (mPageRanges != null
69285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov                ? Arrays.toString(mPageRanges) : null));
693b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        builder.append(", hasAdvancedOptions: " + (mAdvancedOptions != null));
694b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        builder.append(", progress: " + mProgress);
695b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        builder.append(", status: " + (mStatus != null
696b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann                ? mStatus.toString() : null));
697d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        builder.append(", statusRes: " + mStatusRes);
698d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        builder.append(", statusResAppPackageName: " + (mStatusResAppPackageName != null
699d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann                ? mStatusResAppPackageName.toString() : null));
7004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        builder.append("}");
7014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return builder.toString();
7024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
7034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
7044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /** @hide */
7054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static String stateToString(int state) {
7064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        switch (state) {
7074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            case STATE_CREATED: {
708704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov                return "STATE_CREATED";
7094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
7104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            case STATE_QUEUED: {
7114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                return "STATE_QUEUED";
7124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
7134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            case STATE_STARTED: {
7144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                return "STATE_STARTED";
7154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
716d91cb3ea61ea5096637c5d2b5e3e6147d0d2cce3Svetoslav Ganov            case STATE_BLOCKED: {
717d91cb3ea61ea5096637c5d2b5e3e6147d0d2cce3Svetoslav Ganov                return "STATE_BLOCKED";
718d91cb3ea61ea5096637c5d2b5e3e6147d0d2cce3Svetoslav Ganov            }
7194b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            case STATE_FAILED: {
720704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov                return "STATE_FAILED";
7214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
7224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            case STATE_COMPLETED: {
723704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov                return "STATE_COMPLETED";
7244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
7254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            case STATE_CANCELED: {
726704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov                return "STATE_CANCELED";
7274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
7284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            default: {
729704697b6197262678e930daa831a1916ddee4dcfSvetoslav Ganov                return "STATE_UNKNOWN";
7304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
7314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
7324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
7334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
7341c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav    /**
735b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * Get the progress that has been made printing this job.
736b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     *
737b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * @return the print progress or -1 if not set
738b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * @hide
739b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     */
740b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    @TestApi
741b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    public float getProgress() {
742b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        return mProgress;
743b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    }
744b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
745b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    /**
746b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * Get the status of this job.
747b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     *
748d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann     * @param pm Package manager used to resolve the string
749d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann     *
750b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * @return the status of this job or null if not set
751b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     * @hide
752b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann     */
753b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    @TestApi
754d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann    public @Nullable CharSequence getStatus(@NonNull PackageManager pm) {
755d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        if (mStatusRes == 0) {
756d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann            return mStatus;
757d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        } else {
758d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann            try {
759d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann                return pm.getResourcesForApplication(mStatusResAppPackageName.toString())
760d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann                        .getString(mStatusRes);
761d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann            } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
762d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann                return null;
763d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann            }
764d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann        }
765b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    }
766b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
767b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann    /**
7681c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav     * Builder for creating a {@link PrintJobInfo}.
7691c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav     */
7701c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav    public static final class Builder {
7711c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        private final PrintJobInfo mPrototype;
7721c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav
7731c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        /**
7741c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * Constructor.
7751c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         *
7761c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * @param prototype Prototype to use as a starting point.
7774d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov         * Can be <code>null</code>.
7781c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         */
779c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann        public Builder(@Nullable PrintJobInfo prototype) {
7801c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav            mPrototype = (prototype != null)
7811c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav                    ? new PrintJobInfo(prototype)
7821c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav                    : new PrintJobInfo();
7831c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        }
7841c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav
7851c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        /**
7861c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * Sets the number of copies.
7871c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         *
7881c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * @param copies The number of copies.
7891c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         */
790c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann        public void setCopies(@IntRange(from = 1) int copies) {
7911c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav            mPrototype.mCopies = copies;
7921c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        }
7931c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav
7941c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        /**
7951c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * Sets the print job attributes.
7961c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         *
7971c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * @param attributes The attributes.
7981c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         */
799c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann        public void setAttributes(@NonNull PrintAttributes attributes) {
8001c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav            mPrototype.mAttributes = attributes;
8011c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        }
8021c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav
8031c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        /**
8041c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * Sets the included pages.
8051c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         *
8061c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * @param pages The included pages.
8071c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         */
808c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann        public void setPages(@NonNull PageRange[] pages) {
8091c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav            mPrototype.mPageRanges = pages;
8101c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        }
8111c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav
8121c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        /**
813b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann         * Sets the progress of the print job.
814b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann         *
815b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann         * @param progress the progress of the job
816b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann         * @hide
817b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann         */
818b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        public void setProgress(@FloatRange(from=0.0, to=1.0) float progress) {
819b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann            Preconditions.checkArgumentInRange(progress, 0, 1, "progress");
820b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
821b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann            mPrototype.mProgress = progress;
822b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        }
823b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
824b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        /**
825b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann         * Sets the status of the print job.
826b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann         *
827b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann         * @param status the status of the job, can be null
828b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann         * @hide
829b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann         */
830b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        public void setStatus(@Nullable CharSequence status) {
831b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann            mPrototype.mStatus = status;
832b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        }
833b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann
834b3078c235e7674fd61be75fb469105ba6174aba5Philip P. Moltmann        /**
8351c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * Puts an advanced (printer specific) option.
8361c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         *
8371c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * @param key The option key.
8381c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * @param value The option value.
8391c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         */
840c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann        public void putAdvancedOption(@NonNull String key, @Nullable String value) {
841d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann            Preconditions.checkNotNull(key, "key cannot be null");
842d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann
843b4fda134761c9521a7e127db3806a07a18763b77Svetoslav            if (mPrototype.mAdvancedOptions == null) {
844b4fda134761c9521a7e127db3806a07a18763b77Svetoslav                mPrototype.mAdvancedOptions = new Bundle();
845b4fda134761c9521a7e127db3806a07a18763b77Svetoslav            }
846b4fda134761c9521a7e127db3806a07a18763b77Svetoslav            mPrototype.mAdvancedOptions.putString(key, value);
8471c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        }
8481c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav
8491c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        /**
8501c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * Puts an advanced (printer specific) option.
8511c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         *
8521c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * @param key The option key.
8531c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * @param value The option value.
8541c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         */
855c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann        public void putAdvancedOption(@NonNull String key, int value) {
856b4fda134761c9521a7e127db3806a07a18763b77Svetoslav            if (mPrototype.mAdvancedOptions == null) {
857b4fda134761c9521a7e127db3806a07a18763b77Svetoslav                mPrototype.mAdvancedOptions = new Bundle();
858b4fda134761c9521a7e127db3806a07a18763b77Svetoslav            }
859b4fda134761c9521a7e127db3806a07a18763b77Svetoslav            mPrototype.mAdvancedOptions.putInt(key, value);
8601c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        }
8611c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav
8621c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        /**
8631c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * Creates a new {@link PrintJobInfo} instance.
8641c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         *
8651c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         * @return The new instance.
8661c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav         */
867c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann        public @NonNull PrintJobInfo build() {
8681c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav            return mPrototype;
8691c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav        }
8701c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav    }
8711c43fceaaa5f9aa6e29e2670f44f312632241007Svetoslav
8724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static final Parcelable.Creator<PrintJobInfo> CREATOR =
8734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            new Creator<PrintJobInfo>() {
8744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        @Override
8754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        public PrintJobInfo createFromParcel(Parcel parcel) {
8764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return new PrintJobInfo(parcel);
8774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
8784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
8794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        @Override
8804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        public PrintJobInfo[] newArray(int size) {
8814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return new PrintJobInfo[size];
8824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
8834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    };
8844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov}
885