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 19c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport android.annotation.IntDef; 20c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport android.annotation.IntRange; 21c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport android.annotation.NonNull; 22c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport android.annotation.Nullable; 23aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmannimport android.annotation.StringRes; 244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.pm.PackageManager; 254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.pm.PackageManager.NameNotFoundException; 26773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslavimport android.content.res.Resources.NotFoundException; 274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcel; 284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcelable; 29c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.PrintAttributesProto; 304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.text.TextUtils; 317be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganovimport android.util.ArrayMap; 324959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmannimport android.util.ArraySet; 33773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslavimport android.util.Log; 344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport com.android.internal.R; 36aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmannimport com.android.internal.util.Preconditions; 374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 38c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport java.lang.annotation.Retention; 39c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport java.lang.annotation.RetentionPolicy; 407be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganovimport java.util.Map; 417be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov 424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/** 434d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * This class represents the attributes of a print job. These attributes 444d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * describe how the printed content should be laid out. For example, the 454d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * print attributes may state that the content should be laid out on a 464d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * letter size with 300 DPI (dots per inch) resolution, have a margin of 474d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * 10 mills (thousand of an inch) on all sides, and be black and white. 484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpublic final class PrintAttributes implements Parcelable { 50c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann /** @hide */ 51c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann @Retention(RetentionPolicy.SOURCE) 52ce8db9911494225fcd99711d7df85a130de5a6ceJeff Sharkey @IntDef(flag = true, prefix = { "COLOR_MODE_" }, value = { 53ce8db9911494225fcd99711d7df85a130de5a6ceJeff Sharkey COLOR_MODE_MONOCHROME, 54ce8db9911494225fcd99711d7df85a130de5a6ceJeff Sharkey COLOR_MODE_COLOR 55c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann }) 56aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann @interface ColorMode { 57c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann } 5822cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov /** Color mode: Monochrome color scheme, for example one color is used. */ 59c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann public static final int COLOR_MODE_MONOCHROME = PrintAttributesProto.COLOR_MODE_MONOCHROME; 6022cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov /** Color mode: Color color scheme, for example many colors are used. */ 61c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann public static final int COLOR_MODE_COLOR = PrintAttributesProto.COLOR_MODE_COLOR; 624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov private static final int VALID_COLOR_MODES = 644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov COLOR_MODE_MONOCHROME | COLOR_MODE_COLOR; 654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 66c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann /** @hide */ 67c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann @Retention(RetentionPolicy.SOURCE) 68ce8db9911494225fcd99711d7df85a130de5a6ceJeff Sharkey @IntDef(flag = true, prefix = { "DUPLEX_MODE_" }, value = { 69ce8db9911494225fcd99711d7df85a130de5a6ceJeff Sharkey DUPLEX_MODE_NONE, 70ce8db9911494225fcd99711d7df85a130de5a6ceJeff Sharkey DUPLEX_MODE_LONG_EDGE, 71ce8db9911494225fcd99711d7df85a130de5a6ceJeff Sharkey DUPLEX_MODE_SHORT_EDGE 72c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann }) 73aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann @interface DuplexMode { 74c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann } 75948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav /** Duplex mode: No duplexing. */ 76c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann public static final int DUPLEX_MODE_NONE = PrintAttributesProto.DUPLEX_MODE_NONE; 77948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav /** Duplex mode: Pages are turned sideways along the long edge - like a book. */ 78c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann public static final int DUPLEX_MODE_LONG_EDGE = PrintAttributesProto.DUPLEX_MODE_LONG_EDGE; 79948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav /** Duplex mode: Pages are turned upwards along the short edge - like a notpad. */ 80c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann public static final int DUPLEX_MODE_SHORT_EDGE = PrintAttributesProto.DUPLEX_MODE_SHORT_EDGE; 81948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav 82948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav private static final int VALID_DUPLEX_MODES = 83948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav DUPLEX_MODE_NONE | DUPLEX_MODE_LONG_EDGE | DUPLEX_MODE_SHORT_EDGE; 84948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav 85aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private @Nullable MediaSize mMediaSize; 86aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private @Nullable Resolution mResolution; 87aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private @Nullable Margins mMinMargins; 884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 89aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private @IntRange(from = 0) int mColorMode; 90aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private @IntRange(from = 0) int mDuplexMode; 914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov PrintAttributes() { 934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /* hide constructor */ 944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 96c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann private PrintAttributes(@NonNull Parcel parcel) { 97aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann mMediaSize = (parcel.readInt() == 1) ? MediaSize.createFromParcel(parcel) : null; 98aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann mResolution = (parcel.readInt() == 1) ? Resolution.createFromParcel(parcel) : null; 99aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann mMinMargins = (parcel.readInt() == 1) ? Margins.createFromParcel(parcel) : null; 1004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mColorMode = parcel.readInt(); 101aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann if (mColorMode != 0) { 102aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann enforceValidColorMode(mColorMode); 103aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann } 104948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav mDuplexMode = parcel.readInt(); 105aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann if (mDuplexMode != 0) { 106aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann enforceValidDuplexMode(mDuplexMode); 107aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann } 1084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Gets the media size. 1124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 1134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The media size or <code>null</code> if not set. 1144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 115c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @Nullable MediaSize getMediaSize() { 1164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mMediaSize; 1174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1194b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Sets the media size. 1214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 122948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @param mediaSize The media size. 1234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 1244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide 1254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public void setMediaSize(MediaSize mediaSize) { 1274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mMediaSize = mediaSize; 1284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Gets the resolution. 1324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 1334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The resolution or <code>null</code> if not set. 1344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 135c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @Nullable Resolution getResolution() { 1364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mResolution; 1374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Sets the resolution. 1414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 142948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @param resolution The resolution. 1434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 1444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide 1454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public void setResolution(Resolution resolution) { 1474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mResolution = resolution; 1484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 151651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav * Gets the minimal margins. If the content does not fit 152651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav * these margins it will be clipped. 153525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * <p> 154525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * <strong>These margins are physically imposed by the printer and they 155525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * are <em>not</em> rotated, i.e. they are the same for both portrait and 156525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * landscape. For example, a printer may not be able to print in a stripe 157525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * on both left and right sides of the page. 158525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * </strong> 159525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * </p> 1604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 1614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The margins or <code>null</code> if not set. 1624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 163c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @Nullable Margins getMinMargins() { 164651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav return mMinMargins; 1654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 168651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav * Sets the minimal margins. If the content does not fit 169651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav * these margins it will be clipped. 170525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * <p> 171525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * <strong>These margins are physically imposed by the printer and they 172525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * are <em>not</em> rotated, i.e. they are the same for both portrait and 173525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * landscape. For example, a printer may not be able to print in a stripe 174525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * on both left and right sides of the page. 175525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * </strong> 176525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov * </p> 1774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 178948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @param margins The margins. 1794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 1804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide 1814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 182651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav public void setMinMargins(Margins margins) { 183651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav mMinMargins = margins; 1844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Gets the color mode. 1884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 1894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The color mode or zero if not set. 1904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 1914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @see #COLOR_MODE_COLOR 1924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @see #COLOR_MODE_MONOCHROME 1934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 194aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public @IntRange(from = 0) int getColorMode() { 1954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mColorMode; 1964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Sets the color mode. 2004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 201948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @param colorMode The color mode. 2024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 2034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @see #COLOR_MODE_MONOCHROME 2044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @see #COLOR_MODE_COLOR 2054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 2064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide 2074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 2084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public void setColorMode(int colorMode) { 2094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov enforceValidColorMode(colorMode); 2104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mColorMode = colorMode; 2114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 2124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 213a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav /** 214a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * Gets whether this print attributes are in portrait orientation, 215a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * which is the media size is in portrait and all orientation dependent 216a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * attributes such as resolution and margins are properly adjusted. 217a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * 218a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * @return Whether this print attributes are in portrait. 219a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * 220a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * @hide 221a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav */ 222a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav public boolean isPortrait() { 223a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav return mMediaSize.isPortrait(); 224a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav } 225a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 226a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav /** 227948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * Gets the duplex mode. 228948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * 229aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * @return The duplex mode or zero if not set. 230948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * 231948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @see #DUPLEX_MODE_NONE 232948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @see #DUPLEX_MODE_LONG_EDGE 233948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @see #DUPLEX_MODE_SHORT_EDGE 234948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav */ 235aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public @IntRange(from = 0) int getDuplexMode() { 236948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav return mDuplexMode; 237948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 238948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav 239948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav /** 240948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * Sets the duplex mode. 241948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * 242948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @param duplexMode The duplex mode. 243948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * 244948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @see #DUPLEX_MODE_NONE 245948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @see #DUPLEX_MODE_LONG_EDGE 246948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @see #DUPLEX_MODE_SHORT_EDGE 247948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * 248948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @hide 249948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav */ 250948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav public void setDuplexMode(int duplexMode) { 251948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav enforceValidDuplexMode(duplexMode); 252948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav mDuplexMode = duplexMode; 253948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 254948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav 255948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav /** 256a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * Gets a new print attributes instance which is in portrait orientation, 257a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * which is the media size is in portrait and all orientation dependent 258a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * attributes such as resolution and margins are properly adjusted. 259a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * 260a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * @return New instance in portrait orientation if this one is in 261a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * landscape, otherwise this instance. 262a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * 263a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * @hide 264a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav */ 265a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav public PrintAttributes asPortrait() { 266a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav if (isPortrait()) { 267a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav return this; 268a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav } 269a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 270a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav PrintAttributes attributes = new PrintAttributes(); 271a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 272a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav // Rotate the media size. 273a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav attributes.setMediaSize(getMediaSize().asPortrait()); 274a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 275a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav // Rotate the resolution. 276a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav Resolution oldResolution = getResolution(); 277a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav Resolution newResolution = new Resolution( 278a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav oldResolution.getId(), 279a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav oldResolution.getLabel(), 280a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav oldResolution.getVerticalDpi(), 281a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav oldResolution.getHorizontalDpi()); 282a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav attributes.setResolution(newResolution); 283a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 284525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov // Do not rotate the physical margins. 285525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov attributes.setMinMargins(getMinMargins()); 286a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 287a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav attributes.setColorMode(getColorMode()); 288948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav attributes.setDuplexMode(getDuplexMode()); 289a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 290a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav return attributes; 291a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav } 292a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 293a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav /** 294a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * Gets a new print attributes instance which is in landscape orientation, 295a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * which is the media size is in landscape and all orientation dependent 296a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * attributes such as resolution and margins are properly adjusted. 297a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * 298a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * @return New instance in landscape orientation if this one is in 299a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * portrait, otherwise this instance. 300a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * 301a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav * @hide 302a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav */ 303a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav public PrintAttributes asLandscape() { 304a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav if (!isPortrait()) { 305a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav return this; 306a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav } 307a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 308a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav PrintAttributes attributes = new PrintAttributes(); 309a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 310a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav // Rotate the media size. 311a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav attributes.setMediaSize(getMediaSize().asLandscape()); 312a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 313a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav // Rotate the resolution. 314a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav Resolution oldResolution = getResolution(); 315a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav Resolution newResolution = new Resolution( 316a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav oldResolution.getId(), 317a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav oldResolution.getLabel(), 318a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav oldResolution.getVerticalDpi(), 319a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav oldResolution.getHorizontalDpi()); 320a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav attributes.setResolution(newResolution); 321a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 322525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov // Do not rotate the physical margins. 323525a66b2bb5abf844aff2109bdc9ed819566beceSvet Ganov attributes.setMinMargins(getMinMargins()); 324a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 325a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav attributes.setColorMode(getColorMode()); 326948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav attributes.setDuplexMode(getDuplexMode()); 327a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 328a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav return attributes; 329a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav } 330a798c0a984f29f7180883a61839f68d2cbf0c6ceSvetoslav 3314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 3324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public void writeToParcel(Parcel parcel, int flags) { 3334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (mMediaSize != null) { 3344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(1); 3354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mMediaSize.writeToParcel(parcel); 3364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } else { 3374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(0); 3384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 3394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (mResolution != null) { 3404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(1); 3414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mResolution.writeToParcel(parcel); 3424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } else { 3434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(0); 3444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 345651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav if (mMinMargins != null) { 3464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(1); 347651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav mMinMargins.writeToParcel(parcel); 3484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } else { 3494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(0); 3504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 3514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(mColorMode); 352948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav parcel.writeInt(mDuplexMode); 3534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 3544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 3554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 3564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public int describeContents() { 3574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return 0; 3584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 3594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 36085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov @Override 36185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov public int hashCode() { 36285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov final int prime = 31; 36385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov int result = 1; 36485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + mColorMode; 365948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav result = prime * result + mDuplexMode; 366651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav result = prime * result + ((mMinMargins == null) ? 0 : mMinMargins.hashCode()); 36785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + ((mMediaSize == null) ? 0 : mMediaSize.hashCode()); 36885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + ((mResolution == null) ? 0 : mResolution.hashCode()); 36985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return result; 37085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 37185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov 37285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov @Override 37385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov public boolean equals(Object obj) { 37485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (this == obj) { 37585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return true; 37685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 37785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (obj == null) { 37885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 37985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 38085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (getClass() != obj.getClass()) { 38185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 38285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 38385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov PrintAttributes other = (PrintAttributes) obj; 38485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mColorMode != other.mColorMode) { 38585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 38685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 387948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav if (mDuplexMode != other.mDuplexMode) { 388948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav return false; 389948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 390651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav if (mMinMargins == null) { 391651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav if (other.mMinMargins != null) { 39285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 39385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 394651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav } else if (!mMinMargins.equals(other.mMinMargins)) { 39585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 39685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 39785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mMediaSize == null) { 39885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (other.mMediaSize != null) { 39985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 40085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 40185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } else if (!mMediaSize.equals(other.mMediaSize)) { 40285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 40385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 40485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mResolution == null) { 40585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (other.mResolution != null) { 40685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 40785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 40885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } else if (!mResolution.equals(other.mResolution)) { 40985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 41085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 41185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return true; 41285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 41385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov 41485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov @Override 41585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov public String toString() { 41685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov StringBuilder builder = new StringBuilder(); 41785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov builder.append("PrintAttributes{"); 41885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov builder.append("mediaSize: ").append(mMediaSize); 419cc65b0c325b88c466763712f76148a6f5b8a5b3fSvetoslav if (mMediaSize != null) { 420cc65b0c325b88c466763712f76148a6f5b8a5b3fSvetoslav builder.append(", orientation: ").append(mMediaSize.isPortrait() 421cc65b0c325b88c466763712f76148a6f5b8a5b3fSvetoslav ? "portrait" : "landscape"); 422cc65b0c325b88c466763712f76148a6f5b8a5b3fSvetoslav } else { 423cc65b0c325b88c466763712f76148a6f5b8a5b3fSvetoslav builder.append(", orientation: ").append("null"); 424cc65b0c325b88c466763712f76148a6f5b8a5b3fSvetoslav } 42585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov builder.append(", resolution: ").append(mResolution); 426651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav builder.append(", minMargins: ").append(mMinMargins); 42785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov builder.append(", colorMode: ").append(colorModeToString(mColorMode)); 428948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav builder.append(", duplexMode: ").append(duplexModeToString(mDuplexMode)); 42985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov builder.append("}"); 43085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return builder.toString(); 43185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 43285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov 43381d4014c59d2c6cf23b0465e9b8c94b6bfe428e2Svetoslav /** @hide */ 4344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public void clear() { 4354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mMediaSize = null; 4364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mResolution = null; 437651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav mMinMargins = null; 4384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mColorMode = 0; 439b4efdb4726a442eef38bb6417d5acb8eb68b912dPhilip P. Moltmann mDuplexMode = 0; 4404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 4414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 4424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 4430d1daa50f6d180c57f92596501e2e5c0b5ef9997Svetoslav Ganov * @hide 4440d1daa50f6d180c57f92596501e2e5c0b5ef9997Svetoslav Ganov */ 4450d1daa50f6d180c57f92596501e2e5c0b5ef9997Svetoslav Ganov public void copyFrom(PrintAttributes other) { 4460d1daa50f6d180c57f92596501e2e5c0b5ef9997Svetoslav Ganov mMediaSize = other.mMediaSize; 4470d1daa50f6d180c57f92596501e2e5c0b5ef9997Svetoslav Ganov mResolution = other.mResolution; 448651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav mMinMargins = other.mMinMargins; 4490d1daa50f6d180c57f92596501e2e5c0b5ef9997Svetoslav Ganov mColorMode = other.mColorMode; 450948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav mDuplexMode = other.mDuplexMode; 4510d1daa50f6d180c57f92596501e2e5c0b5ef9997Svetoslav Ganov } 4520d1daa50f6d180c57f92596501e2e5c0b5ef9997Svetoslav Ganov 4530d1daa50f6d180c57f92596501e2e5c0b5ef9997Svetoslav Ganov /** 45422cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * This class specifies a supported media size. Media size is the 45522cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * dimension of the media on which the content is printed. For 45622cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * example, the {@link #NA_LETTER} media size designates a page 45722cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * with size 8.5" x 11". 4584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 4594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public static final class MediaSize { 460773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav private static final String LOG_TAG = "MediaSize"; 4614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 4627be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov private static final Map<String, MediaSize> sIdToMediaSizeMap = 463aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann new ArrayMap<>(); 4647be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov 465d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav /** 466d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav * Unknown media size in portrait mode. 467d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav * <p> 468d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav * <strong>Note: </strong>This is for specifying orientation without media 4694d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * size. You should not use the dimensions reported by this instance. 470d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav * </p> 471d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav */ 472d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav public static final MediaSize UNKNOWN_PORTRAIT = 473d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("UNKNOWN_PORTRAIT", "android", 474b2420c917bf4092f44a2270d7e88ee2380f72080Svetoslav Ganov R.string.mediasize_unknown_portrait, 1, Integer.MAX_VALUE); 475d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav 476d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav /** 477d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav * Unknown media size in landscape mode. 478d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav * <p> 479d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav * <strong>Note: </strong>This is for specifying orientation without media 4804d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * size. You should not use the dimensions reported by this instance. 481d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav * </p> 482d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav */ 483d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav public static final MediaSize UNKNOWN_LANDSCAPE = 484d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("UNKNOWN_LANDSCAPE", "android", 485b2420c917bf4092f44a2270d7e88ee2380f72080Svetoslav Ganov R.string.mediasize_unknown_landscape, Integer.MAX_VALUE, 1); 4864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 4874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov // ISO sizes 4884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 489773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A0 media size: 841mm x 1189mm (33.11" x 46.81") */ 490773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A0 = 491d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A0", "android", R.string.mediasize_iso_a0, 33110, 46810); 492773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A1 media size: 594mm x 841mm (23.39" x 33.11") */ 493773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A1 = 494d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A1", "android", R.string.mediasize_iso_a1, 23390, 33110); 495773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A2 media size: 420mm x 594mm (16.54" x 23.39") */ 496773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A2 = 497d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A2", "android", R.string.mediasize_iso_a2, 16540, 23390); 498773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A3 media size: 297mm x 420mm (11.69" x 16.54") */ 499773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A3 = 500d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A3", "android", R.string.mediasize_iso_a3, 11690, 16540); 501773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A4 media size: 210mm x 297mm (8.27" x 11.69") */ 502773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A4 = 503d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A4", "android", R.string.mediasize_iso_a4, 8270, 11690); 504773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A5 media size: 148mm x 210mm (5.83" x 8.27") */ 505773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A5 = 506d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A5", "android", R.string.mediasize_iso_a5, 5830, 8270); 507773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A6 media size: 105mm x 148mm (4.13" x 5.83") */ 508773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A6 = 509d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A6", "android", R.string.mediasize_iso_a6, 4130, 5830); 510773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A7 media size: 74mm x 105mm (2.91" x 4.13") */ 511773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A7 = 512d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A7", "android", R.string.mediasize_iso_a7, 2910, 4130); 513773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A8 media size: 52mm x 74mm (2.05" x 2.91") */ 514773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A8 = 515d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A8", "android", R.string.mediasize_iso_a8, 2050, 2910); 516773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A9 media size: 37mm x 52mm (1.46" x 2.05") */ 517773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A9 = 518d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A9", "android", R.string.mediasize_iso_a9, 1460, 2050); 519773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO A10 media size: 26mm x 37mm (1.02" x 1.46") */ 520773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_A10 = 521d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_A10", "android", R.string.mediasize_iso_a10, 1020, 1460); 522773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav 523773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B0 media size: 1000mm x 1414mm (39.37" x 55.67") */ 524773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B0 = 525d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B0", "android", R.string.mediasize_iso_b0, 39370, 55670); 526773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B1 media size: 707mm x 1000mm (27.83" x 39.37") */ 527773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B1 = 528d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B1", "android", R.string.mediasize_iso_b1, 27830, 39370); 529773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B2 media size: 500mm x 707mm (19.69" x 27.83") */ 530773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B2 = 531d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B2", "android", R.string.mediasize_iso_b2, 19690, 27830); 532773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B3 media size: 353mm x 500mm (13.90" x 19.69") */ 533773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B3 = 534d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B3", "android", R.string.mediasize_iso_b3, 13900, 19690); 535773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B4 media size: 250mm x 353mm (9.84" x 13.90") */ 536773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B4 = 537d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B4", "android", R.string.mediasize_iso_b4, 9840, 13900); 538773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B5 media size: 176mm x 250mm (6.93" x 9.84") */ 539773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B5 = 540d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B5", "android", R.string.mediasize_iso_b5, 6930, 9840); 541773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B6 media size: 125mm x 176mm (4.92" x 6.93") */ 542773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B6 = 543d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B6", "android", R.string.mediasize_iso_b6, 4920, 6930); 544773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B7 media size: 88mm x 125mm (3.46" x 4.92") */ 545773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B7 = 546d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B7", "android", R.string.mediasize_iso_b7, 3460, 4920); 547773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B8 media size: 62mm x 88mm (2.44" x 3.46") */ 548773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B8 = 549d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B8", "android", R.string.mediasize_iso_b8, 2440, 3460); 550773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B9 media size: 44mm x 62mm (1.73" x 2.44") */ 551773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B9 = 552d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B9", "android", R.string.mediasize_iso_b9, 1730, 2440); 553773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO B10 media size: 31mm x 44mm (1.22" x 1.73") */ 554773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_B10 = 555d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_B10", "android", R.string.mediasize_iso_b10, 1220, 1730); 556773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav 557773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C0 media size: 917mm x 1297mm (36.10" x 51.06") */ 558773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C0 = 559d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C0", "android", R.string.mediasize_iso_c0, 36100, 51060); 560773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C1 media size: 648mm x 917mm (25.51" x 36.10") */ 561773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C1 = 562d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C1", "android", R.string.mediasize_iso_c1, 25510, 36100); 563773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C2 media size: 458mm x 648mm (18.03" x 25.51") */ 564773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C2 = 565d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C2", "android", R.string.mediasize_iso_c2, 18030, 25510); 566773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C3 media size: 324mm x 458mm (12.76" x 18.03") */ 567773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C3 = 568d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C3", "android", R.string.mediasize_iso_c3, 12760, 18030); 569773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C4 media size: 229mm x 324mm (9.02" x 12.76") */ 570773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C4 = 571d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C4", "android", R.string.mediasize_iso_c4, 9020, 12760); 572773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C5 media size: 162mm x 229mm (6.38" x 9.02") */ 573773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C5 = 574d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C5", "android", R.string.mediasize_iso_c5, 6380, 9020); 575773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C6 media size: 114mm x 162mm (4.49" x 6.38") */ 576773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C6 = 577d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C6", "android", R.string.mediasize_iso_c6, 4490, 6380); 578773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C7 media size: 81mm x 114mm (3.19" x 4.49") */ 579773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C7 = 580d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C7", "android", R.string.mediasize_iso_c7, 3190, 4490); 581773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C8 media size: 57mm x 81mm (2.24" x 3.19") */ 582773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C8 = 583d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C8", "android", R.string.mediasize_iso_c8, 2240, 3190); 584773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C9 media size: 40mm x 57mm (1.57" x 2.24") */ 585773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C9 = 586d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C9", "android", R.string.mediasize_iso_c9, 1570, 2240); 587773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** ISO C10 media size: 28mm x 40mm (1.10" x 1.57") */ 588773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize ISO_C10 = 589d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("ISO_C10", "android", R.string.mediasize_iso_c10, 1100, 1570); 5904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 591773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav // North America 592773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav 593fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Letter media size: 8.5" x 11" (279mm x 216mm) */ 594773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize NA_LETTER = 595d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("NA_LETTER", "android", R.string.mediasize_na_letter, 8500, 11000); 596fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Government-Letter media size: 8.0" x 10.5" (203mm x 267mm) */ 597773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize NA_GOVT_LETTER = 598773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav new MediaSize("NA_GOVT_LETTER", "android", 599d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_na_gvrnmt_letter, 8000, 10500); 600fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Legal media size: 8.5" x 14" (216mm x 356mm) */ 601773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize NA_LEGAL = 602d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("NA_LEGAL", "android", R.string.mediasize_na_legal, 8500, 14000); 603fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Junior Legal media size: 8.0" x 5.0" (203mm × 127mm) */ 604773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize NA_JUNIOR_LEGAL = 605773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav new MediaSize("NA_JUNIOR_LEGAL", "android", 606d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_na_junior_legal, 8000, 5000); 607fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Ledger media size: 17" x 11" (432mm × 279mm) */ 608773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public static final MediaSize NA_LEDGER = 609d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav new MediaSize("NA_LEDGER", "android", R.string.mediasize_na_ledger, 17000, 11000); 610fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Tabloid media size: 11" x 17" (279mm × 432mm) */ 611013b816ac7d723a0116c039e6266d93d13851fe1Svetoslav public static final MediaSize NA_TABLOID = 612773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav new MediaSize("NA_TABLOID", "android", 613d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_na_tabloid, 11000, 17000); 614fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Index Card 3x5 media size: 3" x 5" (76mm x 127mm) */ 615fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize NA_INDEX_3X5 = 616fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("NA_INDEX_3X5", "android", 617d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_na_index_3x5, 3000, 5000); 618fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Index Card 4x6 media size: 4" x 6" (102mm x 152mm) */ 619fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize NA_INDEX_4X6 = 620fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("NA_INDEX_4X6", "android", 621d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_na_index_4x6, 4000, 6000); 622fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Index Card 5x8 media size: 5" x 8" (127mm x 203mm) */ 623fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize NA_INDEX_5X8 = 624fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("NA_INDEX_5X8", "android", 625d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_na_index_5x8, 5000, 8000); 626fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Monarch media size: 7.25" x 10.5" (184mm x 267mm) */ 627fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize NA_MONARCH = 628fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("NA_MONARCH", "android", 629d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_na_monarch, 7250, 10500); 630fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Quarto media size: 8" x 10" (203mm x 254mm) */ 631fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize NA_QUARTO = 632fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("NA_QUARTO", "android", 633d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_na_quarto, 8000, 10000); 634fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** North America Foolscap media size: 8" x 13" (203mm x 330mm) */ 635fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize NA_FOOLSCAP = 636fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("NA_FOOLSCAP", "android", 637d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_na_foolscap, 8000, 13000); 638fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 639fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov // Chinese 640fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 641fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese ROC 8K media size: 270mm x 390mm (10.629" x 15.3543") */ 642fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize ROC_8K = 643fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("ROC_8K", "android", 644d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_roc_8k, 10629, 15354); 645fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese ROC 16K media size: 195mm x 270mm (7.677" x 10.629") */ 646fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize ROC_16K = 647fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("ROC_16K", "android", 648d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_roc_16k, 7677, 10629); 649fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 650fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 1 media size: 102mm x 165mm (4.015" x 6.496") */ 651fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize PRC_1 = 652fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("PRC_1", "android", 653d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_1, 4015, 6496); 654fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 2 media size: 102mm x 176mm (4.015" x 6.929") */ 655fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize PRC_2 = 656fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("PRC_2", "android", 657d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_2, 4015, 6929); 658fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 3 media size: 125mm x 176mm (4.921" x 6.929") */ 659fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize PRC_3 = 660fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("PRC_3", "android", 661d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_3, 4921, 6929); 662fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 4 media size: 110mm x 208mm (4.330" x 8.189") */ 663fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize PRC_4 = 664fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("PRC_4", "android", 665d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_4, 4330, 8189); 666fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 5 media size: 110mm x 220mm (4.330" x 8.661") */ 667fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize PRC_5 = 668fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("PRC_5", "android", 669d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_5, 4330, 8661); 670fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 6 media size: 120mm x 320mm (4.724" x 12.599") */ 671fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize PRC_6 = 672fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("PRC_6", "android", 673d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_6, 4724, 12599); 674fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 7 media size: 160mm x 230mm (6.299" x 9.055") */ 675fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize PRC_7 = 676fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("PRC_7", "android", 677d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_7, 6299, 9055); 678fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 8 media size: 120mm x 309mm (4.724" x 12.165") */ 679fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize PRC_8 = 680fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("PRC_8", "android", 681d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_8, 4724, 12165); 682fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 9 media size: 229mm x 324mm (9.016" x 12.756") */ 683fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize PRC_9 = 684fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("PRC_9", "android", 685d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_9, 9016, 12756); 686fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 10 media size: 324mm x 458mm (12.756" x 18.032") */ 687fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize PRC_10 = 688fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("PRC_10", "android", 689d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_10, 12756, 18032); 690fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 691fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese PRC 16k media size: 146mm x 215mm (5.749" x 8.465") */ 6927be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov public static final MediaSize PRC_16K = 6937be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov new MediaSize("PRC_16K", "android", 694d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_prc_16k, 5749, 8465); 695fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese Pa Kai media size: 267mm x 389mm (10.512" x 15.315") */ 696fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize OM_PA_KAI = 697fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("OM_PA_KAI", "android", 698d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_om_pa_kai, 10512, 15315); 699fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese Dai Pa Kai media size: 275mm x 395mm (10.827" x 15.551") */ 700fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize OM_DAI_PA_KAI = 701fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("OM_DAI_PA_KAI", "android", 702d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_om_dai_pa_kai, 10827, 15551); 703fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Chinese Jurro Ku Kai media size: 198mm x 275mm (7.796" x 10.827") */ 704fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize OM_JUURO_KU_KAI = 705fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("OM_JUURO_KU_KAI", "android", 706d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_chinese_om_jurro_ku_kai, 7796, 10827); 707fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 708fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov // Japanese 709fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 710fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B10 media size: 32mm x 45mm (1.259" x 1.772") */ 711fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B10 = 712fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B10", "android", 713d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b10, 1259, 1772); 714fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B9 media size: 45mm x 64mm (1.772" x 2.52") */ 715fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B9 = 716fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B9", "android", 717d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b9, 1772, 2520); 718fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B8 media size: 64mm x 91mm (2.52" x 3.583") */ 719fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B8 = 720fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B8", "android", 721d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b8, 2520, 3583); 722fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B7 media size: 91mm x 128mm (3.583" x 5.049") */ 723fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B7 = 724fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B7", "android", 725d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b7, 3583, 5049); 726fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B6 media size: 128mm x 182mm (5.049" x 7.165") */ 727fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B6 = 728fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B6", "android", 729d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b6, 5049, 7165); 730fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B5 media size: 182mm x 257mm (7.165" x 10.118") */ 731fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B5 = 732fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B5", "android", 733d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b5, 7165, 10118); 734fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B4 media size: 257mm x 364mm (10.118" x 14.331") */ 735fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B4 = 736fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B4", "android", 737d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b4, 10118, 14331); 738fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B3 media size: 364mm x 515mm (14.331" x 20.276") */ 739fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B3 = 740fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B3", "android", 741d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b3, 14331, 20276); 742fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B2 media size: 515mm x 728mm (20.276" x 28.661") */ 743fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B2 = 744fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B2", "android", 745d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b2, 20276, 28661); 746fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B1 media size: 728mm x 1030mm (28.661" x 40.551") */ 747fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B1 = 748fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B1", "android", 749d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b1, 28661, 40551); 750fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS B0 media size: 1030mm x 1456mm (40.551" x 57.323") */ 751fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_B0 = 752fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_B0", "android", 753d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_b0, 40551, 57323); 754fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 755fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese JIS Exec media size: 216mm x 330mm (8.504" x 12.992") */ 756fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JIS_EXEC = 757fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JIS_EXEC", "android", 758d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_jis_exec, 8504, 12992); 759fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 760fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese Chou4 media size: 90mm x 205mm (3.543" x 8.071") */ 761fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JPN_CHOU4 = 762fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JPN_CHOU4", "android", 763d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_chou4, 3543, 8071); 764fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese Chou3 media size: 120mm x 235mm (4.724" x 9.252") */ 765fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JPN_CHOU3 = 766fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JPN_CHOU3", "android", 767d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_chou3, 4724, 9252); 768fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese Chou2 media size: 111.1mm x 146mm (4.374" x 5.748") */ 769fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JPN_CHOU2 = 770fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JPN_CHOU2", "android", 771d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_chou2, 4374, 5748); 772fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 773fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese Hagaki media size: 100mm x 148mm (3.937" x 5.827") */ 774fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JPN_HAGAKI = 775fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JPN_HAGAKI", "android", 776d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_hagaki, 3937, 5827); 777fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese Oufuku media size: 148mm x 200mm (5.827" x 7.874") */ 778fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JPN_OUFUKU = 779fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JPN_OUFUKU", "android", 780d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_oufuku, 5827, 7874); 781fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 782fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese Kahu media size: 240mm x 322.1mm (9.449" x 12.681") */ 783fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JPN_KAHU = 784fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JPN_KAHU", "android", 785d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_kahu, 9449, 12681); 786fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese Kaku2 media size: 240mm x 332mm (9.449" x 13.071") */ 787fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JPN_KAKU2 = 788fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JPN_KAKU2", "android", 789d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_kaku2, 9449, 13071); 790fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov 791fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov /** Japanese You4 media size: 105mm x 235mm (4.134" x 9.252") */ 792fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov public static final MediaSize JPN_YOU4 = 793fa77ece25a98810b6f56130d4a83c62b2e34c4f5Svetoslav Ganov new MediaSize("JPN_YOU4", "android", 794d8f391b4e0e8d876ec7216d34f86a9b3e8bab7e5Svetoslav R.string.mediasize_japanese_you4, 4134, 9252); 7954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 796aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private final @NonNull String mId; 797773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /**@hide */ 798aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public final @NonNull String mLabel; 799773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /**@hide */ 800aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public final @Nullable String mPackageName; 801773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /**@hide */ 802aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public final @StringRes int mLabelResId; 803aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private final @IntRange(from = 1) int mWidthMils; 804aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private final @IntRange(from = 1) int mHeightMils; 80517b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav 8064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 8074d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * Creates a new instance. 808773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * 809773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * @param id The unique media size id. 810773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * @param packageName The name of the creating package. 811773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * @param labelResId The resource if of a human readable label. 812823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * @param widthMils The width in mils (thousandths of an inch). 813823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * @param heightMils The height in mils (thousandths of an inch). 814773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * 8154d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @throws IllegalArgumentException If the id is empty or the label 8164d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * is empty or the widthMils is less than or equal to zero or the 8174d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * heightMils is less than or equal to zero. 818a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav * 819a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav * @hide 820773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav */ 821773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public MediaSize(String id, String packageName, int labelResId, 822773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav int widthMils, int heightMils) { 823aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann this(id, null, packageName, widthMils, heightMils, labelResId); 8247be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov 8257be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov // Build this mapping only for predefined media sizes. 8267be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov sIdToMediaSizeMap.put(mId, this); 827773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav } 828773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav 829773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** 830a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav * Creates a new instance. 8314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 83222cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * @param id The unique media size id. It is unique amongst other media sizes 83322cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * supported by the printer. 8344d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @param label The <strong>localized</strong> human readable label. 835823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * @param widthMils The width in mils (thousandths of an inch). 836823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * @param heightMils The height in mils (thousandths of an inch). 8374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 8384d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @throws IllegalArgumentException If the id is empty or the label is empty 8394d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * or the widthMils is less than or equal to zero or the heightMils is less 8404d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * than or equal to zero. 8414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 842c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public MediaSize(@NonNull String id, @NonNull String label, 843c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann @IntRange(from = 1) int widthMils, @IntRange(from = 1) int heightMils) { 844aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann this(id, label, null, widthMils, heightMils, 0); 845773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav } 846773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav 8474959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann /** 8484959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann * Get the Id of all predefined media sizes beside the {@link #UNKNOWN_PORTRAIT} and 8494959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann * {@link #UNKNOWN_LANDSCAPE}. 8504959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann * 8514959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann * @return List of all predefined media sizes 8524959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann * 8534959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann * @hide 8544959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann */ 8554959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann public static @NonNull ArraySet<MediaSize> getAllPredefinedSizes() { 8564959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann ArraySet<MediaSize> definedMediaSizes = new ArraySet<>(sIdToMediaSizeMap.values()); 8574959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann 8584959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann definedMediaSizes.remove(UNKNOWN_PORTRAIT); 8594959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann definedMediaSizes.remove(UNKNOWN_LANDSCAPE); 8604959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann 8614959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann return definedMediaSizes; 8624959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann } 8634959caf149c49f0a58c6a89ec01b909baf3fa579Philip P. Moltmann 864aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann /** 865aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * Creates a new instance. 866aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * 867aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * @param id The unique media size id. It is unique amongst other media sizes 868aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * supported by the printer. 869aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * @param label The <strong>localized</strong> human readable label. 870aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * @param packageName The name of the creating package. 871823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * @param widthMils The width in mils (thousandths of an inch). 872823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * @param heightMils The height in mils (thousandths of an inch). 873aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * @param labelResId The resource if of a human readable label. 874aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * 875aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * @throws IllegalArgumentException If the id is empty or the label is unset 876aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * or the widthMils is less than or equal to zero or the heightMils is less 877aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * than or equal to zero. 878aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * 879aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann * @hide 880aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann */ 881aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public MediaSize(String id, String label, String packageName, int widthMils, int heightMils, 882aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann int labelResId) { 883773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav mPackageName = packageName; 884aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann mId = Preconditions.checkStringNotEmpty(id, "id cannot be empty."); 885773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav mLabelResId = labelResId; 886aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann mWidthMils = Preconditions.checkArgumentPositive(widthMils, "widthMils cannot be " + 887aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann "less than or equal to zero."); 888aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann mHeightMils = Preconditions.checkArgumentPositive(heightMils, "heightMils cannot be " + 889aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann "less than or equal to zero."); 890773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav mLabel = label; 891aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann 892aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann // The label has to be either a string ot a StringRes 893aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann Preconditions.checkArgument(!TextUtils.isEmpty(label) != 894aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann (!TextUtils.isEmpty(packageName) && labelResId != 0), "label cannot be empty."); 8954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 8964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 89717b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav /** 89822cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * Gets the unique media size id. It is unique amongst other media sizes 89922cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * supported by the printer. 90022cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * <p> 90122cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * This id is defined by the client that generated the media size 90222cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * instance and should not be interpreted by other parties. 90322cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * </p> 90417b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * 90517b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * @return The unique media size id. 90617b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav */ 907c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull String getId() { 90817b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav return mId; 90917b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav } 91017b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav 91117b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav /** 91217b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * Gets the human readable media size label. 91317b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * 914773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * @param packageManager The package manager for loading the label. 91517b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * @return The human readable label. 91617b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav */ 917c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull String getLabel(@NonNull PackageManager packageManager) { 918773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav if (!TextUtils.isEmpty(mPackageName) && mLabelResId > 0) { 919773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav try { 920773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav return packageManager.getResourcesForApplication( 921773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav mPackageName).getString(mLabelResId); 922aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann } catch (NotFoundException | NameNotFoundException e) { 923773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav Log.w(LOG_TAG, "Could not load resouce" + mLabelResId 924773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav + " from package " + mPackageName); 925773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav } 926773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav } 92717b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav return mLabel; 92817b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav } 92917b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav 93017b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav /** 931823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * Gets the media width in mils (thousandths of an inch). 93217b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * 93317b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * @return The media width. 93417b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav */ 935c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @IntRange(from = 1) int getWidthMils() { 93617b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav return mWidthMils; 93717b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav } 93817b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav 93917b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav /** 940823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * Gets the media height in mils (thousandths of an inch). 94117b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * 94217b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * @return The media height. 94317b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav */ 944c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @IntRange(from = 1) int getHeightMils() { 94517b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav return mHeightMils; 94617b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav } 94717b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav 948773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** 949773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * Gets whether this media size is in portrait which is the 950773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * height is greater or equal to the width. 951773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * 952773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * @return True if the media size is in portrait, false if 953773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * it is in landscape. 954773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav */ 955773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav public boolean isPortrait() { 956773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav return mHeightMils >= mWidthMils; 957773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav } 958773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav 959773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** 9604d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * Returns a new media size instance in a portrait orientation, 961a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav * which is the height is the greater dimension. 962773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * 9634d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @return New instance in landscape orientation if this one 9644d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * is in landscape, otherwise this instance. 965773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav */ 966c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull MediaSize asPortrait() { 9674d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov if (isPortrait()) { 9684d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov return this; 9694d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov } 970a36285f3f2f74b1d2d5d0336ffe519ab9f6e062aSvetoslav return new MediaSize(mId, mLabel, mPackageName, 971a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav Math.min(mWidthMils, mHeightMils), 972a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav Math.max(mWidthMils, mHeightMils), 973a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav mLabelResId); 974773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav } 975773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav 976773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav /** 9774d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * Returns a new media size instance in a landscape orientation, 978a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav * which is the height is the lesser dimension. 979773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav * 9804d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @return New instance in landscape orientation if this one 9814d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * is in portrait, otherwise this instance. 982773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav */ 983c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull MediaSize asLandscape() { 9844d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov if (!isPortrait()) { 9854d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov return this; 9864d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov } 987a36285f3f2f74b1d2d5d0336ffe519ab9f6e062aSvetoslav return new MediaSize(mId, mLabel, mPackageName, 988773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav Math.max(mWidthMils, mHeightMils), 989a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav Math.min(mWidthMils, mHeightMils), 990a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav mLabelResId); 991773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav } 992773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav 9934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov void writeToParcel(Parcel parcel) { 9944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeString(mId); 995798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov parcel.writeString(mLabel); 996773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav parcel.writeString(mPackageName); 9974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(mWidthMils); 9984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(mHeightMils); 999773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav parcel.writeInt(mLabelResId); 10004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 10014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 10024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov static MediaSize createFromParcel(Parcel parcel) { 10034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new MediaSize( 10044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.readString(), 1005798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov parcel.readString(), 1006773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav parcel.readString(), 1007773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav parcel.readInt(), 10084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.readInt(), 10094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.readInt()); 10104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 10114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 10124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 101385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov public int hashCode() { 101485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov final int prime = 31; 101585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov int result = 1; 101685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + mWidthMils; 101785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + mHeightMils; 101885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return result; 101985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 102085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov 102185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov @Override 102285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov public boolean equals(Object obj) { 102385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (this == obj) { 102485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return true; 102585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 102685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (obj == null) { 102785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 102885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 102985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (getClass() != obj.getClass()) { 103085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 103185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 103285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov MediaSize other = (MediaSize) obj; 103385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mWidthMils != other.mWidthMils) { 103485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 103585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 103685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mHeightMils != other.mHeightMils) { 103785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 103885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 103985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return true; 104085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 104185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov 104285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov @Override 10434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public String toString() { 10444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov StringBuilder builder = new StringBuilder(); 10454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("MediaSize{"); 10464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("id: ").append(mId); 104717b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav builder.append(", label: ").append(mLabel); 1048773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav builder.append(", packageName: ").append(mPackageName); 10494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append(", heightMils: ").append(mHeightMils); 10504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append(", widthMils: ").append(mWidthMils); 1051773f54de3de9bce7b6f915aa47ed686b161d77aaSvetoslav builder.append(", labelResId: ").append(mLabelResId); 10524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("}"); 10534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return builder.toString(); 10544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 10557be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov 10567be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov /** 10577be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov * Gets a standard media size given its id. 10587be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov * 10597be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov * @param id The media size id. 10607be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov * @return The media size for the given id or null. 10617be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov * 10627be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov * @hide 10637be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov */ 10647be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov public static MediaSize getStandardMediaSizeById(String id) { 10657be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov return sIdToMediaSizeMap.get(id); 10667be27acac922b5ea66ec6b464ded6f057bd6f1e5Svetoslav Ganov } 10674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 10684b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 10694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 107022cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * This class specifies a supported resolution in DPI (dots per inch). 107122cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * Resolution defines how many points with different color can be placed 107222cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * on one inch in horizontal or vertical direction of the target media. 10734d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * For example, a printer with 600 DPI can produce higher quality images 10744d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * the one with 300 DPI resolution. 10754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 10764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public static final class Resolution { 1077aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private final @NonNull String mId; 1078aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private final @NonNull String mLabel; 1079aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private final @IntRange(from = 1) int mHorizontalDpi; 1080aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann private final @IntRange(from = 1) int mVerticalDpi; 10814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 10824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1083a76233ae845da4bc9e3bcd89821701a747215e7bSvetoslav * Creates a new instance. 108417b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * 108522cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * @param id The unique resolution id. It is unique amongst other resolutions 108622cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * supported by the printer. 10874d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @param label The <strong>localized</strong> human readable label. 108822cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * @param horizontalDpi The horizontal resolution in DPI (dots per inch). 108922cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * @param verticalDpi The vertical resolution in DPI (dots per inch). 109017b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * 10914d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * @throws IllegalArgumentException If the id is empty or the label is empty 10924d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * or the horizontalDpi is less than or equal to zero or the verticalDpi is 10934d4c66dd38e940082e385b49a33f4022ab04c738Svetoslav Ganov * less than or equal to zero. 109417b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav */ 1095c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public Resolution(@NonNull String id, @NonNull String label, 1096c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann @IntRange(from = 1) int horizontalDpi, @IntRange(from = 1) int verticalDpi) { 109717b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav if (TextUtils.isEmpty(id)) { 109817b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav throw new IllegalArgumentException("id cannot be empty."); 109917b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav } 110017b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav if (TextUtils.isEmpty(label)) { 110117b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav throw new IllegalArgumentException("label cannot be empty."); 110217b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav } 110317b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav if (horizontalDpi <= 0) { 110417b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav throw new IllegalArgumentException("horizontalDpi " 110517b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav + "cannot be less than or equal to zero."); 110617b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav } 110717b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav if (verticalDpi <= 0) { 110817b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav throw new IllegalArgumentException("verticalDpi" 110917b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav + " cannot be less than or equal to zero."); 111017b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav } 111117b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav mId = id; 111217b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav mLabel = label; 111317b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav mHorizontalDpi = horizontalDpi; 111417b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav mVerticalDpi = verticalDpi; 111517b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav } 111617b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav 111717b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav /** 111822cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * Gets the unique resolution id. It is unique amongst other resolutions 111922cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * supported by the printer. 112022cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * <p> 112122cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * This id is defined by the client that generated the resolution 112222cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * instance and should not be interpreted by other parties. 112322cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * </p> 11244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 11254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The unique resolution id. 11264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1127c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull String getId() { 11284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mId; 11294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 11304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 11314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 11324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Gets the resolution human readable label. 11334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 11344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The human readable label. 11354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1136c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull String getLabel() { 113717b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav return mLabel; 11384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 11394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 11404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 114122cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * Gets the horizontal resolution in DPI (dots per inch). 11424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 11434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The horizontal resolution. 11444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1145c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @IntRange(from = 1) int getHorizontalDpi() { 11464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mHorizontalDpi; 11474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 11484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 11494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 115022cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * Gets the vertical resolution in DPI (dots per inch). 11514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 11524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The vertical resolution. 11534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1154c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @IntRange(from = 1) int getVerticalDpi() { 11554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mVerticalDpi; 11564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 11574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 11584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov void writeToParcel(Parcel parcel) { 11594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeString(mId); 1160798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov parcel.writeString(mLabel); 11614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(mHorizontalDpi); 11624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(mVerticalDpi); 11634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 11644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 11654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov static Resolution createFromParcel(Parcel parcel) { 11664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new Resolution( 11674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.readString(), 1168798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov parcel.readString(), 11694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.readInt(), 11704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.readInt()); 11714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 11724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 11734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 117485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov public int hashCode() { 117585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov final int prime = 31; 117685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov int result = 1; 117785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + mHorizontalDpi; 117885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + mVerticalDpi; 117985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return result; 118085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 118185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov 118285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov @Override 118385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov public boolean equals(Object obj) { 118485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (this == obj) { 118585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return true; 118685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 118785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (obj == null) { 118885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 118985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 119085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (getClass() != obj.getClass()) { 119185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 119285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 119385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov Resolution other = (Resolution) obj; 119485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mHorizontalDpi != other.mHorizontalDpi) { 119585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 119685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 119785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mVerticalDpi != other.mVerticalDpi) { 119885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 119985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 120085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return true; 120185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 120285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov 120385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov @Override 12044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public String toString() { 12054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov StringBuilder builder = new StringBuilder(); 12064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("Resolution{"); 12074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("id: ").append(mId); 120817b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav builder.append(", label: ").append(mLabel); 12094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append(", horizontalDpi: ").append(mHorizontalDpi); 12104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append(", verticalDpi: ").append(mVerticalDpi); 12114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("}"); 12124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return builder.toString(); 12134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 12144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 12154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 12164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 121722cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * This class specifies content margins. Margins define the white space 121822cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * around the content where the left margin defines the amount of white 121922cb9170d33eb6da54fc36b783fcb93fd6057749Svetoslav Ganov * space on the left of the content and so on. 12204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 12214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public static final class Margins { 1222aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov public static final Margins NO_MARGINS = new Margins(0, 0, 0, 0); 1223aec1417ca9eb63209668ac17da90cf8a07c6076cSvetoslav Ganov 12244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov private final int mLeftMils; 12254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov private final int mTopMils; 12264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov private final int mRightMils; 12274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov private final int mBottomMils; 12284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 12294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 123017b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * Creates a new instance. 123117b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav * 1232823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * @param leftMils The left margin in mils (thousandths of an inch). 1233823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * @param topMils The top margin in mils (thousandths of an inch). 1234823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * @param rightMils The right margin in mils (thousandths of an inch). 1235823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * @param bottomMils The bottom margin in mils (thousandths of an inch). 123617b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav */ 1237aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public Margins(int leftMils, int topMils, int rightMils, int bottomMils) { 123817b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav mTopMils = topMils; 123917b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav mLeftMils = leftMils; 124017b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav mRightMils = rightMils; 124117b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav mBottomMils = bottomMils; 124217b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav } 124317b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav 124417b7f6e6d4ec9f5e9597bfd283f1c017b6c66275Svetoslav /** 1245823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * Gets the left margin in mils (thousandths of an inch). 12464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 12474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The left margin. 12484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1249aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public int getLeftMils() { 12504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mLeftMils; 12514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 12524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 12534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1254823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * Gets the top margin in mils (thousandths of an inch). 12554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 12564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The top margin. 12574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1258aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public int getTopMils() { 12594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mTopMils; 12604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 12614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 12624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1263823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * Gets the right margin in mils (thousandths of an inch). 12644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 12654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The right margin. 12664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1267aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public int getRightMils() { 12684b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mRightMils; 12694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 12704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 12714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1272823715d656381a84b8c6c6d63769c663b417274dPhilip P. Moltmann * Gets the bottom margin in mils (thousandths of an inch). 12734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 12744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The bottom margin. 12754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1276aa8a4fed075fdd9faa6c9d5b150fc28e1a834122Philip P. Moltmann public int getBottomMils() { 12774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mBottomMils; 12784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 12794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 12804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov void writeToParcel(Parcel parcel) { 12814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(mLeftMils); 12824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(mTopMils); 12834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(mRightMils); 12844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeInt(mBottomMils); 12854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 12864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 12874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov static Margins createFromParcel(Parcel parcel) { 12884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new Margins( 12894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.readInt(), 12904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.readInt(), 12914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.readInt(), 12924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.readInt()); 12934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 12944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 12954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 129685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov public int hashCode() { 129785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov final int prime = 31; 129885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov int result = 1; 129985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + mBottomMils; 130085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + mLeftMils; 130185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + mRightMils; 130285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov result = prime * result + mTopMils; 130385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return result; 130485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 130585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov 130685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov @Override 130785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov public boolean equals(Object obj) { 130885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (this == obj) { 130985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return true; 131085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 131185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (obj == null) { 131285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 131385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 131485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (getClass() != obj.getClass()) { 131585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 131685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 131785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov Margins other = (Margins) obj; 131885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mBottomMils != other.mBottomMils) { 131985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 132085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 132185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mLeftMils != other.mLeftMils) { 132285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 132385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 132485b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mRightMils != other.mRightMils) { 132585b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 132685b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 132785b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov if (mTopMils != other.mTopMils) { 132885b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return false; 132985b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 133085b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov return true; 133185b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov } 133285b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov 133385b1f883056a1d74473fd9ce774948878f389ab6Svetoslav Ganov @Override 13344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public String toString() { 13354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov StringBuilder builder = new StringBuilder(); 13364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("Margins{"); 13374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("leftMils: ").append(mLeftMils); 13384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append(", topMils: ").append(mTopMils); 13394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append(", rightMils: ").append(mRightMils); 13404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append(", bottomMils: ").append(mBottomMils); 13414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("}"); 13424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return builder.toString(); 13434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 13444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 13454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1346798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov static String colorModeToString(int colorMode) { 13474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov switch (colorMode) { 13484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov case COLOR_MODE_MONOCHROME: { 13494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return "COLOR_MODE_MONOCHROME"; 13504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 13514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov case COLOR_MODE_COLOR: { 13524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return "COLOR_MODE_COLOR"; 13534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1354948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav default: { 13554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return "COLOR_MODE_UNKNOWN"; 1356948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 1357948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 1358948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 1359948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav 1360948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav static String duplexModeToString(int duplexMode) { 1361948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav switch (duplexMode) { 1362948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav case DUPLEX_MODE_NONE: { 1363948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav return "DUPLEX_MODE_NONE"; 1364948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 1365948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav case DUPLEX_MODE_LONG_EDGE: { 1366948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav return "DUPLEX_MODE_LONG_EDGE"; 1367948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 1368948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav case DUPLEX_MODE_SHORT_EDGE: { 1369948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav return "DUPLEX_MODE_SHORT_EDGE"; 1370948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 1371948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav default: { 1372948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav return "DUPLEX_MODE_UNKNOWN"; 1373948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 13744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 13754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 13764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 13774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov static void enforceValidColorMode(int colorMode) { 1378948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav if ((colorMode & VALID_COLOR_MODES) == 0 || Integer.bitCount(colorMode) != 1) { 13794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov throw new IllegalArgumentException("invalid color mode: " + colorMode); 13804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 13814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 13824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1383948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav static void enforceValidDuplexMode(int duplexMode) { 1384948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav if ((duplexMode & VALID_DUPLEX_MODES) == 0 || Integer.bitCount(duplexMode) != 1) { 1385948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav throw new IllegalArgumentException("invalid duplex mode: " + duplexMode); 1386948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 1387948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 1388948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav 13894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 13904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Builder for creating {@link PrintAttributes}. 13914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 13924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public static final class Builder { 13934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov private final PrintAttributes mAttributes = new PrintAttributes(); 13944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 13954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 13964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Sets the media size. 13974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 13984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @param mediaSize The media size. 13994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return This builder. 14004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1401c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull Builder setMediaSize(@NonNull MediaSize mediaSize) { 14024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mAttributes.setMediaSize(mediaSize); 14034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return this; 14044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 14054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 14064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 14074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Sets the resolution. 14084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 14094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @param resolution The resolution. 14104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return This builder. 14114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1412c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull Builder setResolution(@NonNull Resolution resolution) { 14134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mAttributes.setResolution(resolution); 14144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return this; 14154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 14164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 14174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1418651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav * Sets the minimal margins. If the content does not fit 1419651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav * these margins it will be clipped. 14204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 14214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @param margins The margins. 14224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return This builder. 14234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1424c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull Builder setMinMargins(@NonNull Margins margins) { 1425651dd4e6ee6510caf9f15c51094a11121af17ec2Svetoslav mAttributes.setMinMargins(margins); 14264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return this; 14274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 14284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 14294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 14304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Sets the color mode. 14314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 14324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @param colorMode A valid color mode or zero. 14334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return This builder. 14344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 14354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @see PrintAttributes#COLOR_MODE_MONOCHROME 14364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @see PrintAttributes#COLOR_MODE_COLOR 14374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1438c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull Builder setColorMode(@ColorMode int colorMode) { 14394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mAttributes.setColorMode(colorMode); 14404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return this; 14414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 14424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 14434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1444948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * Sets the duplex mode. 1445948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * 1446948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @param duplexMode A valid duplex mode or zero. 1447948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @return This builder. 1448948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * 1449948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @see PrintAttributes#DUPLEX_MODE_NONE 1450948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @see PrintAttributes#DUPLEX_MODE_LONG_EDGE 1451948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav * @see PrintAttributes#DUPLEX_MODE_SHORT_EDGE 1452948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav */ 1453c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull Builder setDuplexMode(@DuplexMode int duplexMode) { 1454948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav mAttributes.setDuplexMode(duplexMode); 1455948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav return this; 1456948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav } 1457948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav 1458948c9a6393e0995a4d988d5d164998aa0e12b25dSvetoslav /** 14594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Creates a new {@link PrintAttributes} instance. 14604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 14614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The new instance. 14624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1463c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull PrintAttributes build() { 14644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mAttributes; 14654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 14664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 14674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 14684b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public static final Parcelable.Creator<PrintAttributes> CREATOR = 14694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov new Creator<PrintAttributes>() { 14704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 14714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public PrintAttributes createFromParcel(Parcel parcel) { 14724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new PrintAttributes(parcel); 14734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 14744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 14754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 14764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public PrintAttributes[] newArray(int size) { 14774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new PrintAttributes[size]; 14784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 14794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov }; 14804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov} 1481