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 19bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.annotation.DrawableRes; 20bb36206f08797156caed236671d36b5a34682f95Philip P. Moltmannimport android.annotation.IntDef; 21bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.annotation.NonNull; 22bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.annotation.Nullable; 23bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.annotation.TestApi; 24bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.app.PendingIntent; 25bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.content.Context; 26bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.content.pm.ApplicationInfo; 27bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.content.pm.PackageInfo; 28bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.content.pm.PackageManager; 29bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.content.pm.PackageManager.NameNotFoundException; 30bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.graphics.drawable.Drawable; 31bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmannimport android.graphics.drawable.Icon; 324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcel; 334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcelable; 34798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganovimport android.text.TextUtils; 354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 36c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmannimport com.android.internal.util.Preconditions; 37c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann 38c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport java.lang.annotation.Retention; 39c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport java.lang.annotation.RetentionPolicy; 40c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann 414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/** 424d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * This class represents the description of a printer. Instances of 434d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * this class are created by print services to report to the system 444d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * the printers they manage. The information of this class has two 454d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * major components, printer properties such as name, id, status, 464d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * description and printer capabilities which describe the various 474d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * print modes a printer supports such as media sizes, margins, etc. 48c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * <p> 49c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * Once {@link PrinterInfo.Builder#build() built} the objects are immutable. 50c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * </p> 514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpublic final class PrinterInfo implements Parcelable { 534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 54c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann /** @hide */ 55c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann @IntDef({ 56c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann STATUS_IDLE, STATUS_BUSY, STATUS_UNAVAILABLE 57c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann }) 58c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann @Retention(RetentionPolicy.SOURCE) 59c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @interface Status { 60c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann } 61aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov /** Printer status: the printer is idle and ready to print. */ 62aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov public static final int STATUS_IDLE = 1; 634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 64aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov /** Printer status: the printer is busy printing. */ 65aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov public static final int STATUS_BUSY = 2; 66aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov 67aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov /** Printer status: the printer is not available. */ 68aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov public static final int STATUS_UNAVAILABLE = 3; 694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 70c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private final @NonNull PrinterId mId; 714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 72bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** Resource inside the printer's services's package to be used as an icon */ 73c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private final int mIconResourceId; 74bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 75bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** If a custom icon can be loaded for the printer */ 76c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private final boolean mHasCustomPrinterIcon; 77bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 78bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** The generation of the icon in the cache. */ 79c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private final int mCustomPrinterIconGen; 80bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 81bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** Intent that launches the activity showing more information about the printer. */ 82c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private final @Nullable PendingIntent mInfoIntent; 834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 84c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private final @NonNull String mName; 854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 86c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private final @Status int mStatus; 874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 88c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private final @Nullable String mDescription; 89798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov 90c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private final @Nullable PrinterCapabilitiesInfo mCapabilities; 914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 92c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private PrinterInfo(@NonNull PrinterId printerId, @NonNull String name, @Status int status, 93c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann int iconResourceId, boolean hasCustomPrinterIcon, String description, 94c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann PendingIntent infoIntent, PrinterCapabilitiesInfo capabilities, 95c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann int customPrinterIconGen) { 96c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mId = printerId; 97c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mName = name; 98c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mStatus = status; 99c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mIconResourceId = iconResourceId; 100c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mHasCustomPrinterIcon = hasCustomPrinterIcon; 101c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mDescription = description; 102c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mInfoIntent = infoIntent; 103c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mCapabilities = capabilities; 104c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mCustomPrinterIconGen = customPrinterIconGen; 105a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov } 106a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov 1074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Get the globally unique printer id. 1094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 1104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The printer id. 1114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 112c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull PrinterId getId() { 1134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mId; 1144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 117bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * Get the icon to be used for this printer. If no per printer icon is available, the printer's 118bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * service's icon is returned. If the printer has a custom icon this icon might get requested 119bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * asynchronously. Once the icon is loaded the discovery sessions will be notified that the 120bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * printer changed. 121bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * 122bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @param context The context that will be using the icons 123bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @return The icon to be used for the printer or null if no icon could be found. 124bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @hide 125bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann */ 126bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann @TestApi 127bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann public @Nullable Drawable loadIcon(@NonNull Context context) { 128bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann Drawable drawable = null; 129bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann PackageManager packageManager = context.getPackageManager(); 130bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 131bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (mHasCustomPrinterIcon) { 132bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann PrintManager printManager = (PrintManager) context 133bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann .getSystemService(Context.PRINT_SERVICE); 134bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 135bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann Icon icon = printManager.getCustomPrinterIcon(mId); 136bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 137bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (icon != null) { 138bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann drawable = icon.loadDrawable(context); 139bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 140bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 141bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 142bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (drawable == null) { 143bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann try { 144bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann String packageName = mId.getServiceName().getPackageName(); 145bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0); 146bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann ApplicationInfo appInfo = packageInfo.applicationInfo; 147bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 148bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann // If no custom icon is available, try the icon from the resources 149bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (mIconResourceId != 0) { 150bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann drawable = packageManager.getDrawable(packageName, mIconResourceId, appInfo); 151bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 152bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 153bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann // Fall back to the printer's service's icon if no per printer icon could be found 154bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (drawable == null) { 155bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann drawable = appInfo.loadIcon(packageManager); 156bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 157bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } catch (NameNotFoundException e) { 158bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 159bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 160bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 161bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return drawable; 162bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 163bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 164bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** 1652e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann * Check if the printer has a custom printer icon. 1662e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann * 1672e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann * @return {@code true} iff the printer has a custom printer icon. 1682e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann * 1692e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann * @hide 1702e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann */ 1712e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann public boolean getHasCustomPrinterIcon() { 1722e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann return mHasCustomPrinterIcon; 1732e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann } 1742e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann 1752e3012624b703a653fed44d4dc1b8904406c0d99Philip P. Moltmann /** 176798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * Get the printer name. 1774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 178798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * @return The printer name. 1794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 180c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann public @NonNull String getName() { 181798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov return mName; 1824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 185798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * Gets the printer status. 1864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 187798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * @return The status. 1884d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * 1894d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @see #STATUS_BUSY 1904d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @see #STATUS_IDLE 1914d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @see #STATUS_UNAVAILABLE 1924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 193c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @Status int getStatus() { 194798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov return mStatus; 1954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 198798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * Gets the printer description. 1994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 200798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * @return The description. 2014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 202c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @Nullable String getDescription() { 203798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov return mDescription; 2044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 2054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 20655b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov /** 207bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * Get the {@link PendingIntent} that launches the activity showing more information about the 208bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * printer. 209bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * 210bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @return the {@link PendingIntent} that launches the activity showing more information about 211bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * the printer or null if it is not configured 212bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @hide 213bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann */ 214bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann public @Nullable PendingIntent getInfoIntent() { 215bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return mInfoIntent; 216bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 217bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 218bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** 219798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * Gets the printer capabilities. 22055b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov * 221798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * @return The capabilities. 22255b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov */ 223c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @Nullable PrinterCapabilitiesInfo getCapabilities() { 224798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov return mCapabilities; 22555b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov } 22655b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov 227c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann /** 228c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * Check if printerId is valid. 229c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * 230c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * @param printerId The printerId that might be valid 231c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * @return The valid printerId 232c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * @throws IllegalArgumentException if printerId is not valid. 233c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann */ 234c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private static @NonNull PrinterId checkPrinterId(PrinterId printerId) { 235c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann return Preconditions.checkNotNull(printerId, "printerId cannot be null."); 236c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann } 237c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann 238c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann /** 239c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * Check if status is valid. 240c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * 241c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * @param status The status that might be valid 242c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * @return The valid status 243c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * @throws IllegalArgumentException if status is not valid. 244c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann */ 245c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private static @Status int checkStatus(int status) { 246c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann if (!(status == STATUS_IDLE 247c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann || status == STATUS_BUSY 248c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann || status == STATUS_UNAVAILABLE)) { 249c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann throw new IllegalArgumentException("status is invalid."); 250c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann } 251c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann 252c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann return status; 253c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann } 254c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann 255c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann /** 256c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * Check if name is valid. 257c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * 258c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * @param name The name that might be valid 259c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * @return The valid name 260c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann * @throws IllegalArgumentException if name is not valid. 261c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann */ 262c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private static @NonNull String checkName(String name) { 263c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann return Preconditions.checkStringNotEmpty(name, "name cannot be empty."); 264c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann } 265c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann 2664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov private PrinterInfo(Parcel parcel) { 267c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann // mName can be null due to unchecked set in Builder.setName and status can be invalid 268c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann // due to unchecked set in Builder.setStatus, hence we can only check mId for a valid state 269c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mId = checkPrinterId((PrinterId) parcel.readParcelable(null)); 270c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mName = checkName(parcel.readString()); 271c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mStatus = checkStatus(parcel.readInt()); 272798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov mDescription = parcel.readString(); 273798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov mCapabilities = parcel.readParcelable(null); 274bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann mIconResourceId = parcel.readInt(); 275bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann mHasCustomPrinterIcon = parcel.readByte() != 0; 276bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann mCustomPrinterIconGen = parcel.readInt(); 277bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann mInfoIntent = parcel.readParcelable(null); 2784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 2794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 2804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 2814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public int describeContents() { 2824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return 0; 2834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 2844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 2854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 2864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public void writeToParcel(Parcel parcel, int flags) { 2874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeParcelable(mId, flags); 288798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov parcel.writeString(mName); 2894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(mStatus); 290798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov parcel.writeString(mDescription); 291798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov parcel.writeParcelable(mCapabilities, flags); 292bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann parcel.writeInt(mIconResourceId); 293bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann parcel.writeByte((byte) (mHasCustomPrinterIcon ? 1 : 0)); 294bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann parcel.writeInt(mCustomPrinterIconGen); 295bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann parcel.writeParcelable(mInfoIntent, flags); 2964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 2974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 2984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 29955b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov public int hashCode() { 30055b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov final int prime = 31; 30155b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov int result = 1; 302c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann result = prime * result + mId.hashCode(); 303c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann result = prime * result + mName.hashCode(); 30455b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov result = prime * result + mStatus; 305798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov result = prime * result + ((mDescription != null) ? mDescription.hashCode() : 0); 306798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov result = prime * result + ((mCapabilities != null) ? mCapabilities.hashCode() : 0); 307bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann result = prime * result + mIconResourceId; 308bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann result = prime * result + (mHasCustomPrinterIcon ? 1 : 0); 309bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann result = prime * result + mCustomPrinterIconGen; 310bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann result = prime * result + ((mInfoIntent != null) ? mInfoIntent.hashCode() : 0); 31155b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov return result; 31255b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov } 31355b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov 314bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** 315bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * Compare two {@link PrinterInfo printerInfos} in all aspects beside being null and the 316bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * {@link #mStatus}. 317bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * 318bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @param other the other {@link PrinterInfo} 319bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @return true iff the infos are equivalent 320bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @hide 321bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann */ 322bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann public boolean equalsIgnoringStatus(PrinterInfo other) { 323c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann if (!mId.equals(other.mId)) { 32455b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov return false; 32555b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov } 326c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann if (!mName.equals(other.mName)) { 327c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann return false; 32855b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov } 329798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov if (!TextUtils.equals(mDescription, other.mDescription)) { 33055b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov return false; 33155b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov } 332798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov if (mCapabilities == null) { 333798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov if (other.mCapabilities != null) { 33455b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov return false; 33555b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov } 336798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov } else if (!mCapabilities.equals(other.mCapabilities)) { 33755b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov return false; 33855b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov } 339bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (mIconResourceId != other.mIconResourceId) { 340bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return false; 341bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 342bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (mHasCustomPrinterIcon != other.mHasCustomPrinterIcon) { 343bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return false; 344bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 345bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (mCustomPrinterIconGen != other.mCustomPrinterIconGen) { 346bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return false; 347bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 348bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (mInfoIntent == null) { 349bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (other.mInfoIntent != null) { 350bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return false; 351bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 352bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } else if (!mInfoIntent.equals(other.mInfoIntent)) { 353bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return false; 354bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 355bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return true; 356bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 357bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 358bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann @Override 359bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann public boolean equals(Object obj) { 360bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (this == obj) { 361bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return true; 362bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 363bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (obj == null) { 364bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return false; 365bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 366bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (getClass() != obj.getClass()) { 367bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return false; 368bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 369bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann PrinterInfo other = (PrinterInfo) obj; 370bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (!equalsIgnoringStatus(other)) { 371bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return false; 372bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 373bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann if (mStatus != other.mStatus) { 374bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return false; 375bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 37655b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov return true; 37755b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov } 37855b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov 37955b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov @Override 3804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public String toString() { 3814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov StringBuilder builder = new StringBuilder(); 3824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("PrinterInfo{"); 383798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov builder.append("id=").append(mId); 384798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov builder.append(", name=").append(mName); 385798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov builder.append(", status=").append(mStatus); 386798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov builder.append(", description=").append(mDescription); 387798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov builder.append(", capabilities=").append(mCapabilities); 388bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann builder.append(", iconResId=").append(mIconResourceId); 389bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann builder.append(", hasCustomPrinterIcon=").append(mHasCustomPrinterIcon); 390bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann builder.append(", customPrinterIconGen=").append(mCustomPrinterIconGen); 391bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann builder.append(", infoIntent=").append(mInfoIntent); 3924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("\"}"); 3934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return builder.toString(); 3944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 3954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 3964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 397798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * Builder for creating of a {@link PrinterInfo}. 3984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 3994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public static final class Builder { 400c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private @NonNull PrinterId mPrinterId; 401c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private @NonNull String mName; 402c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private @Status int mStatus; 403c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private int mIconResourceId; 404c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private boolean mHasCustomPrinterIcon; 405c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private String mDescription; 406c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private PendingIntent mInfoIntent; 407c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private PrinterCapabilitiesInfo mCapabilities; 408c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann private int mCustomPrinterIconGen; 4094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 4104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 411798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * Constructor. 4124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 41355b409a97cf6376399a0940313ea852368727d6fSvetoslav Ganov * @param printerId The printer id. Cannot be null. 414798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * @param name The printer name. Cannot be empty. 415798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * @param status The printer status. Must be a valid status. 4164d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @throws IllegalArgumentException If the printer id is null, or the 4174d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * printer name is empty or the status is not a valid one. 4184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 419c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public Builder(@NonNull PrinterId printerId, @NonNull String name, @Status int status) { 420c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mPrinterId = checkPrinterId(printerId); 421c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mName = checkName(name); 422c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mStatus = checkStatus(status); 4234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 4244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 4254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 426798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * Constructor. 4274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 428269403b032f965ff3847eb982c2f697229dc5a92Svetoslav * @param other Other info from which to start building. 4294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 430c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public Builder(@NonNull PrinterInfo other) { 431c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mPrinterId = other.mId; 432c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mName = other.mName; 433c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mStatus = other.mStatus; 434c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mIconResourceId = other.mIconResourceId; 435c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mHasCustomPrinterIcon = other.mHasCustomPrinterIcon; 436c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mDescription = other.mDescription; 437c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mInfoIntent = other.mInfoIntent; 438c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mCapabilities = other.mCapabilities; 439c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mCustomPrinterIconGen = other.mCustomPrinterIconGen; 4404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 4414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 4424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 443aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov * Sets the printer status. 444aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov * 445aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov * @param status The status. 446aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov * @return This builder. 447aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov * @see PrinterInfo#STATUS_IDLE 448aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov * @see PrinterInfo#STATUS_BUSY 449aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov * @see PrinterInfo#STATUS_UNAVAILABLE 450aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov */ 451b8c1a02adb1e55bae04bde3f5046fe324abed9e9Philip P. Moltmann public @NonNull Builder setStatus(@Status int status) { 452c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mStatus = checkStatus(status); 453aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov return this; 454aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov } 455aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov 456aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov /** 457bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * Set a drawable resource as icon for this printer. If no icon is set the printer's 458bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * service's icon is used for the printer. 459bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * 460bb36206f08797156caed236671d36b5a34682f95Philip P. Moltmann * @param iconResourceId The resource ID of the icon. 461bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @return This builder. 462bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @see PrinterInfo.Builder#setHasCustomPrinterIcon 463bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann */ 464bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann public @NonNull Builder setIconResourceId(@DrawableRes int iconResourceId) { 465c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mIconResourceId = Preconditions.checkArgumentNonnegative(iconResourceId, 466c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann "iconResourceId can't be negative"); 467bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return this; 468bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 469bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 470bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** 471bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * Declares that the print service can load a custom per printer's icon. If both 472bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * {@link PrinterInfo.Builder#setIconResourceId} and a custom icon are set the resource icon 473bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * is shown while the custom icon loads but then the custom icon is used. If 474bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * {@link PrinterInfo.Builder#setIconResourceId} is not set the printer's service's icon is 475bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * shown while loading. 476bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * <p> 477bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * The icon is requested asynchronously and only when needed via 478bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * {@link android.printservice.PrinterDiscoverySession#onRequestCustomPrinterIcon}. 479bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * </p> 480bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * 481d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann * @param hasCustomPrinterIcon If the printer has a custom icon or not. 482d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann * 483bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @return This builder. 484bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann */ 485d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann public @NonNull Builder setHasCustomPrinterIcon(boolean hasCustomPrinterIcon) { 486d74d1e549168ba521e8009961b76e8718be37aa1Philip P. Moltmann mHasCustomPrinterIcon = hasCustomPrinterIcon; 487bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return this; 488bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 489bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 490bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** 4914d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * Sets the <strong>localized</strong> printer name which 4924d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * is shown to the user 4934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 494798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * @param name The name. 4954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return This builder. 4964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 497c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull Builder setName(@NonNull String name) { 498c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mName = checkName(name); 4994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return this; 5004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 5014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 5024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 5034d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * Sets the <strong>localized</strong> printer description 5044d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * which is shown to the user 5054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 506798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * @param description The description. 5074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return This builder. 5084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 509c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull Builder setDescription(@NonNull String description) { 510c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mDescription = description; 5114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return this; 5124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 5134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 5144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 515bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * Sets the {@link PendingIntent} that launches an activity showing more information about 516bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * the printer. 517bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * 518bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @param infoIntent The {@link PendingIntent intent}. 519bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @return This builder. 520bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann */ 521bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann public @NonNull Builder setInfoIntent(@NonNull PendingIntent infoIntent) { 522c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mInfoIntent = infoIntent; 523bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return this; 524bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 525bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 526bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** 527798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * Sets the printer capabilities. 5284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 529798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * @param capabilities The capabilities. 5304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return This builder. 5314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 532c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull Builder setCapabilities(@NonNull PrinterCapabilitiesInfo capabilities) { 533c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mCapabilities = capabilities; 5344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return this; 5354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 5364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 5374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 5384d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * Creates a new {@link PrinterInfo}. 5394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 5404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return A new {@link PrinterInfo}. 5414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 542c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull PrinterInfo build() { 543c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann return new PrinterInfo(mPrinterId, mName, mStatus, mIconResourceId, 544c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mHasCustomPrinterIcon, mDescription, mInfoIntent, mCapabilities, 545c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mCustomPrinterIconGen); 5464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 547bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann 548bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann /** 549bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * Increments the generation number of the custom printer icon. As the {@link PrinterInfo} 550bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * does not match the previous one anymore, users of the {@link PrinterInfo} will reload the 551bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * icon if needed. 552bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * 553bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @return This builder. 554bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann * @hide 555bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann */ 556bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann public @NonNull Builder incCustomPrinterIconGen() { 557c2ad22663ba8cbd0ceb35e760c5f3c4084fb5033Philip P. Moltmann mCustomPrinterIconGen++; 558bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann return this; 559bb9f686b40743df2642b7d3b7778dbf7284ae665Philip P. Moltmann } 5604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 5614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 5624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public static final Parcelable.Creator<PrinterInfo> CREATOR = 5634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov new Parcelable.Creator<PrinterInfo>() { 5644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 5654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public PrinterInfo createFromParcel(Parcel parcel) { 5664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new PrinterInfo(parcel); 5674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 5684b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 5694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 5704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public PrinterInfo[] newArray(int size) { 5714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new PrinterInfo[size]; 5724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 5734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov }; 5744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov} 575