summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorSvetoslav <svetoslavganov@google.com>2013-09-03 14:01:43 -0700
committerSvetoslav <svetoslavganov@google.com>2013-09-04 21:06:12 -0700
commit773f54de3de9bce7b6f915aa47ed686b161d77aa (patch)
treef5849053ebf63d993ff9e3c629b1f8df6e95f4b9 /core/java
parentad0ec16fbe27e69e22b90ad9f1b9e322d8c20e8d (diff)
downloadframeworks_base-773f54de3de9bce7b6f915aa47ed686b161d77aa.zip
frameworks_base-773f54de3de9bce7b6f915aa47ed686b161d77aa.tar.gz
frameworks_base-773f54de3de9bce7b6f915aa47ed686b161d77aa.tar.bz2
Print API updated.
1. Removed the updatePrinters API on PrinterDiscoverySession. Now re-adding a printer updates it. 2. Added getTrackedPrinters() API to allow a print service to figure out which printers' state should be tracked by the service. 3. Removed the APIs on PrintDocumentInfo that describe the layout of the content as they are not needed. For example, if the print attributes passed in layout require landscape mode, the the app should just create a PDF page with the wider side up and draw its content in portrait. The printer will then rotate the page. Change-Id: Idd72c6e9c129e8b17eef1236573a99773f8ff0a2
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/print/IPrinterDiscoveryObserver.aidl1
-rw-r--r--core/java/android/print/PrintAttributes.java1253
-rw-r--r--core/java/android/print/PrintDocumentAdapter.java22
-rw-r--r--core/java/android/print/PrintDocumentInfo.java239
-rw-r--r--core/java/android/print/PrinterCapabilitiesInfo.java418
-rw-r--r--core/java/android/print/PrinterDiscoverySession.java38
-rw-r--r--core/java/android/printservice/IPrintServiceClient.aidl1
-rw-r--r--core/java/android/printservice/PrinterDiscoverySession.java168
-rw-r--r--core/java/android/provider/Settings.java14
9 files changed, 402 insertions, 1752 deletions
diff --git a/core/java/android/print/IPrinterDiscoveryObserver.aidl b/core/java/android/print/IPrinterDiscoveryObserver.aidl
index 625f383..71198f7 100644
--- a/core/java/android/print/IPrinterDiscoveryObserver.aidl
+++ b/core/java/android/print/IPrinterDiscoveryObserver.aidl
@@ -28,5 +28,4 @@ import android.print.PrinterInfo;
oneway interface IPrinterDiscoveryObserver {
void onPrintersAdded(in List<PrinterInfo> printers);
void onPrintersRemoved(in List<PrinterId> printerIds);
- void onPrintersUpdated(in List<PrinterInfo> printerIds);
}
diff --git a/core/java/android/print/PrintAttributes.java b/core/java/android/print/PrintAttributes.java
index caa10ae..f975ebd 100644
--- a/core/java/android/print/PrintAttributes.java
+++ b/core/java/android/print/PrintAttributes.java
@@ -18,10 +18,11 @@ package android.print;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
+import android.content.res.Resources.NotFoundException;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
+import android.util.Log;
import com.android.internal.R;
@@ -29,60 +30,20 @@ import com.android.internal.R;
* This class represents the attributes of a print job.
*/
public final class PrintAttributes implements Parcelable {
- /** Duplex mode: No duplexing */
- public static final int DUPLEX_MODE_NONE = 1 << 0;
- /** Duplex mode: Turn a page along its long edge, e.g. like a book */
- public static final int DUPLEX_MODE_LONG_EDGE = 1 << 1;
- /** Duplex mode: Turn a page along its short edge, e.g. like a notepad */
- public static final int DUPLEX_MODE_SHORT_EDGE = 1 << 2;
-
-
- /** Orientation: Portrait page orientation. */
- public static final int ORIENTATION_PORTRAIT = 1 << 0;
- /** Orientation: Landscape page orientation. */
- public static final int ORIENTATION_LANDSCAPE = 1 << 1;
-
/** Color mode: Monochrome color scheme, e.g. one color is used. */
public static final int COLOR_MODE_MONOCHROME = 1 << 0;
/** Color mode: Color color scheme, e.g. many colors are used. */
public static final int COLOR_MODE_COLOR = 1 << 1;
-
- /** Fitting mode: No fitting. */
- public static final int FITTING_MODE_NONE = 1 << 0;
- /** Fitting mode: Scale the content to fit in the page
- * without cropping it in any dimension. */
- public static final int FITTING_MODE_SCALE_TO_FIT = 1 << 1;
- /**
- * Fitting mode: Uniformly scale the content to fill the entire page
- * potentially cropping the content if it overflows in one dimension.
- */
- public static final int FITTING_MODE_SCALE_TO_FILL = 1 << 2;
-
-
- private static final int VALID_DUPLEX_MODES =
- DUPLEX_MODE_NONE | DUPLEX_MODE_LONG_EDGE | DUPLEX_MODE_SHORT_EDGE;
-
private static final int VALID_COLOR_MODES =
COLOR_MODE_MONOCHROME | COLOR_MODE_COLOR;
- private static final int VALID_FITTING_MODES =
- FITTING_MODE_NONE | FITTING_MODE_SCALE_TO_FIT | FITTING_MODE_SCALE_TO_FILL;
-
- private static final int VALID_ORIENTATIONS =
- ORIENTATION_PORTRAIT | ORIENTATION_LANDSCAPE;
-
private MediaSize mMediaSize;
private Resolution mResolution;
private Margins mMargins;
- private Tray mInputTray;
- private Tray mOutputTray;
- private int mDuplexMode;
private int mColorMode;
- private int mFittingMode;
- private int mOrientation;
PrintAttributes() {
/* hide constructor */
@@ -92,12 +53,7 @@ public final class PrintAttributes implements Parcelable {
mMediaSize = (parcel.readInt() == 1) ? MediaSize.createFromParcel(parcel) : null;
mResolution = (parcel.readInt() == 1) ? Resolution.createFromParcel(parcel) : null;
mMargins = (parcel.readInt() == 1) ? Margins.createFromParcel(parcel) : null;
- mInputTray = (parcel.readInt() == 1) ? Tray.createFromParcel(parcel) : null;
- mOutputTray = (parcel.readInt() == 1) ? Tray.createFromParcel(parcel) : null;
- mDuplexMode = parcel.readInt();
mColorMode = parcel.readInt();
- mFittingMode = parcel.readInt();
- mOrientation = parcel.readInt();
}
/**
@@ -161,71 +117,6 @@ public final class PrintAttributes implements Parcelable {
}
/**
- * Sets the input tray.
- *
- * @return The input tray or <code>null</code> if not set.
- */
- public Tray getInputTray() {
- return mInputTray;
- }
-
- /**
- * Gets the input tray.
- *
- * @param The input tray.
- *
- * @hide
- */
- public void setInputTray(Tray inputTray) {
- mInputTray = inputTray;
- }
-
- /**
- * Gets the output tray.
- *
- * @return The output tray or <code>null</code> if not set.
- */
- public Tray getOutputTray() {
- return mOutputTray;
- }
-
- /**
- * Sets the output tray.
- *
- * @param The output tray.
- *
- * @hide
- */
- public void setOutputTray(Tray outputTray) {
- mOutputTray = outputTray;
- }
-
- /**
- * Gets the duplex mode.
- *
- * @return The duplex mode or zero if not set.
- *
- * @see #DUPLEX_MODE_NONE
- * @see #DUPLEX_MODE_SHORT_EDGE
- * @see #DUPLEX_MODE_LONG_EDGE
- */
- public int getDuplexMode() {
- return mDuplexMode;
- }
-
- /**
- * Sets the duplex mode.
- *
- * @param The duplex mode.
- *
- * @hide
- */
- public void setDuplexMode(int duplexMode) {
- enforceValidDuplexMode(duplexMode);
- mDuplexMode = duplexMode;
- }
-
- /**
* Gets the color mode.
*
* @return The color mode or zero if not set.
@@ -252,62 +143,6 @@ public final class PrintAttributes implements Parcelable {
mColorMode = colorMode;
}
- /**
- * Gets the fitting mode.
- *
- * @return The fitting mode or zero if not set.
- *
- * @see #FITTING_MODE_NONE
- * @see #FITTING_MODE_SCALE_TO_FILL
- * @see #FITTING_MODE_SCALE_TO_FIT
- */
- public int getFittingMode() {
- return mFittingMode;
- }
-
- /**
- * Sets the fitting mode.
- *
- * @param The fitting mode.
- *
- * @see #FITTING_MODE_NONE
- * @see #FITTING_MODE_SCALE_TO_FILL
- * @see #FITTING_MODE_SCALE_TO_FIT
- *
- * @hide
- */
- public void setFittingMode(int fittingMode) {
- enforceValidFittingMode(fittingMode);
- mFittingMode = fittingMode;
- }
-
- /**
- * Gets the orientation.
- *
- * @return The orientation or zero if not set.
- *
- * @see #ORIENTATION_PORTRAIT
- * @see #ORIENTATION_LANDSCAPE
- */
- public int getOrientation() {
- return mOrientation;
- }
-
- /**
- * Sets the orientation.
- *
- * @param The orientation.
- *
- * @see #ORIENTATION_PORTRAIT
- * @see #ORIENTATION_LANDSCAPE
- *
- * @hide
- */
- public void setOrientation(int orientation) {
- enforceValidOrientation(orientation);
- mOrientation = orientation;
- }
-
@Override
public void writeToParcel(Parcel parcel, int flags) {
if (mMediaSize != null) {
@@ -328,22 +163,7 @@ public final class PrintAttributes implements Parcelable {
} else {
parcel.writeInt(0);
}
- if (mInputTray != null) {
- parcel.writeInt(1);
- mInputTray.writeToParcel(parcel);
- } else {
- parcel.writeInt(0);
- }
- if (mOutputTray != null) {
- parcel.writeInt(1);
- mOutputTray.writeToParcel(parcel);
- } else {
- parcel.writeInt(0);
- }
- parcel.writeInt(mDuplexMode);
parcel.writeInt(mColorMode);
- parcel.writeInt(mFittingMode);
- parcel.writeInt(mOrientation);
}
@Override
@@ -356,13 +176,8 @@ public final class PrintAttributes implements Parcelable {
final int prime = 31;
int result = 1;
result = prime * result + mColorMode;
- result = prime * result + mDuplexMode;
- result = prime * result + mFittingMode;
- result = prime * result + mOrientation;
- result = prime * result + ((mInputTray == null) ? 0 : mInputTray.hashCode());
result = prime * result + ((mMargins == null) ? 0 : mMargins.hashCode());
result = prime * result + ((mMediaSize == null) ? 0 : mMediaSize.hashCode());
- result = prime * result + ((mOutputTray == null) ? 0 : mOutputTray.hashCode());
result = prime * result + ((mResolution == null) ? 0 : mResolution.hashCode());
return result;
}
@@ -382,29 +197,6 @@ public final class PrintAttributes implements Parcelable {
if (mColorMode != other.mColorMode) {
return false;
}
- if (mDuplexMode != other.mDuplexMode) {
- return false;
- }
- if (mFittingMode != other.mFittingMode) {
- return false;
- }
- if (mOrientation != other.mOrientation) {
- return false;
- }
- if (mInputTray == null) {
- if (other.mInputTray != null) {
- return false;
- }
- } else if (!mInputTray.equals(other.mInputTray)) {
- return false;
- }
- if (mOutputTray == null) {
- if (other.mOutputTray != null) {
- return false;
- }
- } else if (!mOutputTray.equals(other.mOutputTray)) {
- return false;
- }
if (mMargins == null) {
if (other.mMargins != null) {
return false;
@@ -436,12 +228,7 @@ public final class PrintAttributes implements Parcelable {
builder.append("mediaSize: ").append(mMediaSize);
builder.append(", resolution: ").append(mResolution);
builder.append(", margins: ").append(mMargins);
- builder.append(", inputTray: ").append(mInputTray);
- builder.append(", outputTray: ").append(mOutputTray);
builder.append(", colorMode: ").append(colorModeToString(mColorMode));
- builder.append(", duplexMode: ").append(duplexModeToString(mDuplexMode));
- builder.append(", fittingMode: ").append(fittingModeToString(mFittingMode));
- builder.append(", orientation: ").append(orientationToString(mOrientation));
builder.append("}");
return builder.toString();
}
@@ -451,12 +238,7 @@ public final class PrintAttributes implements Parcelable {
mMediaSize = null;
mResolution = null;
mMargins = null;
- mInputTray = null;
- mOutputTray = null;
- mDuplexMode = 0;
mColorMode = 0;
- mFittingMode = 0;
- mOrientation = 0;
}
/**
@@ -466,485 +248,201 @@ public final class PrintAttributes implements Parcelable {
mMediaSize = other.mMediaSize;
mResolution = other.mResolution;
mMargins = other.mMargins;
- mInputTray = other.mInputTray;
- mOutputTray = other.mOutputTray;
- mDuplexMode = other.mDuplexMode;
mColorMode = other.mColorMode;
- mFittingMode = other.mFittingMode;
- mOrientation = other.mOrientation;
}
/**
* This class specifies a supported media size.
*/
public static final class MediaSize {
+ private static final String LOG_TAG = "MediaSize";
// TODO: Verify media sizes and add more standard ones.
// ISO sizes
- /**
- * ISO A0 media size: 841mm x 1189mm (33.11" x 46.81")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A0 = 1;
-
- /**
- * ISO A1 media size: 594mm x 841mm (23.39" x 33.11")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A1 = 2;
-
- /**
- *
- *ISO A2 media size: 420mm x 594mm (16.54" x 23.39")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A2 = 3;
-
- /**
- * ISO A3 media size: 297mm x 420mm (11.69" x 16.54")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A3 = 4;
-
- /**
- * ISO A4 media size: 210mm x 297mm (8.27" x 11.69")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A4 = 5;
-
- /**
- * ISO A5 media size: 148mm x 210mm (5.83" x 8.27")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A5 = 6;
-
- /**
- * ISO A6 media size: 105mm x 148mm (4.13" x 5.83")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A6 = 7;
-
- /**
- * ISO A7 media size: 74mm x 105mm (2.91" x 4.13")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A7 = 8;
-
- /**
- * ISO A8 media size: 52mm x 74mm (2.05" x 2.91")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A8 = 9;
-
- /**
- * ISO A9 media size: 37mm x 52mm (1.46" x 2.05")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A9 = 10;
-
- /**
- * ISO A10 media size: 26mm x 37mm (1.02" x 1.46")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A10 = 11;
-
-
- /**
- * ISO B0 media size: 1000mm x 1414mm (39.37" x 55.67")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B0 = 100;
-
- /**
- * ISO B1 media size: 707mm x 1000mm (27.83" x 39.37")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B1 = 101;
-
- /**
- * ISO B2 media size: 500mm x 707mm (19.69" x 27.83")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B2 = 102;
-
- /**
- * ISO B3 media size: 353mm x 500mm (13.90" x 19.69")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B3 = 103;
-
- /**
- * ISO B4 media size: 250mm x 353mm (9.84" x 13.90")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B4 = 104;
-
- /**
- * ISO B5 media size: 176mm x 250mm (6.93" x 9.84")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B5 = 105;
-
- /**
- * ISO B6 media size: 125mm x 176mm (4.92" x 6.93")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B6 = 106;
-
- /**
- * ISO B7 media size: 88mm x 125mm (3.46" x 4.92")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B7 = 107;
-
- /** ISO B8 media size: 62mm x 88mm (2.44" x 3.46")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B8 = 108;
-
- /**
- * ISO B9 media size: 44mm x 62mm (1.73" x 2.44")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B9 = 109;
-
- /**
- * ISO B10 media size: 31mm x 44mm (1.22" x 1.73")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B10 = 110;
-
-
- /**
- * ISO C0 media size: 917mm x 1297mm (36.10" x 51.06")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C0 = 200;
-
- /**
- * ISO C1 media size: 648mm x 917mm (25.51" x 36.10")
- *
- * @see #createMediaSize(PackageManager, int)
- */
-
- public static final int ISO_C1 = 201;
- /**
- * ISO C2 media size: 458mm x 648mm (18.03" x 25.51")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C2 = 202;
-
- /**
- * ISO C3 media size: 324mm x 458mm (12.76" x 18.03")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C3 = 203;
-
- /**
- * ISO C4 media size: 229mm x 324mm (9.02" x 12.76")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C4 = 204;
-
- /**
- * ISO C5 media size: 162mm x 229mm (6.38" x 9.02")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C5 = 205;
-
- /**
- * ISO C6 media size: 114mm x 162mm (4.49" x 6.38")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C6 = 206;
-
- /**
- * ISO C7 media size: 81mm x 114mm (3.19" x 4.49")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C7 = 207;
-
- /**
- * ISO C8 media size: 57mm x 81mm (2.24" x 3.19")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C8 = 208;
-
- /**
- * ISO C9 media size: 40mm x 57mm (1.57" x 2.24")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C9 = 209;
-
- /**
- * ISO C10 media size: 28mm x 40mm (1.10" x 1.57")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C10 = 210;
-
+ /** ISO A0 media size: 841mm x 1189mm (33.11" x 46.81") */
+ public static final MediaSize ISO_A0 =
+ new MediaSize("ISO_A0", "android", R.string.mediaSize_iso_a0, 33110, 46810);
+ /** ISO A1 media size: 594mm x 841mm (23.39" x 33.11") */
+ public static final MediaSize ISO_A1 =
+ new MediaSize("ISO_A1", "android", R.string.mediaSize_iso_a1, 23390, 33110);
+ /** ISO A2 media size: 420mm x 594mm (16.54" x 23.39") */
+ public static final MediaSize ISO_A2 =
+ new MediaSize("ISO_A2", "android", R.string.mediaSize_iso_a2, 16540, 23390);
+ /** ISO A3 media size: 297mm x 420mm (11.69" x 16.54") */
+ public static final MediaSize ISO_A3 =
+ new MediaSize("ISO_A3", "android", R.string.mediaSize_iso_a3, 11690, 16540);
+ /** ISO A4 media size: 210mm x 297mm (8.27" x 11.69") */
+ public static final MediaSize ISO_A4 =
+ new MediaSize("ISO_A4", "android", R.string.mediaSize_iso_a4, 8270, 11690);
+ /** ISO A5 media size: 148mm x 210mm (5.83" x 8.27") */
+ public static final MediaSize ISO_A5 =
+ new MediaSize("ISO_A5", "android", R.string.mediaSize_iso_a5, 5830, 8270);
+ /** ISO A6 media size: 105mm x 148mm (4.13" x 5.83") */
+ public static final MediaSize ISO_A6 =
+ new MediaSize("ISO_A6", "android", R.string.mediaSize_iso_a6, 4130, 5830);
+ /** ISO A7 media size: 74mm x 105mm (2.91" x 4.13") */
+ public static final MediaSize ISO_A7 =
+ new MediaSize("ISO_A7", "android", R.string.mediaSize_iso_a7, 2910, 4130);
+ /** ISO A8 media size: 52mm x 74mm (2.05" x 2.91") */
+ public static final MediaSize ISO_A8 =
+ new MediaSize("ISO_A8", "android", R.string.mediaSize_iso_a8, 2050, 2910);
+ /** ISO A9 media size: 37mm x 52mm (1.46" x 2.05") */
+ public static final MediaSize ISO_A9 =
+ new MediaSize("ISO_A9", "android", R.string.mediaSize_iso_a9, 1460, 2050);
+ /** ISO A10 media size: 26mm x 37mm (1.02" x 1.46") */
+ public static final MediaSize ISO_A10 =
+ new MediaSize("ISO_A10", "android", R.string.mediaSize_iso_a10, 1020, 1460);
+
+ /** ISO B0 media size: 1000mm x 1414mm (39.37" x 55.67") */
+ public static final MediaSize ISO_B0 =
+ new MediaSize("ISO_B0", "android", R.string.mediaSize_iso_b0, 39370, 55670);
+ /** ISO B1 media size: 707mm x 1000mm (27.83" x 39.37") */
+ public static final MediaSize ISO_B1 =
+ new MediaSize("ISO_B1", "android", R.string.mediaSize_iso_b1, 27830, 39370);
+ /** ISO B2 media size: 500mm x 707mm (19.69" x 27.83") */
+ public static final MediaSize ISO_B2 =
+ new MediaSize("ISO_B2", "android", R.string.mediaSize_iso_b2, 19690, 27830);
+ /** ISO B3 media size: 353mm x 500mm (13.90" x 19.69") */
+ public static final MediaSize ISO_B3 =
+ new MediaSize("ISO_B3", "android", R.string.mediaSize_iso_b3, 13900, 19690);
+ /** ISO B4 media size: 250mm x 353mm (9.84" x 13.90") */
+ public static final MediaSize ISO_B4 =
+ new MediaSize("ISO_B4", "android", R.string.mediaSize_iso_b4, 9840, 13900);
+ /** ISO B5 media size: 176mm x 250mm (6.93" x 9.84") */
+ public static final MediaSize ISO_B5 =
+ new MediaSize("ISO_B5", "android", R.string.mediaSize_iso_b5, 6930, 9840);
+ /** ISO B6 media size: 125mm x 176mm (4.92" x 6.93") */
+ public static final MediaSize ISO_B6 =
+ new MediaSize("ISO_B6", "android", R.string.mediaSize_iso_b6, 4920, 6930);
+ /** ISO B7 media size: 88mm x 125mm (3.46" x 4.92") */
+ public static final MediaSize ISO_B7 =
+ new MediaSize("ISO_B7", "android", R.string.mediaSize_iso_b7, 3460, 4920);
+ /** ISO B8 media size: 62mm x 88mm (2.44" x 3.46") */
+ public static final MediaSize ISO_B8 =
+ new MediaSize("ISO_B8", "android", R.string.mediaSize_iso_b8, 2440, 3460);
+ /** ISO B9 media size: 44mm x 62mm (1.73" x 2.44") */
+ public static final MediaSize ISO_B9 =
+ new MediaSize("ISO_B9", "android", R.string.mediaSize_iso_b9, 1730, 2440);
+ /** ISO B10 media size: 31mm x 44mm (1.22" x 1.73") */
+ public static final MediaSize ISO_B10 =
+ new MediaSize("ISO_B10", "android", R.string.mediaSize_iso_b10, 1220, 1730);
+
+ /** ISO C0 media size: 917mm x 1297mm (36.10" x 51.06") */
+ public static final MediaSize ISO_C0 =
+ new MediaSize("ISO_C0", "android", R.string.mediaSize_iso_c0, 36100, 51060);
+ /** ISO C1 media size: 648mm x 917mm (25.51" x 36.10") */
+ public static final MediaSize ISO_C1 =
+ new MediaSize("ISO_C1", "android", R.string.mediaSize_iso_c1, 25510, 36100);
+ /** ISO C2 media size: 458mm x 648mm (18.03" x 25.51") */
+ public static final MediaSize ISO_C2 =
+ new MediaSize("ISO_C2", "android", R.string.mediaSize_iso_c2, 18030, 25510);
+ /** ISO C3 media size: 324mm x 458mm (12.76" x 18.03") */
+ public static final MediaSize ISO_C3 =
+ new MediaSize("ISO_C3", "android", R.string.mediaSize_iso_c3, 12760, 18030);
+ /** ISO C4 media size: 229mm x 324mm (9.02" x 12.76") */
+ public static final MediaSize ISO_C4 =
+ new MediaSize("ISO_C4", "android", R.string.mediaSize_iso_c4, 9020, 12760);
+ /** ISO C5 media size: 162mm x 229mm (6.38" x 9.02") */
+ public static final MediaSize ISO_C5 =
+ new MediaSize("ISO_C5", "android", R.string.mediaSize_iso_c5, 6380, 9020);
+ /** ISO C6 media size: 114mm x 162mm (4.49" x 6.38") */
+ public static final MediaSize ISO_C6 =
+ new MediaSize("ISO_C6", "android", R.string.mediaSize_iso_c6, 4490, 6380);
+ /** ISO C7 media size: 81mm x 114mm (3.19" x 4.49") */
+ public static final MediaSize ISO_C7 =
+ new MediaSize("ISO_C7", "android", R.string.mediaSize_iso_c7, 3190, 4490);
+ /** ISO C8 media size: 57mm x 81mm (2.24" x 3.19") */
+ public static final MediaSize ISO_C8 =
+ new MediaSize("ISO_C8", "android", R.string.mediaSize_iso_c8, 2240, 3190);
+ /** ISO C9 media size: 40mm x 57mm (1.57" x 2.24") */
+ public static final MediaSize ISO_C9 =
+ new MediaSize("ISO_C9", "android", R.string.mediaSize_iso_c9, 1570, 2240);
+ /** ISO C10 media size: 28mm x 40mm (1.10" x 1.57") */
+ public static final MediaSize ISO_C10 =
+ new MediaSize("ISO_C10", "android", R.string.mediaSize_iso_c10, 1100, 1570);
// North America
- /**
- * North America Letter media size: 8.5" x 11"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_LETTER = 300;
-
- /**
- * North America Government-Letter media size: 8.0" x 10.5"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_GOVT_LETTER = 301;
-
- /**
- * North America Legal media size: 8.5" x 14"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_LEGAL = 302;
+ /** North America Letter media size: 8.5" x 11" */
+ public static final MediaSize NA_LETTER =
+ new MediaSize("NA_LETTER", "android", R.string.mediaSize_na_letter, 8500, 11000);
+ /** North America Government-Letter media size: 8.0" x 10.5" */
+ public static final MediaSize NA_GOVT_LETTER =
+ new MediaSize("NA_GOVT_LETTER", "android",
+ R.string.mediaSize_na_gvrnmt_letter, 8000, 10500);
+ /** North America Legal media size: 8.5" x 14" */
+ public static final MediaSize NA_LEGAL =
+ new MediaSize("NA_LEGAL", "android", R.string.mediaSize_na_legal, 8500, 14000);
+ /** North America Junior Legal media size: 8.0" x 5.0" */
+ public static final MediaSize NA_JUNIOR_LEGAL =
+ new MediaSize("NA_JUNIOR_LEGAL", "android",
+ R.string.mediaSize_na_junior_legal, 8000, 5000);
+ /** North America Ledger media size: 17" x 11" */
+ public static final MediaSize NA_LEDGER =
+ new MediaSize("NA_LEDGER", "android", R.string.mediaSize_na_ledger, 17000, 11000);
+ /** North America Tabloid media size: 11" x 17" */
+ public static final MediaSize NA_TBLOID =
+ new MediaSize("NA_TABLOID", "android",
+ R.string.mediaSize_na_tabloid, 11000, 17000);
- /**
- * North America Junior Legal media size: 8.0" x 5.0"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_JUNIOR_LEGAL = 303;
-
- /**
- * North America Ledger media size: 17" x 11"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_LEDGER = 304;
+ private final String mId;
+ /**@hide */
+ public final String mLabel;
+ /**@hide */
+ public final String mPackageName;
+ /**@hide */
+ public final int mLabelResId;
+ private final int mWidthMils;
+ private final int mHeightMils;
/**
- * North America Tabloid media size: 11" x 17"
+ * Creates a new instance. This is the preferred constructor since
+ * it enables the media size label to be shown in a localized fashion
+ * on a locale change.
*
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_TBLOID = 305;
-
- /**
- * Creates a standard media size with a localized label.
+ * @param id The unique media size id.
+ * @param packageName The name of the creating package.
+ * @param labelResId The resource if of a human readable label.
+ * @param widthMils The width in mils (thousands of an inch).
+ * @param heightMils The height in mils (thousands of an inch).
*
- * @param pm Package manager used to load the label.
- * @param mediaSize Media size constant.
- * @return A {@link MediaSize} instance with a localized label.
+ * @throws IllegalArgumentException If the id is empty.
+ * @throws IllegalArgumentException If the label is empty.
+ * @throws IllegalArgumentException If the widthMils is less than or equal to zero.
+ * @throws IllegalArgumentException If the heightMils is less than or equal to zero.
*/
- public static MediaSize createMediaSize(PackageManager pm, int mediaSize) {
- final Resources resources;
- try {
- resources = pm.getResourcesForApplication("android");
- } catch (NameNotFoundException nnfe) {
- return null;
+ public MediaSize(String id, String packageName, int labelResId,
+ int widthMils, int heightMils) {
+ if (TextUtils.isEmpty(id)) {
+ throw new IllegalArgumentException("id cannot be empty.");
}
- switch (mediaSize) {
- case ISO_A0: {
- return new MediaSize("ISO_A0", resources
- .getString(R.string.mediaSize_iso_a0), 33110, 46810);
- }
- case ISO_A1: {
- return new MediaSize("ISO_A1", resources
- .getString(R.string.mediaSize_iso_a1), 23390, 33110);
- }
- case ISO_A2: {
- return new MediaSize("ISO_A2", resources
- .getString(R.string.mediaSize_iso_a2), 16540, 23390);
- }
- case ISO_A3: {
- return new MediaSize("ISO_A3", resources
- .getString(R.string.mediaSize_iso_a3), 11690, 16540);
- }
- case ISO_A4: {
- return new MediaSize("ISO_A4", resources
- .getString(R.string.mediaSize_iso_a4), 8270, 11690);
- }
- case ISO_A5: {
- return new MediaSize("ISO_A5", resources
- .getString(R.string.mediaSize_iso_a5), 5830, 8270);
- }
- case ISO_A6: {
- return new MediaSize("ISO_A6", resources
- .getString(R.string.mediaSize_iso_a6), 4130, 5830);
- }
- case ISO_A7: {
- return new MediaSize("ISO_A7", resources
- .getString(R.string.mediaSize_iso_a7), 2910, 4130);
- }
- case ISO_A8: {
- return new MediaSize("ISO_A8", resources
- .getString(R.string.mediaSize_iso_a8), 2050, 2910);
- }
- case ISO_A9: {
- return new MediaSize("ISO_A9", resources
- .getString(R.string.mediaSize_iso_a9), 1460, 2050);
- }
- case ISO_A10: {
- return new MediaSize("ISO_A10", resources
- .getString(R.string.mediaSize_iso_a10), 1020, 1460);
- }
- case ISO_B0: {
- return new MediaSize("ISO_B0", resources
- .getString(R.string.mediaSize_iso_b0), 39370, 55670);
- }
- case ISO_B1: {
- return new MediaSize("ISO_B1", resources
- .getString(R.string.mediaSize_iso_b1), 27830, 39370);
- }
- case ISO_B2: {
- return new MediaSize("ISO_B2", resources
- .getString(R.string.mediaSize_iso_b2), 19690, 27830);
- }
- case ISO_B3: {
- return new MediaSize("ISO_B3", resources
- .getString(R.string.mediaSize_iso_b3), 13900, 19690);
- }
- case ISO_B4: {
- return new MediaSize("ISO_B4", resources
- .getString(R.string.mediaSize_iso_b4), 9840, 13900);
- }
- case ISO_B5: {
- return new MediaSize("ISO_B5", resources
- .getString(R.string.mediaSize_iso_b5), 6930, 9840);
- }
- case ISO_B6: {
- return new MediaSize("ISO_B6", resources
- .getString(R.string.mediaSize_iso_b6), 4920, 6930);
- }
- case ISO_B7: {
- return new MediaSize("ISO_B7", resources
- .getString(R.string.mediaSize_iso_b7), 3460, 4920);
- }
- case ISO_B8: {
- return new MediaSize("ISO_B8", resources
- .getString(R.string.mediaSize_iso_b8), 2440, 3460);
- }
- case ISO_B9: {
- return new MediaSize("ISO_B9", resources
- .getString(R.string.mediaSize_iso_b9), 1730, 2440);
- }
- case ISO_B10: {
- return new MediaSize("ISO_B10", resources
- .getString(R.string.mediaSize_iso_b10), 1220, 1730);
- }
- case ISO_C0: {
- return new MediaSize("ISO_C0", resources
- .getString(R.string.mediaSize_iso_c0), 36100, 51060);
- }
- case ISO_C1: {
- return new MediaSize("ISO_C1", resources
- .getString(R.string.mediaSize_iso_c1), 25510, 36100);
- }
- case ISO_C2: {
- return new MediaSize("ISO_C2", resources
- .getString(R.string.mediaSize_iso_c2), 18030, 25510);
- }
- case ISO_C3: {
- return new MediaSize("ISO_C3", resources
- .getString(R.string.mediaSize_iso_c3), 12760, 18030);
- }
- case ISO_C4: {
- return new MediaSize("ISO_C4", resources
- .getString(R.string.mediaSize_iso_c4), 9020, 12760);
- }
- case ISO_C5: {
- return new MediaSize("ISO_C5", resources
- .getString(R.string.mediaSize_iso_c5), 6380, 9020);
- }
- case ISO_C6: {
- return new MediaSize("ISO_C6", resources
- .getString(R.string.mediaSize_iso_c6), 4490, 6380);
- }
- case ISO_C7: {
- return new MediaSize("ISO_C7", resources
- .getString(R.string.mediaSize_iso_c7), 3190, 4490);
- }
- case ISO_C8: {
- return new MediaSize("ISO_C8", resources
- .getString(R.string.mediaSize_iso_c8), 2240, 3190);
- }
- case ISO_C9: {
- return new MediaSize("ISO_C9", resources
- .getString(R.string.mediaSize_iso_c9), 1570, 2240);
- }
- case ISO_C10: {
- return new MediaSize("ISO_C10", resources
- .getString(R.string.mediaSize_iso_c10), 1100, 1570);
- }
- case NA_LETTER: {
- return new MediaSize("NA_LETTER", resources
- .getString(R.string.mediaSize_na_letter), 8500, 11000);
- }
- case NA_GOVT_LETTER: {
- return new MediaSize("NA_GOVT_LETTER", resources
- .getString(R.string.mediaSize_na_gvrnmt_letter), 8000, 10500);
- }
- case NA_LEGAL: {
- return new MediaSize("NA_LEGAL", resources
- .getString(R.string.mediaSize_na_legal), 8500, 14000);
- }
- case NA_JUNIOR_LEGAL: {
- return new MediaSize("NA_JUNIOR_LEGAL", resources
- .getString(R.string.mediaSize_na_junior_legal), 8000, 5000);
- }
- case NA_LEDGER: {
- return new MediaSize("NA_LEDGER", resources
- .getString(R.string.mediaSize_na_ledger), 17000, 11000);
- }
- case NA_TBLOID: {
- return new MediaSize("NA_TABLOID", resources
- .getString(R.string.mediaSize_na_tabloid), 11000, 17000);
- }
- default: {
- throw new IllegalArgumentException("Unknown media size.");
- }
+ if (TextUtils.isEmpty(packageName)) {
+ throw new IllegalArgumentException("packageName cannot be empty.");
+ }
+ if (labelResId <= 0) {
+ throw new IllegalArgumentException("labelResId must be greater than zero.");
}
+ if (widthMils <= 0) {
+ throw new IllegalArgumentException("widthMils "
+ + "cannot be less than or equal to zero.");
+ }
+ if (heightMils <= 0) {
+ throw new IllegalArgumentException("heightMils "
+ + "cannot be less than or euqual to zero.");
+ }
+ mPackageName = packageName;
+ mId = id;
+ mLabelResId = labelResId;
+ mWidthMils = widthMils;
+ mHeightMils = heightMils;
+ mLabel = null;
}
- private final String mId;
- private final String mLabel;
- private final int mWidthMils;
- private final int mHeightMils;
-
/**
- * Creates a new instance.
+ * Creates a new instance. You should use this constructor as a fallback
+ * in cases when you do not have a localized string for the label.
*
* @param id The unique media size id.
* @param label The <strong>internationalized</strong> human readable label.
@@ -975,6 +473,19 @@ public final class PrintAttributes implements Parcelable {
mLabel = label;
mWidthMils = widthMils;
mHeightMils = heightMils;
+ mLabelResId = 0;
+ mPackageName = null;
+ }
+
+ /** @hide */
+ public MediaSize(String id, String label, String packageName,
+ int widthMils, int heightMils, int labelResId) {
+ mPackageName = packageName;
+ mId = id;
+ mLabelResId = labelResId;
+ mWidthMils = widthMils;
+ mHeightMils = heightMils;
+ mLabel = label;
}
/**
@@ -989,9 +500,22 @@ public final class PrintAttributes implements Parcelable {
/**
* Gets the human readable media size label.
*
+ * @param packageManager The package manager for loading the label.
* @return The human readable label.
*/
- public String getLabel() {
+ public String getLabel(PackageManager packageManager) {
+ if (!TextUtils.isEmpty(mPackageName) && mLabelResId > 0) {
+ try {
+ return packageManager.getResourcesForApplication(
+ mPackageName).getString(mLabelResId);
+ } catch (NotFoundException nfe) {
+ Log.w(LOG_TAG, "Could not load resouce" + mLabelResId
+ + " from package " + mPackageName);
+ } catch (NameNotFoundException nnfee) {
+ Log.w(LOG_TAG, "Could not load resouce" + mLabelResId
+ + " from package " + mPackageName);
+ }
+ }
return mLabel;
}
@@ -1013,17 +537,62 @@ public final class PrintAttributes implements Parcelable {
return mHeightMils;
}
+ /**
+ * Gets whether this media size is in portrait which is the
+ * height is greater or equal to the width.
+ *
+ * @return True if the media size is in portrait, false if
+ * it is in landscape.
+ */
+ public boolean isPortrait() {
+ return mHeightMils >= mWidthMils;
+ }
+
+ /**
+ * Returns a new media size in a portrait orientation
+ * which is the height is the lesser dimension.
+ *
+ * @return New instance in landscape orientation.
+ */
+ public MediaSize asPortrait() {
+ if (!TextUtils.isEmpty(mPackageName) && mLabelResId > 0) {
+ return new MediaSize(mId, mPackageName, mLabelResId,
+ Math.min(mWidthMils, mHeightMils),
+ Math.max(mWidthMils, mHeightMils));
+ } else {
+ return new MediaSize(mId, mLabel,
+ Math.min(mWidthMils, mHeightMils),
+ Math.max(mWidthMils, mHeightMils));
+ }
+ }
+
+ /**
+ * Returns a new media size in a landscape orientation
+ * which is the height is the greater dimension.
+ *
+ * @return New instance in landscape orientation.
+ */
+ public MediaSize asLandscape() {
+ return new MediaSize(mId, mLabel,
+ Math.max(mWidthMils, mHeightMils),
+ Math.min(mWidthMils, mHeightMils));
+ }
+
void writeToParcel(Parcel parcel) {
parcel.writeString(mId);
parcel.writeString(mLabel);
+ parcel.writeString(mPackageName);
parcel.writeInt(mWidthMils);
parcel.writeInt(mHeightMils);
+ parcel.writeInt(mLabelResId);
}
static MediaSize createFromParcel(Parcel parcel) {
return new MediaSize(
parcel.readString(),
parcel.readString(),
+ parcel.readString(),
+ parcel.readInt(),
parcel.readInt(),
parcel.readInt());
}
@@ -1033,7 +602,6 @@ public final class PrintAttributes implements Parcelable {
final int prime = 31;
int result = 1;
result = prime * result + ((mId == null) ? 0 : mId.hashCode());
- result = prime * result + ((mLabel == null) ? 0 : mLabel.hashCode());
result = prime * result + mWidthMils;
result = prime * result + mHeightMils;
return result;
@@ -1054,9 +622,6 @@ public final class PrintAttributes implements Parcelable {
if (!TextUtils.equals(mId, other.mId)) {
return false;
}
- if (!TextUtils.equals(mLabel, other.mLabel)) {
- return false;
- }
if (mWidthMils != other.mWidthMils) {
return false;
}
@@ -1072,8 +637,10 @@ public final class PrintAttributes implements Parcelable {
builder.append("MediaSize{");
builder.append("id: ").append(mId);
builder.append(", label: ").append(mLabel);
+ builder.append(", packageName: ").append(mPackageName);
builder.append(", heightMils: ").append(mHeightMils);
builder.append(", widthMils: ").append(mWidthMils);
+ builder.append(", labelResId: ").append(mLabelResId);
builder.append("}");
return builder.toString();
}
@@ -1083,13 +650,64 @@ public final class PrintAttributes implements Parcelable {
* This class specifies a supported resolution in dpi (dots per inch).
*/
public static final class Resolution {
+ private static final String LOG_TAG = "Resolution";
+
private final String mId;
- private final String mLabel;
+ /**@hide */
+ public final String mLabel;
+ /**@hide */
+ public final String mPackageName;
+ /**@hide */
+ public final int mLabelResId;
private final int mHorizontalDpi;
private final int mVerticalDpi;
/**
- * Creates a new instance.
+ * Creates a new instance. This is the preferred constructor since
+ * it enables the resolution label to be shown in a localized fashion
+ * on a locale change.
+ *
+ * @param id The unique resolution id.
+ * @param packageName The name of the creating package.
+ * @param labelResId The resource id of a human readable label.
+ * @param horizontalDpi The horizontal resolution in dpi.
+ * @param verticalDpi The vertical resolution in dpi.
+ *
+ * @throws IllegalArgumentException If the id is empty.
+ * @throws IllegalArgumentException If the label is empty.
+ * @throws IllegalArgumentException If the horizontalDpi is less than or equal to zero.
+ * @throws IllegalArgumentException If the verticalDpi is less than or equal to zero.
+ */
+ public Resolution(String id, String packageName, int labelResId,
+ int horizontalDpi, int verticalDpi) {
+ if (TextUtils.isEmpty(id)) {
+ throw new IllegalArgumentException("id cannot be empty.");
+ }
+ if (TextUtils.isEmpty(packageName)) {
+ throw new IllegalArgumentException("packageName cannot be empty.");
+ }
+ if (labelResId <= 0) {
+ throw new IllegalArgumentException("labelResId must be greater than zero.");
+ }
+ if (horizontalDpi <= 0) {
+ throw new IllegalArgumentException("horizontalDpi "
+ + "cannot be less than or equal to zero.");
+ }
+ if (verticalDpi <= 0) {
+ throw new IllegalArgumentException("verticalDpi"
+ + " cannot be less than or equal to zero.");
+ }
+ mId = id;
+ mPackageName = packageName;
+ mLabelResId = labelResId;
+ mHorizontalDpi = horizontalDpi;
+ mVerticalDpi = verticalDpi;
+ mLabel = null;
+ }
+
+ /**
+ * Creates a new instance. You should use this constructor as a fallback
+ * in cases when you do not have a localized string for the label.
*
* @param id The unique resolution id.
* @param label The <strong>internationalized</strong> human readable label.
@@ -1120,6 +738,19 @@ public final class PrintAttributes implements Parcelable {
mLabel = label;
mHorizontalDpi = horizontalDpi;
mVerticalDpi = verticalDpi;
+ mPackageName = null;
+ mLabelResId = 0;
+ }
+
+ /** @hide */
+ public Resolution(String id, String label, String packageName,
+ int horizontalDpi, int verticalDpi, int labelResId) {
+ mId = id;
+ mPackageName = packageName;
+ mLabelResId = labelResId;
+ mHorizontalDpi = horizontalDpi;
+ mVerticalDpi = verticalDpi;
+ mLabel = label;
}
/**
@@ -1134,14 +765,27 @@ public final class PrintAttributes implements Parcelable {
/**
* Gets the resolution human readable label.
*
+ * @param packageManager The package manager for loading the label.
* @return The human readable label.
*/
- public String getLabel() {
+ public String getLabel(PackageManager packageManager) {
+ if (!TextUtils.isEmpty(mPackageName) && mLabelResId > 0) {
+ try {
+ return packageManager.getResourcesForApplication(
+ mPackageName).getString(mLabelResId);
+ } catch (NotFoundException nfe) {
+ Log.w(LOG_TAG, "Could not load resouce" + mLabelResId
+ + " from package " + mPackageName);
+ } catch (NameNotFoundException nnfee) {
+ Log.w(LOG_TAG, "Could not load resouce" + mLabelResId
+ + " from package " + mPackageName);
+ }
+ }
return mLabel;
}
/**
- * Gets the horizontal resolution in dpi.
+ * Gets the vertical resolution in dpi.
*
* @return The horizontal resolution.
*/
@@ -1161,14 +805,18 @@ public final class PrintAttributes implements Parcelable {
void writeToParcel(Parcel parcel) {
parcel.writeString(mId);
parcel.writeString(mLabel);
+ parcel.writeString(mPackageName);
parcel.writeInt(mHorizontalDpi);
parcel.writeInt(mVerticalDpi);
+ parcel.writeInt(mLabelResId);
}
static Resolution createFromParcel(Parcel parcel) {
return new Resolution(
parcel.readString(),
parcel.readString(),
+ parcel.readString(),
+ parcel.readInt(),
parcel.readInt(),
parcel.readInt());
}
@@ -1178,7 +826,6 @@ public final class PrintAttributes implements Parcelable {
final int prime = 31;
int result = 1;
result = prime * result + ((mId == null) ? 0 : mId.hashCode());
- result = prime * result + ((mLabel == null) ? 0 : mLabel.hashCode());
result = prime * result + mHorizontalDpi;
result = prime * result + mVerticalDpi;
return result;
@@ -1199,9 +846,6 @@ public final class PrintAttributes implements Parcelable {
if (!TextUtils.equals(mId, other.mId)) {
return false;
}
- if (!TextUtils.equals(mLabel, other.mLabel)) {
- return false;
- }
if (mHorizontalDpi != other.mHorizontalDpi) {
return false;
}
@@ -1217,8 +861,10 @@ public final class PrintAttributes implements Parcelable {
builder.append("Resolution{");
builder.append("id: ").append(mId);
builder.append(", label: ").append(mLabel);
+ builder.append(", packageName: ").append(mPackageName);
builder.append(", horizontalDpi: ").append(mHorizontalDpi);
builder.append(", verticalDpi: ").append(mVerticalDpi);
+ builder.append(", labelResId: ").append(mLabelResId);
builder.append("}");
return builder.toString();
}
@@ -1358,120 +1004,6 @@ public final class PrintAttributes implements Parcelable {
}
}
- /**
- * Represents a printer tray.
- */
- public static final class Tray {
- private final String mId;
- private final String mLabel;
-
- /**
- * Creates a new instance.
- *
- * @param id The unique tray id.
- * @param label The <strong>internationalized</strong> human readable label.
- *
- * @throws IllegalArgumentException If the id is empty.
- * @throws IllegalArgumentException If the label is empty.
- */
- public Tray(String id, String label) {
- if (TextUtils.isEmpty(id)) {
- throw new IllegalArgumentException("id cannot be empty.");
- }
- if (TextUtils.isEmpty(label)) {
- throw new IllegalArgumentException("label cannot be empty.");
- }
- mId = id;
- mLabel = label;
- }
-
- /**
- * Gets the unique tray id.
- *
- * @return The unique tray id.
- */
- public String getId() {
- return mId;
- }
-
- /**
- * Gets the tray human readable label.
- *
- * @return The human readable label.
- */
- public String getLabel() {
- return mLabel;
- }
-
- void writeToParcel(Parcel parcel) {
- parcel.writeString(mId);
- parcel.writeString(mLabel);
- }
-
- static Tray createFromParcel(Parcel parcel) {
- return new Tray(
- parcel.readString(),
- parcel.readString());
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((mId == null) ? 0 : mId.hashCode());
- result = prime * result + ((mLabel == null) ? 0 : mLabel.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- Tray other = (Tray) obj;
- if (!TextUtils.equals(mId, other.mId)) {
- return false;
- }
- if (!TextUtils.equals(mLabel, other.mLabel)) {
- return false;
- }
- return true;
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("Tray{");
- builder.append("id: ").append(mId);
- builder.append("id: ").append(mId);
- builder.append(", label: ").append(mLabel);
- builder.append("}");
- return builder.toString();
- }
- }
-
- static String duplexModeToString(int duplexMode) {
- switch (duplexMode) {
- case DUPLEX_MODE_NONE: {
- return "DUPLEX_MODE_NONE";
- }
- case DUPLEX_MODE_LONG_EDGE: {
- return "DUPLEX_MODE_LONG_EDGE";
- }
- case DUPLEX_MODE_SHORT_EDGE: {
- return "DUPLEX_MODE_SHORT_EDGE";
- }
- default:
- return "DUPLEX_MODE_UNKNOWN";
- }
- }
-
static String colorModeToString(int colorMode) {
switch (colorMode) {
case COLOR_MODE_MONOCHROME: {
@@ -1485,59 +1017,12 @@ public final class PrintAttributes implements Parcelable {
}
}
- static String orientationToString(int orientation) {
- switch (orientation) {
- case ORIENTATION_PORTRAIT: {
- return "ORIENTATION_PORTRAIT";
- }
- case ORIENTATION_LANDSCAPE: {
- return "ORIENTATION_LANDSCAPE";
- }
- default:
- return "ORIENTATION_UNKNOWN";
- }
- }
-
- static String fittingModeToString(int fittingMode) {
- switch (fittingMode) {
- case FITTING_MODE_NONE: {
- return "FITTING_MODE_NONE";
- }
- case FITTING_MODE_SCALE_TO_FIT: {
- return "FITTING_MODE_SCALE_TO_FIT";
- }
- case FITTING_MODE_SCALE_TO_FILL: {
- return "FITTING_MODE_SCALE_TO_FILL";
- }
- default:
- return "FITTING_MODE_UNKNOWN";
- }
- }
-
- static void enforceValidDuplexMode(int duplexMode) {
- if ((duplexMode & VALID_DUPLEX_MODES) == 0 && Integer.bitCount(duplexMode) == 1) {
- throw new IllegalArgumentException("invalid duplex mode: " + duplexMode);
- }
- }
-
static void enforceValidColorMode(int colorMode) {
if ((colorMode & VALID_COLOR_MODES) == 0 && Integer.bitCount(colorMode) == 1) {
throw new IllegalArgumentException("invalid color mode: " + colorMode);
}
}
- static void enforceValidFittingMode(int fittingMode) {
- if ((fittingMode & VALID_FITTING_MODES) == 0 && Integer.bitCount(fittingMode) == 1) {
- throw new IllegalArgumentException("invalid fitting mode: " + fittingMode);
- }
- }
-
- static void enforceValidOrientation(int orientation) {
- if ((orientation & VALID_ORIENTATIONS) == 0 && Integer.bitCount(orientation) == 1) {
- throw new IllegalArgumentException("invalid orientation: " + orientation);
- }
- }
-
/**
* Builder for creating {@link PrintAttributes}.
*/
@@ -1578,46 +1063,6 @@ public final class PrintAttributes implements Parcelable {
}
/**
- * Sets the input tray.
- *
- * @param inputTray The tray.
- * @return This builder.
- */
- public Builder setInputTray(Tray inputTray) {
- mAttributes.setInputTray(inputTray);
- return this;
- }
-
- /**
- * Sets the output tray.
- *
- * @param outputTray The tray.
- * @return This builder.
- */
- public Builder setOutputTray(Tray outputTray) {
- mAttributes.setOutputTray(outputTray);
- return this;
- }
-
- /**
- * Sets the duplex mode.
- *
- * @param duplexMode A valid duplex mode or zero.
- * @return This builder.
- *
- * @see PrintAttributes#DUPLEX_MODE_NONE
- * @see PrintAttributes#DUPLEX_MODE_SHORT_EDGE
- * @see PrintAttributes#DUPLEX_MODE_LONG_EDGE
- */
- public Builder setDuplexMode(int duplexMode) {
- if (Integer.bitCount(duplexMode) > 1) {
- throw new IllegalArgumentException("can specify at most one duplexMode bit.");
- }
- mAttributes.setDuplexMode(duplexMode);
- return this;
- }
-
- /**
* Sets the color mode.
*
* @param colorMode A valid color mode or zero.
@@ -1635,40 +1080,6 @@ public final class PrintAttributes implements Parcelable {
}
/**
- * Sets the fitting mode.
- *
- * @param fittingMode A valid fitting mode or zero.
- * @return This builder.
- *
- * @see PrintAttributes#FITTING_MODE_NONE
- * @see PrintAttributes#FITTING_MODE_FIT_TO_PAGE
- */
- public Builder setFittingMode(int fittingMode) {
- if (Integer.bitCount(fittingMode) > 1) {
- throw new IllegalArgumentException("can specify at most one fittingMode bit.");
- }
- mAttributes.setFittingMode(fittingMode);
- return this;
- }
-
- /**
- * Sets the orientation.
- *
- * @param orientation A valid orientation or zero.
- * @return This builder.
- *
- * @see PrintAttributes#ORIENTATION_PORTRAIT
- * @see PrintAttributes#ORIENTATION_LANDSCAPE
- */
- public Builder setOrientation(int orientation) {
- if (Integer.bitCount(orientation) > 1) {
- throw new IllegalArgumentException("can specify at most one orientation bit.");
- }
- mAttributes.setOrientation(orientation);
- return this;
- }
-
- /**
* Creates a new {@link PrintAttributes} instance.
*
* @return The new instance.
diff --git a/core/java/android/print/PrintDocumentAdapter.java b/core/java/android/print/PrintDocumentAdapter.java
index 33b4aad..bb26a3a 100644
--- a/core/java/android/print/PrintDocumentAdapter.java
+++ b/core/java/android/print/PrintDocumentAdapter.java
@@ -101,28 +101,6 @@ public abstract class PrintDocumentAdapter {
* LayoutResultCallback#onLayoutFailed(CharSequence)}, if an error occurred.
* </p>
* <p>
- * When doing a layout you may satisfy some of the constraints in the print
- * attributes such as applying the appropriate fitting, emitting content in the
- * requested orientation, using the specified margins, generating content with
- * the desired color mode, producing output with the given media size. Ideally,
- * you will satisfy all of these constraints. It is important that if you
- * satisfy a given constraint, you update the {@link PrintDocumentInfo} that
- * is returned in the given {@link LayoutResultCallback}. This way the printer
- * will have more accurate information about the content, thus producing a
- * better output. For example, assume that your application is printing
- * an image and the print attributes request landscape and fitting mode scale
- * to fill. The result of this operation should be the entire media is filled
- * and the content is rotated ninety degrees. In this case it is beneficial
- * you do the rotation and select a higher resolution image to utilize
- * the wider media (the height is now the width), rather to use a lower
- * resolution image that is later stretched by the printer. If you applied
- * the rotation you have to update the returned print document info to
- * reflect that the content is already in landscape by calling
- * {@link PrintDocumentInfo.Builder#setOrientation(int)} with {@link
- * PrintAttributes#ORIENTATION_LANDSCAPE}. In this case the printer does not
- * have to rotate the content.
- * </p>
- * <p>
* <strong>Note:</strong> If the content is large and a layout will be
* performed, it is a good practice to schedule the work on a dedicated
* thread and register an observer in the provided {@link
diff --git a/core/java/android/print/PrintDocumentInfo.java b/core/java/android/print/PrintDocumentInfo.java
index f2b91ae..7a96e69 100644
--- a/core/java/android/print/PrintDocumentInfo.java
+++ b/core/java/android/print/PrintDocumentInfo.java
@@ -18,8 +18,6 @@ package android.print;
import android.os.Parcel;
import android.os.Parcelable;
-import android.print.PrintAttributes.Margins;
-import android.print.PrintAttributes.MediaSize;
import android.text.TextUtils;
/**
@@ -28,11 +26,6 @@ import android.text.TextUtils;
public final class PrintDocumentInfo implements Parcelable {
/**
- * Constant for an unknown media size.
- */
- public static final MediaSize MEDIA_SIZE_UNKNOWN = new MediaSize("Unknown", "Unknown", 1, 1);
-
- /**
* Constant for unknown page count..
*/
public static final int PAGE_COUNT_UNKNOWN = -1;
@@ -55,11 +48,6 @@ public final class PrintDocumentInfo implements Parcelable {
private String mName;
private int mPageCount;
private int mContentType;
- private int mOrientation;
- private int mFittingMode;
- private int mColorMode;
- private Margins mMargins;
- private MediaSize mMediaSize;
private long mDataSize;
/**
@@ -78,11 +66,6 @@ public final class PrintDocumentInfo implements Parcelable {
mName = prototype.mName;
mPageCount = prototype.mPageCount;
mContentType = prototype.mContentType;
- mOrientation = prototype.mOrientation;
- mFittingMode = prototype.mFittingMode;
- mColorMode = prototype.mColorMode;
- mMargins = prototype.mMargins;
- mMediaSize = prototype.mMediaSize;
mDataSize = prototype.mDataSize;
}
@@ -95,11 +78,6 @@ public final class PrintDocumentInfo implements Parcelable {
mName = parcel.readString();
mPageCount = parcel.readInt();
mContentType = parcel.readInt();
- mOrientation = parcel.readInt();
- mFittingMode = parcel.readInt();
- mColorMode = parcel.readInt();
- mMargins = Margins.createFromParcel(parcel);
- mMediaSize = MediaSize.createFromParcel(parcel);
mDataSize = parcel.readLong();
}
@@ -137,61 +115,6 @@ public final class PrintDocumentInfo implements Parcelable {
}
/**
- * Gets the document orientation.
- *
- * @return The orientation.
- *
- * @see PrintAttributes#ORIENTATION_PORTRAIT PrintAttributes.ORIENTATION_PORTRAIT
- * @see PrintAttributes#ORIENTATION_LANDSCAPE PrintAttributes.ORIENTATION_LANDSCAPE
- */
- public int getOrientation() {
- return mOrientation;
- }
-
- /**
- * Gets the document fitting mode.
- *
- * @return The fitting mode.
- *
- * @see PrintAttributes#FITTING_MODE_NONE PrintAttributes.FITTING_MODE_NONE
- * @see PrintAttributes#FITTING_MODE_SCALE_TO_FILL PrintAttributes.FITTING_MODE_SCALE_TO_FILL
- * @see PrintAttributes#FITTING_MODE_SCALE_TO_FIT PrintAttributes.FITTING_MODE_SCALE_TO_FIT
- */
- public int getFittingMode() {
- return mFittingMode;
- }
-
- /**
- * Gets document color mode.
- *
- * @return The color mode.
- *
- * @see PrintAttributes#COLOR_MODE_COLOR PrintAttributes.COLOR_MODE_COLOR
- * @see PrintAttributes#COLOR_MODE_MONOCHROME PrintAttributes.COLOR_MODE_MONOCHROME
- */
- public int getColorMode() {
- return mColorMode;
- }
-
- /**
- * Gets the document margins.
- *
- * @return The margins.
- */
- public Margins getMargins() {
- return mMargins;
- }
-
- /**
- * Gets the media size.
- *
- * @return The media size.
- */
- public MediaSize getMediaSize() {
- return mMediaSize;
- }
-
- /**
* Gets the document data size in bytes.
*
* @return The data size.
@@ -221,11 +144,6 @@ public final class PrintDocumentInfo implements Parcelable {
parcel.writeString(mName);
parcel.writeInt(mPageCount);
parcel.writeInt(mContentType);
- parcel.writeInt(mOrientation);
- parcel.writeInt(mFittingMode);
- parcel.writeInt(mColorMode);
- mMargins.writeToParcel(parcel);
- mMediaSize.writeToParcel(parcel);
parcel.writeLong(mDataSize);
}
@@ -236,11 +154,6 @@ public final class PrintDocumentInfo implements Parcelable {
result = prime * result + ((mName != null) ? mName.hashCode() : 0);
result = prime * result + mContentType;
result = prime * result + mPageCount;
- result = prime * result + mOrientation;
- result = prime * result + mFittingMode;
- result = prime * result + mColorMode;
- result = prime * result + (mMargins != null ? mMargins.hashCode() : 0);
- result = prime * result + (mMediaSize != null ? mMediaSize.hashCode() : 0);
result = prime * result + (int) mDataSize;
result = prime * result + (int) mDataSize >> 32;
return result;
@@ -267,29 +180,6 @@ public final class PrintDocumentInfo implements Parcelable {
if (mPageCount != other.mPageCount) {
return false;
}
- if (mOrientation != other.mOrientation) {
- return false;
- }
- if (mFittingMode != other.mFittingMode) {
- return false;
- }
- if (mColorMode != other.mColorMode) {
- return false;
- }
- if (mMargins == null) {
- if (other.mMargins != null) {
- return false;
- }
- } else if (!mMargins.equals(other.mMargins)) {
- return false;
- }
- if (mMediaSize == null) {
- if (other.mMediaSize != null) {
- return false;
- }
- } else if (!mMediaSize.equals(other.mMediaSize)) {
- return false;
- }
if (mDataSize != other.mDataSize) {
return false;
}
@@ -303,11 +193,6 @@ public final class PrintDocumentInfo implements Parcelable {
builder.append("name=").append(mName);
builder.append(", pageCount=").append(mPageCount);
builder.append(", contentType=").append(contentTyepToString(mContentType));
- builder.append(", orientation=").append(PrintAttributes.orientationToString(mOrientation));
- builder.append(", fittingMode=").append(PrintAttributes.fittingModeToString(mFittingMode));
- builder.append(", colorMode=").append(PrintAttributes.colorModeToString(mColorMode));
- builder.append(", margins=").append(mMargins);
- builder.append(", mediaSize=").append(mMediaSize);
builder.append(", size=").append(mDataSize);
builder.append("}");
return builder.toString();
@@ -336,36 +221,6 @@ public final class PrintDocumentInfo implements Parcelable {
/**
* Constructor.
* <p>
- * The values of the relevant properties are initialized from the
- * provided print attributes. For example, the orientation is set
- * to be the same as the orientation returned by calling {@link
- * PrintAttributes#getOrientation() PrintAttributes.getOrientation()}.
- * </p>
- *
- * @param name The document name. Cannot be empty.
- * @param attributes Print attributes. Cannot be null.
- *
- * @throws IllegalArgumentException If the name is empty.
- */
- public Builder(String name, PrintAttributes attributes) {
- if (TextUtils.isEmpty(name)) {
- throw new IllegalArgumentException("name cannot be empty");
- }
- if (attributes == null) {
- throw new IllegalArgumentException("attributes cannot be null");
- }
- mPrototype = new PrintDocumentInfo();
- mPrototype.mName = name;
- mPrototype.mOrientation = attributes.getOrientation();
- mPrototype.mFittingMode = attributes.getFittingMode();
- mPrototype.mColorMode = attributes.getColorMode();
- mPrototype.mMargins = attributes.getMargins();
- mPrototype.mMediaSize = attributes.getMediaSize();
- }
-
- /**
- * Constructor.
- * <p>
* The values of the relevant properties are initialized with default
* values. Please refer to the documentation of the individual setters
* for information about the default values.
@@ -379,11 +234,6 @@ public final class PrintDocumentInfo implements Parcelable {
}
mPrototype = new PrintDocumentInfo();
mPrototype.mName = name;
- mPrototype.mOrientation = PrintAttributes.ORIENTATION_PORTRAIT;
- mPrototype.mFittingMode = PrintAttributes.FITTING_MODE_NONE;
- mPrototype.mColorMode = PrintAttributes.COLOR_MODE_COLOR;
- mPrototype.mMargins = Margins.NO_MARGINS;
- mPrototype.mMediaSize = MEDIA_SIZE_UNKNOWN;
}
/**
@@ -423,95 +273,6 @@ public final class PrintDocumentInfo implements Parcelable {
}
/**
- * Sets the orientation.
- * <p>
- * <strong>Default: </strong> {@link PrintAttributes#ORIENTATION_PORTRAIT
- * PrintAttributes.ORIENTATION_PORTRAIT}
- * </p>
- *
- * @param orientation The orientation.
- *
- * @see PrintAttributes#ORIENTATION_PORTRAIT PrintAttributes.ORIENTATION_PORTRAIT
- * @see PrintAttributes#ORIENTATION_LANDSCAPE PrintAttributes.ORIENTATION_LANDSCAPE
- */
- public Builder setOrientation(int orientation) {
- PrintAttributes.enforceValidOrientation(orientation);
- mPrototype.mOrientation = orientation;
- return this;
- }
-
- /**
- * Sets the content fitting mode.
- * <p>
- * <strong>Default: </strong> {@link PrintAttributes#FITTING_MODE_NONE
- * PrintAttributes.FITTING_MODE_NONE}
- * </p>
- *
- * @param fittingMode The fitting mode.
- *
- * @see PrintAttributes#FITTING_MODE_NONE PrintAttributes.FITTING_MODE_NONE
- * @see PrintAttributes#FITTING_MODE_SCALE_TO_FILL PrintAttributes.FITTING_MODE_SCALE_TO_FILL
- * @see PrintAttributes#FITTING_MODE_SCALE_TO_FIT PrintAttributes.FITTING_MODE_SCALE_TO_FIT
- */
- public Builder setFittingMode(int fittingMode) {
- PrintAttributes.enforceValidFittingMode(fittingMode);
- mPrototype.mFittingMode = fittingMode;
- return this;
- }
-
- /**
- * Sets the content color mode.
- * <p>
- * <strong>Default: </strong> {@link PrintAttributes#COLOR_MODE_COLOR
- * PrintAttributes.COLOR_MODE_COLOR}
- * </p>
- *
- * @param colorMode The color mode.
- *
- * @see PrintAttributes#COLOR_MODE_COLOR PrintAttributes.COLOR_MODE_COLOR
- * @see PrintAttributes#COLOR_MODE_MONOCHROME PrintAttributes.COLOR_MODE_MONOCHROME
- */
- public Builder setColorMode(int colorMode) {
- PrintAttributes.enforceValidColorMode(colorMode);
- mPrototype.mColorMode = colorMode;
- return this;
- }
-
- /**
- * Sets the document margins.
- * <p>
- * <strong>Default: </strong> {@link PrintAttributes.Margins#NO_MARGINS Margins.NO_MARGINS}
- * </p>
- *
- * @param margins The margins. Cannot be null.
- */
- public Builder setMargins(Margins margins) {
- if (margins == null) {
- throw new IllegalArgumentException("margins cannot be null");
- }
- mPrototype.mMargins = margins;
- return this;
- }
-
- /**
- * Sets the document media size.
- * <p>
- * <strong>Default: </strong>#MEDIA_SIZE_UNKNOWN
- * </p>
- *
- * @param mediaSize The media size. Cannot be null.
- *
- * @see #MEDIA_SIZE_UNKNOWN
- */
- public Builder setMediaSize(MediaSize mediaSize) {
- if (mediaSize == null) {
- throw new IllegalArgumentException("media size cannot be null");
- }
- mPrototype.mMediaSize = mediaSize;
- return this;
- }
-
- /**
* Creates a new {@link PrintDocumentInfo} instance.
*
* @return The new instance.
diff --git a/core/java/android/print/PrinterCapabilitiesInfo.java b/core/java/android/print/PrinterCapabilitiesInfo.java
index 941e6e1..ea44c87 100644
--- a/core/java/android/print/PrinterCapabilitiesInfo.java
+++ b/core/java/android/print/PrinterCapabilitiesInfo.java
@@ -21,7 +21,6 @@ import android.os.Parcelable;
import android.print.PrintAttributes.Margins;
import android.print.PrintAttributes.MediaSize;
import android.print.PrintAttributes.Resolution;
-import android.print.PrintAttributes.Tray;
import java.util.ArrayList;
import java.util.Arrays;
@@ -40,26 +39,16 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
private static final int PROPERTY_MEDIA_SIZE = 0;
private static final int PROPERTY_RESOLUTION = 1;
- private static final int PROPERTY_INPUT_TRAY = 2;
- private static final int PROPERTY_OUTPUT_TRAY = 3;
- private static final int PROPERTY_DUPLEX_MODE = 4;
- private static final int PROPERTY_COLOR_MODE = 5;
- private static final int PROPERTY_FITTING_MODE = 6;
- private static final int PROPERTY_ORIENTATION = 7;
- private static final int PROPERTY_COUNT = 8;
+ private static final int PROPERTY_COLOR_MODE = 2;
+ private static final int PROPERTY_COUNT = 3;
private static final Margins DEFAULT_MARGINS = new Margins(0, 0, 0, 0);
private Margins mMinMargins = DEFAULT_MARGINS;
private List<MediaSize> mMediaSizes;
private List<Resolution> mResolutions;
- private List<Tray> mInputTrays;
- private List<Tray> mOutputTrays;
- private int mDuplexModes;
private int mColorModes;
- private int mFittingModes;
- private int mOrientations;
private final int[] mDefaults = new int[PROPERTY_COUNT];
private Margins mDefaultMargins = DEFAULT_MARGINS;
@@ -106,32 +95,7 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
mResolutions = null;
}
- if (other.mInputTrays != null) {
- if (mInputTrays != null) {
- mInputTrays.clear();
- mInputTrays.addAll(other.mInputTrays);
- } else {
- mInputTrays = new ArrayList<Tray>(other.mInputTrays);
- }
- } else {
- mInputTrays = null;
- }
-
- if (other.mOutputTrays != null) {
- if (mOutputTrays != null) {
- mOutputTrays.clear();
- mOutputTrays.addAll(other.mOutputTrays);
- } else {
- mOutputTrays = new ArrayList<Tray>(other.mOutputTrays);
- }
- } else {
- mOutputTrays = null;
- }
-
- mDuplexModes = other.mDuplexModes;
mColorModes = other.mColorModes;
- mFittingModes = other.mFittingModes;
- mOrientations = other.mOrientations;
final int defaultCount = other.mDefaults.length;
for (int i = 0; i < defaultCount; i++) {
@@ -169,37 +133,6 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
}
/**
- * Gets the available input trays.
- *
- * @return The input trays.
- */
- public List<Tray> getInputTrays() {
- return mInputTrays;
- }
-
- /**
- * Gets the available output trays.
- *
- * @return The output trays.
- */
- public List<Tray> getOutputTrays() {
- return mOutputTrays;
- }
-
- /**
- * Gets the supported duplex modes.
- *
- * @return The duplex modes.
- *
- * @see PrintAttributes#DUPLEX_MODE_NONE
- * @see PrintAttributes#DUPLEX_MODE_LONG_EDGE
- * @see PrintAttributes#DUPLEX_MODE_SHORT_EDGE
- */
- public int getDuplexModes() {
- return mDuplexModes;
- }
-
- /**
* Gets the supported color modes.
*
* @return The color modes.
@@ -212,30 +145,6 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
}
/**
- * Gets the supported fitting modes.
- *
- * @return The fitting modes.
- *
- * @see PrintAttributes#FITTING_MODE_NONE
- * @see PrintAttributes#FITTING_MODE_FIT_TO_PAGE
- */
- public int getFittingModes() {
- return mFittingModes;
- }
-
- /**
- * Gets the supported orientations.
- *
- * @return The orientations.
- *
- * @see PrintAttributes#ORIENTATION_PORTRAIT
- * @see PrintAttributes#ORIENTATION_LANDSCAPE
- */
- public int getOrientations() {
- return mOrientations;
- }
-
- /**
* Gets the default print attributes.
*
* @param outAttributes The attributes to populated.
@@ -255,48 +164,18 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
outAttributes.setResolution(mResolutions.get(resolutionIndex));
}
- final int inputTrayIndex = mDefaults[PROPERTY_INPUT_TRAY];
- if (inputTrayIndex >= 0) {
- outAttributes.setInputTray(mInputTrays.get(inputTrayIndex));
- }
-
- final int outputTrayIndex = mDefaults[PROPERTY_OUTPUT_TRAY];
- if (outputTrayIndex >= 0) {
- outAttributes.setOutputTray(mOutputTrays.get(outputTrayIndex));
- }
-
- final int duplexMode = mDefaults[PROPERTY_DUPLEX_MODE];
- if (duplexMode > 0) {
- outAttributes.setDuplexMode(duplexMode);
- }
-
final int colorMode = mDefaults[PROPERTY_COLOR_MODE];
if (colorMode > 0) {
outAttributes.setColorMode(colorMode);
}
-
- final int fittingMode = mDefaults[PROPERTY_FITTING_MODE];
- if (fittingMode > 0) {
- outAttributes.setFittingMode(fittingMode);
- }
-
- final int orientation = mDefaults[PROPERTY_ORIENTATION];
- if (orientation > 0) {
- outAttributes.setOrientation(orientation);
- }
}
private PrinterCapabilitiesInfo(Parcel parcel) {
mMinMargins = readMargins(parcel);
readMediaSizes(parcel);
readResolutions(parcel);
- mInputTrays = readInputTrays(parcel);
- mOutputTrays = readOutputTrays(parcel);
mColorModes = parcel.readInt();
- mDuplexModes = parcel.readInt();
- mFittingModes = parcel.readInt();
- mOrientations = parcel.readInt();
readDefaults(parcel);
mDefaultMargins = readMargins(parcel);
@@ -312,13 +191,8 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
writeMargins(mMinMargins, parcel);
writeMediaSizes(parcel);
writeResolutions(parcel);
- writeInputTrays(parcel);
- writeOutputTrays(parcel);
parcel.writeInt(mColorModes);
- parcel.writeInt(mDuplexModes);
- parcel.writeInt(mFittingModes);
- parcel.writeInt(mOrientations);
writeDefaults(parcel);
writeMargins(mDefaultMargins, parcel);
@@ -331,12 +205,7 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
result = prime * result + ((mMinMargins == null) ? 0 : mMinMargins.hashCode());
result = prime * result + ((mMediaSizes == null) ? 0 : mMediaSizes.hashCode());
result = prime * result + ((mResolutions == null) ? 0 : mResolutions.hashCode());
- result = prime * result + ((mInputTrays == null) ? 0 : mInputTrays.hashCode());
- result = prime * result + ((mOutputTrays == null) ? 0 : mOutputTrays.hashCode());
result = prime * result + mColorModes;
- result = prime * result + mDuplexModes;
- result = prime * result + mFittingModes;
- result = prime * result + mOrientations;
result = prime * result + Arrays.hashCode(mDefaults);
result = prime * result + ((mDefaultMargins == null) ? 0 : mDefaultMargins.hashCode());
return result;
@@ -375,32 +244,9 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
} else if (!mResolutions.equals(other.mResolutions)) {
return false;
}
- if (mInputTrays == null) {
- if (other.mInputTrays != null) {
- return false;
- }
- } else if (!mInputTrays.equals(other.mInputTrays)) {
- return false;
- }
- if (mOutputTrays == null) {
- if (other.mOutputTrays != null) {
- return false;
- }
- } else if (!mOutputTrays.equals(other.mOutputTrays)) {
- return false;
- }
- if (mDuplexModes != other.mDuplexModes) {
- return false;
- }
if (mColorModes != other.mColorModes) {
return false;
}
- if (mFittingModes != other.mFittingModes) {
- return false;
- }
- if (mOrientations != other.mOrientations) {
- return false;
- }
if (!Arrays.equals(mDefaults, other.mDefaults)) {
return false;
}
@@ -421,32 +267,11 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
builder.append("minMargins=").append(mMinMargins);
builder.append(", mediaSizes=").append(mMediaSizes);
builder.append(", resolutions=").append(mResolutions);
- builder.append(", inputTrays=").append(mInputTrays);
- builder.append(", outputTrays=").append(mOutputTrays);
- builder.append(", duplexModes=").append(duplexModesToString());
builder.append(", colorModes=").append(colorModesToString());
- builder.append(", fittingModes=").append(fittingModesToString());
- builder.append(", orientations=").append(orientationsToString());
builder.append("\"}");
return builder.toString();
}
- private String duplexModesToString() {
- StringBuilder builder = new StringBuilder();
- builder.append('[');
- int duplexModes = mDuplexModes;
- while (duplexModes != 0) {
- final int duplexMode = 1 << Integer.numberOfTrailingZeros(duplexModes);
- duplexModes &= ~duplexMode;
- if (builder.length() > 0) {
- builder.append(", ");
- }
- builder.append(PrintAttributes.duplexModeToString(duplexMode));
- }
- builder.append(']');
- return builder.toString();
- }
-
private String colorModesToString() {
StringBuilder builder = new StringBuilder();
builder.append('[');
@@ -463,38 +288,6 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
return builder.toString();
}
- private String fittingModesToString() {
- StringBuilder builder = new StringBuilder();
- builder.append('[');
- int fittingModes = mFittingModes;
- while (fittingModes != 0) {
- final int fittingMode = 1 << Integer.numberOfTrailingZeros(fittingModes);
- fittingModes &= ~fittingMode;
- if (builder.length() > 0) {
- builder.append(", ");
- }
- builder.append(PrintAttributes.fittingModeToString(fittingMode));
- }
- builder.append(']');
- return builder.toString();
- }
-
- private String orientationsToString() {
- StringBuilder builder = new StringBuilder();
- builder.append('[');
- int orientations = mOrientations;
- while (orientations != 0) {
- final int orientation = 1 << Integer.numberOfTrailingZeros(orientations);
- orientations &= ~orientation;
- if (builder.length() > 0) {
- builder.append(", ");
- }
- builder.append(PrintAttributes.orientationToString(orientation));
- }
- builder.append(']');
- return builder.toString();
- }
-
private void writeMediaSizes(Parcel parcel) {
if (mMediaSizes == null) {
parcel.writeInt(0);
@@ -552,54 +345,6 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
return (parcel.readInt() == 1) ? Margins.createFromParcel(parcel) : null;
}
- private void writeInputTrays(Parcel parcel) {
- if (mInputTrays == null) {
- parcel.writeInt(0);
- return;
- }
- final int inputTrayCount = mInputTrays.size();
- parcel.writeInt(inputTrayCount);
- for (int i = 0; i < inputTrayCount; i++) {
- mInputTrays.get(i).writeToParcel(parcel);
- }
- }
-
- private List<Tray> readInputTrays(Parcel parcel) {
- final int inputTrayCount = parcel.readInt();
- if (inputTrayCount <= 0) {
- return null;
- }
- List<Tray> inputTrays = new ArrayList<Tray>(inputTrayCount);
- for (int i = 0; i < inputTrayCount; i++) {
- inputTrays.add(Tray.createFromParcel(parcel));
- }
- return inputTrays;
- }
-
- private void writeOutputTrays(Parcel parcel) {
- if (mOutputTrays == null) {
- parcel.writeInt(0);
- return;
- }
- final int outputTrayCount = mOutputTrays.size();
- parcel.writeInt(outputTrayCount);
- for (int i = 0; i < outputTrayCount; i++) {
- mOutputTrays.get(i).writeToParcel(parcel);
- }
- }
-
- private List<Tray> readOutputTrays(Parcel parcel) {
- final int outputTrayCount = parcel.readInt();
- if (outputTrayCount <= 0) {
- return null;
- }
- List<Tray> outputTrays = new ArrayList<Tray>(outputTrayCount);
- for (int i = 0; i < outputTrayCount; i++) {
- outputTrays.add(Tray.createFromParcel(parcel));
- }
- return outputTrays;
- }
-
private void readDefaults(Parcel parcel) {
final int defaultCount = parcel.readInt();
for (int i = 0; i < defaultCount; i++) {
@@ -722,62 +467,6 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
}
/**
- * Adds an input tray.
- * <p>
- * <strong>Required:</strong> No
- * </p>
- *
- * @param inputTray A tray.
- * @param isDefault Whether this is the default.
- * @return This builder.
- *
- * @throws IllegalArgumentException If set as default and there
- * is already a default.
- *
- * @see PrintAttributes.Tray
- */
- public Builder addInputTray(Tray inputTray, boolean isDefault) {
- if (mPrototype.mInputTrays == null) {
- mPrototype.mInputTrays = new ArrayList<Tray>();
- }
- final int insertionIndex = mPrototype.mInputTrays.size();
- mPrototype.mInputTrays.add(inputTray);
- if (isDefault) {
- throwIfDefaultAlreadySpecified(PROPERTY_INPUT_TRAY);
- mPrototype.mDefaults[PROPERTY_INPUT_TRAY] = insertionIndex;
- }
- return this;
- }
-
- /**
- * Adds an output tray.
- * <p>
- * <strong>Required:</strong> No
- * </p>
- *
- * @param outputTray A tray.
- * @param isDefault Whether this is the default.
- * @return This builder.
- *
- * @throws IllegalArgumentException If set as default and there
- * is already a default.
- *
- * @see PrintAttributes.Tray
- */
- public Builder addOutputTray(Tray outputTray, boolean isDefault) {
- if (mPrototype.mOutputTrays == null) {
- mPrototype.mOutputTrays = new ArrayList<Tray>();
- }
- final int insertionIndex = mPrototype.mOutputTrays.size();
- mPrototype.mOutputTrays.add(outputTray);
- if (isDefault) {
- throwIfDefaultAlreadySpecified(PROPERTY_OUTPUT_TRAY);
- mPrototype.mDefaults[PROPERTY_OUTPUT_TRAY] = insertionIndex;
- }
- return this;
- }
-
- /**
* Sets the color modes.
* <p>
* <strong>Required:</strong> Yes
@@ -810,103 +499,6 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
}
/**
- * Set the duplex modes.
- * <p>
- * <strong>Required:</strong> No
- * </p>
- *
- * @param duplexModes The duplex mode bit mask.
- * @param defaultDuplexMode The default duplex mode.
- * @return This builder.
- *
- * @throws IllegalArgumentException If duplex modes contains an invalid
- * mode bit or if the default duplex mode is invalid.
- *
- * @see PrintAttributes#DUPLEX_MODE_NONE
- * @see PrintAttributes#DUPLEX_MODE_LONG_EDGE
- * @see PrintAttributes#DUPLEX_MODE_SHORT_EDGE
- */
- public Builder setDuplexModes(int duplexModes, int defaultDuplexMode) {
- int currentModes = duplexModes;
- while (currentModes > 0) {
- final int currentMode = (1 << Integer.numberOfTrailingZeros(currentModes));
- currentModes &= ~currentMode;
- PrintAttributes.enforceValidDuplexMode(currentMode);
- }
- if ((duplexModes & defaultDuplexMode) == 0) {
- throw new IllegalArgumentException("Default duplex mode not in duplex modes.");
- }
- PrintAttributes.enforceValidDuplexMode(defaultDuplexMode);
- mPrototype.mDuplexModes = duplexModes;
- mPrototype.mDefaults[PROPERTY_DUPLEX_MODE] = defaultDuplexMode;
- return this;
- }
-
- /**
- * Sets the fitting modes.
- * <p>
- * <strong>Required:</strong> No
- * </p>
- *
- * @param fittingModes The fitting mode bit mask.
- * @param defaultFittingMode The default fitting mode.
- * @return This builder.
- *
- * @throws IllegalArgumentException If fitting modes contains an invalid
- * mode bit or if the default fitting mode is invalid.
- *
- * @see PrintAttributes#FITTING_MODE_NONE
- * @see PrintAttributes#FITTING_MODE_FIT_TO_PAGE
- */
- public Builder setFittingModes(int fittingModes, int defaultFittingMode) {
- int currentModes = fittingModes;
- while (currentModes > 0) {
- final int currentMode = (1 << Integer.numberOfTrailingZeros(currentModes));
- currentModes &= ~currentMode;
- PrintAttributes.enforceValidFittingMode(currentMode);
- }
- if ((fittingModes & defaultFittingMode) == 0) {
- throw new IllegalArgumentException("Default fitting mode not in fiting modes.");
- }
- PrintAttributes.enforceValidFittingMode(defaultFittingMode);
- mPrototype.mFittingModes = fittingModes;
- mPrototype.mDefaults[PROPERTY_FITTING_MODE] = defaultFittingMode;
- return this;
- }
-
- /**
- * Sets the orientations.
- * <p>
- * <strong>Required:</strong> Yes
- * </p>
- *
- * @param orientations The orientation bit mask.
- * @param defaultOrientation The default orientation.
- * @return This builder.
- *
- * @throws IllegalArgumentException If orientations contains an invalid
- * mode bit or if the default orientation is invalid.
- *
- * @see PrintAttributes#ORIENTATION_PORTRAIT
- * @see PrintAttributes#ORIENTATION_LANDSCAPE
- */
- public Builder setOrientations(int orientations, int defaultOrientation) {
- int currentOrientaions = orientations;
- while (currentOrientaions > 0) {
- final int currentOrnt = (1 << Integer.numberOfTrailingZeros(currentOrientaions));
- currentOrientaions &= ~currentOrnt;
- PrintAttributes.enforceValidOrientation(currentOrnt);
- }
- if ((orientations & defaultOrientation) == 0) {
- throw new IllegalArgumentException("Default orientation not in orientations.");
- }
- PrintAttributes.enforceValidOrientation(defaultOrientation);
- mPrototype.mOrientations = orientations;
- mPrototype.mDefaults[PROPERTY_ORIENTATION] = defaultOrientation;
- return this;
- }
-
- /**
* Crates a new {@link PrinterCapabilitiesInfo} enforcing that all
* required properties have need specified. See individual methods
* in this class for reference about required attributes.
@@ -934,12 +526,6 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
if (mPrototype.mDefaults[PROPERTY_COLOR_MODE] == DEFAULT_UNDEFINED) {
throw new IllegalStateException("No default color mode specified.");
}
- if (mPrototype.mOrientations == 0) {
- throw new IllegalStateException("No oprientation specified.");
- }
- if (mPrototype.mDefaults[PROPERTY_ORIENTATION] == DEFAULT_UNDEFINED) {
- throw new IllegalStateException("No default orientation specified.");
- }
if (mPrototype.mMinMargins == null) {
mPrototype.mMinMargins = new Margins(0, 0, 0, 0);
}
diff --git a/core/java/android/print/PrinterDiscoverySession.java b/core/java/android/print/PrinterDiscoverySession.java
index 46f0bef..64249b4 100644
--- a/core/java/android/print/PrinterDiscoverySession.java
+++ b/core/java/android/print/PrinterDiscoverySession.java
@@ -38,7 +38,6 @@ public final class PrinterDiscoverySession {
private static final int MSG_PRINTERS_ADDED = 1;
private static final int MSG_PRINTERS_REMOVED = 2;
- private static final int MSG_PRINTERS_UPDATED = 3;
private final ArrayMap<PrinterId, PrinterInfo> mPrinters =
new ArrayMap<PrinterId, PrinterInfo>();
@@ -200,8 +199,8 @@ public final class PrinterDiscoverySession {
final int addedPrinterCount = printers.size();
for (int i = 0; i < addedPrinterCount; i++) {
PrinterInfo addedPrinter = printers.get(i);
- if (mPrinters.get(addedPrinter.getId()) == null) {
- mPrinters.put(addedPrinter.getId(), addedPrinter);
+ PrinterInfo oldPrinter = mPrinters.put(addedPrinter.getId(), addedPrinter);
+ if (oldPrinter == null || !oldPrinter.equals(addedPrinter)) {
printersChanged = true;
}
}
@@ -227,25 +226,6 @@ public final class PrinterDiscoverySession {
}
}
- private void handlePrintersUpdated(List<PrinterInfo> printers) {
- if (isDestroyed()) {
- return;
- }
- boolean printersChanged = false;
- final int updatedPrinterCount = printers.size();
- for (int i = 0; i < updatedPrinterCount; i++) {
- PrinterInfo updatedPrinter = printers.get(i);
- PrinterInfo oldPrinter = mPrinters.get(updatedPrinter.getId());
- if (oldPrinter != null && !oldPrinter.equals(updatedPrinter)) {
- mPrinters.put(updatedPrinter.getId(), updatedPrinter);
- printersChanged = true;
- }
- }
- if (printersChanged) {
- notifyOnPrintersChanged();
- }
- }
-
private void notifyOnPrintersChanged() {
if (mListener != null) {
mListener.onPrintersChanged();
@@ -277,11 +257,6 @@ public final class PrinterDiscoverySession {
List<PrinterId> printerIds = (List<PrinterId>) message.obj;
handlePrintersRemoved(printerIds);
} break;
-
- case MSG_PRINTERS_UPDATED: {
- List<PrinterInfo> printers = (List<PrinterInfo>) message.obj;
- handlePrintersUpdated(printers);
- } break;
}
}
}
@@ -311,14 +286,5 @@ public final class PrinterDiscoverySession {
printerIds).sendToTarget();
}
}
-
- @Override
- public void onPrintersUpdated(List<PrinterInfo> printers) {
- PrinterDiscoverySession session = mWeakSession.get();
- if (session != null) {
- session.mHandler.obtainMessage(MSG_PRINTERS_UPDATED,
- printers).sendToTarget();
- }
- }
}
}
diff --git a/core/java/android/printservice/IPrintServiceClient.aidl b/core/java/android/printservice/IPrintServiceClient.aidl
index 1e33fc0..ad3c04f 100644
--- a/core/java/android/printservice/IPrintServiceClient.aidl
+++ b/core/java/android/printservice/IPrintServiceClient.aidl
@@ -35,5 +35,4 @@ interface IPrintServiceClient {
void onPrintersAdded(in List<PrinterInfo> printers);
void onPrintersRemoved(in List<PrinterId> printerIds);
- void onPrintersUpdated(in List<PrinterInfo> printers);
}
diff --git a/core/java/android/printservice/PrinterDiscoverySession.java b/core/java/android/printservice/PrinterDiscoverySession.java
index 6464cc1..5450e02 100644
--- a/core/java/android/printservice/PrinterDiscoverySession.java
+++ b/core/java/android/printservice/PrinterDiscoverySession.java
@@ -47,7 +47,7 @@ import java.util.List;
* PrinterDiscoverySession#addPrinters(List)}. Added printers that disappeared are
* removed by invoking {@link PrinterDiscoverySession#removePrinters(List)}. Added
* printers whose properties or capabilities changed are updated through a call to
- * {@link PrinterDiscoverySession#updatePrinters(List)}. The printers added in this
+ * {@link PrinterDiscoverySession#addPrinters(List)}. The printers added in this
* session can be acquired via {@link #getPrinters()} where the returned printers
* will be an up-to-date snapshot of the printers that you reported during the
* session. Printers are <strong>not</strong> persisted across sessions.
@@ -89,6 +89,9 @@ public abstract class PrinterDiscoverySession {
private final ArrayMap<PrinterId, PrinterInfo> mPrinters =
new ArrayMap<PrinterId, PrinterInfo>();
+ private final List<PrinterId> mTrackedPrinters =
+ new ArrayList<PrinterId>();
+
private ArrayMap<PrinterId, PrinterInfo> mLastSentPrinters;
private IPrintServiceClient mObserver;
@@ -130,7 +133,6 @@ public abstract class PrinterDiscoverySession {
*
* @see #addPrinters(List)
* @see #removePrinters(List)
- * @see #updatePrinters(List)
* @see #isDestroyed()
*/
public final List<PrinterInfo> getPrinters() {
@@ -142,7 +144,7 @@ public abstract class PrinterDiscoverySession {
}
/**
- * Adds discovered printers. Adding an already added printer has no effect.
+ * Adds discovered printers. Adding an already added printer updates it.
* Removed printers can be added again. You can call this method multiple
* times during the life of this session. Duplicates will be ignored.
* <p>
@@ -153,7 +155,6 @@ public abstract class PrinterDiscoverySession {
* @param printers The printers to add.
*
* @see #removePrinters(List)
- * @see #updatePrinters(List)
* @see #getPrinters()
* @see #isDestroyed()
*/
@@ -168,18 +169,21 @@ public abstract class PrinterDiscoverySession {
if (mIsDiscoveryStarted) {
// If during discovery, add the new printers and send them.
- List<PrinterInfo> addedPrinters = new ArrayList<PrinterInfo>();
+ List<PrinterInfo> addedPrinters = null;
final int addedPrinterCount = printers.size();
for (int i = 0; i < addedPrinterCount; i++) {
PrinterInfo addedPrinter = printers.get(i);
- if (mPrinters.get(addedPrinter.getId()) == null) {
- mPrinters.put(addedPrinter.getId(), addedPrinter);
+ PrinterInfo oldPrinter = mPrinters.put(addedPrinter.getId(), addedPrinter);
+ if (oldPrinter == null || !oldPrinter.equals(addedPrinter)) {
+ if (addedPrinters == null) {
+ addedPrinters = new ArrayList<PrinterInfo>();
+ }
addedPrinters.add(addedPrinter);
}
}
// Send the added printers, if such.
- if (!addedPrinters.isEmpty()) {
+ if (addedPrinters != null) {
sendAddedPrinters(mObserver, addedPrinters);
}
} else {
@@ -232,7 +236,6 @@ public abstract class PrinterDiscoverySession {
* @param printerIds The ids of the removed printers.
*
* @see #addPrinters(List)
- * @see #updatePrinters(List)
* @see #getPrinters()
* @see #isDestroyed()
*/
@@ -295,86 +298,6 @@ public abstract class PrinterDiscoverySession {
}
}
- /**
- * Updates added printers. Updating a printer that was not added or that
- * was removed has no effect. You can call this method multiple times
- * during the lifetime of this session.
- * <p>
- * <strong>Note: </strong> Calls to this method after the session is
- * destroyed, that is after the {@link #onDestroy()} callback, will be ignored.
- * </p>
- *
- * @param printers The printers to update.
- *
- * @see #addPrinters(List)
- * @see #removePrinters(List)
- * @see #getPrinters()
- * @see #isDestroyed()
- */
- public final void updatePrinters(List<PrinterInfo> printers) {
- PrintService.throwIfNotCalledOnMainThread();
-
- // If the session is destroyed - nothing do to.
- if (mIsDestroyed) {
- Log.w(LOG_TAG, "Not updating printers - session destroyed.");
- return;
- }
-
- if (mIsDiscoveryStarted) {
- // If during discovery, update existing printers and send them.
- List<PrinterInfo> updatedPrinters = new ArrayList<PrinterInfo>();
- final int updatedPrinterCount = printers.size();
- for (int i = 0; i < updatedPrinterCount; i++) {
- PrinterInfo updatedPrinter = printers.get(i);
- PrinterInfo oldPrinter = mPrinters.get(updatedPrinter.getId());
- if (oldPrinter != null && !oldPrinter.equals(updatedPrinter)) {
- mPrinters.put(updatedPrinter.getId(), updatedPrinter);
- updatedPrinters.add(updatedPrinter);
- }
- }
-
- // Send the updated printers, if such.
- if (!updatedPrinters.isEmpty()) {
- sendUpdatedPrinters(mObserver, updatedPrinters);
- }
- } else {
- // Remember the last sent printers if needed.
- if (mLastSentPrinters == null) {
- mLastSentPrinters = new ArrayMap<PrinterId, PrinterInfo>(mPrinters);
- }
-
- // Update the printers.
- final int updatedPrinterCount = printers.size();
- for (int i = 0; i < updatedPrinterCount; i++) {
- PrinterInfo updatedPrinter = printers.get(i);
- PrinterInfo oldPrinter = mPrinters.get(updatedPrinter.getId());
- if (oldPrinter != null && !oldPrinter.equals(updatedPrinter)) {
- mPrinters.put(updatedPrinter.getId(), updatedPrinter);
- }
- }
- }
- }
-
- private static void sendUpdatedPrinters(IPrintServiceClient observer,
- List<PrinterInfo> printers) {
- try {
- final int printerCount = printers.size();
- if (printerCount <= MAX_ITEMS_PER_CALLBACK) {
- observer.onPrintersUpdated(printers);
- } else {
- final int transactionCount = (printerCount / MAX_ITEMS_PER_CALLBACK) + 1;
- for (int i = 0; i < transactionCount; i++) {
- final int start = i * MAX_ITEMS_PER_CALLBACK;
- final int end = Math.min(start + MAX_ITEMS_PER_CALLBACK, printerCount);
- List<PrinterInfo> subPrinters = printers.subList(start, end);
- observer.onPrintersUpdated(subPrinters);
- }
- }
- } catch (RemoteException re) {
- Log.e(LOG_TAG, "Error sending updated printers", re);
- }
- }
-
private void sendOutOfDiscoveryPeriodPrinterChanges() {
// Noting changed since the last discovery period - nothing to do.
if (mLastSentPrinters == null || mLastSentPrinters.isEmpty()) {
@@ -382,21 +305,11 @@ public abstract class PrinterDiscoverySession {
return;
}
+ // Determine the added printers.
List<PrinterInfo> addedPrinters = null;
- List<PrinterInfo> updatedPrinters = null;
- List<PrinterId> removedPrinterIds = null;
-
- // Determine the added and updated printers.
for (PrinterInfo printer : mPrinters.values()) {
PrinterInfo sentPrinter = mLastSentPrinters.get(printer.getId());
- if (sentPrinter != null) {
- if (!sentPrinter.equals(printer)) {
- if (updatedPrinters == null) {
- updatedPrinters = new ArrayList<PrinterInfo>();
- }
- updatedPrinters.add(printer);
- }
- } else {
+ if (sentPrinter == null || !sentPrinter.equals(printer)) {
if (addedPrinters == null) {
addedPrinters = new ArrayList<PrinterInfo>();
}
@@ -409,12 +322,8 @@ public abstract class PrinterDiscoverySession {
sendAddedPrinters(mObserver, addedPrinters);
}
- // Send the updated printers, if such.
- if (updatedPrinters != null) {
- sendUpdatedPrinters(mObserver, updatedPrinters);
- }
-
// Determine the removed printers.
+ List<PrinterId> removedPrinterIds = null;
for (PrinterInfo sentPrinter : mLastSentPrinters.values()) {
if (!mPrinters.containsKey(sentPrinter.getId())) {
if (removedPrinterIds == null) {
@@ -437,14 +346,15 @@ public abstract class PrinterDiscoverySession {
* added via calling {@link #addPrinters(List)}. Added printers that disappeared
* should be removed via calling {@link #removePrinters(List)}. Added printers
* whose properties or capabilities changed should be updated via calling {@link
- * #updatePrinters(List)}. You will receive a call to call to {@link
- * #onStopPrinterDiscovery()} when you should stop printer discovery.
+ * #addPrinters(List)}. You will receive a call to {@link #onStopPrinterDiscovery()}
+ * when you should stop printer discovery.
* <p>
* During the lifetime of this session all printers that are known to your print
* service have to be added. The system does not retain any printers across sessions.
* However, if you were asked to start and then stop performing printer discovery
* in this session, then a subsequent discovering should not re-discover already
- * discovered printers.
+ * discovered printers. You can get the printers reported during this session by
+ * calling {@link #getPrinters()}.
* </p>
* <p>
* <strong>Note: </strong>You are also given a list of printers whose availability
@@ -459,7 +369,6 @@ public abstract class PrinterDiscoverySession {
* @see #onStopPrinterDiscovery()
* @see #addPrinters(List)
* @see #removePrinters(List)
- * @see #updatePrinters(List)
* @see #isPrinterDiscoveryStarted()
*/
public abstract void onStartPrinterDiscovery(List<PrinterId> priorityList);
@@ -476,7 +385,7 @@ public abstract class PrinterDiscoverySession {
* Callback asking you to validate that the given printers are valid, that
* is they exist. You are responsible for checking whether these printers
* exist and for the ones that do exist notify the system via calling
- * {@link #updatePrinters(List)}.
+ * {@link #addPrinters(List)}.
* <p>
* <strong>Note: </strong> You are <strong>not required</strong> to provide
* the printer capabilities when updating the printers that do exist.
@@ -484,7 +393,6 @@ public abstract class PrinterDiscoverySession {
*
* @param printerIds The printers to validate.
*
- * @see #updatePrinters(List)
* @see PrinterInfo.Builder#setCapabilities(PrinterCapabilitiesInfo)
* PrinterInfo.Builder.setCapabilities(PrinterCapabilitiesInfo)
*/
@@ -494,7 +402,7 @@ public abstract class PrinterDiscoverySession {
* Callback asking you to start tracking the state of a printer. Tracking
* the state means that you should do a best effort to observe the state
* of this printer and notify the system if that state changes via calling
- * {@link #updatePrinters(List)}.
+ * {@link #addPrinters(List)}.
* <p>
* <strong>Note: </strong> A printer can be initially added without its
* capabilities to avoid polling printers that the user will not select.
@@ -513,7 +421,6 @@ public abstract class PrinterDiscoverySession {
* @param printerId The printer to start tracking.
*
* @see #onStopPrinterStateTracking(PrinterId)
- * @see #updatePrinters(List)
* @see PrinterInfo.Builder#setCapabilities(PrinterCapabilitiesInfo)
* PrinterInfo.Builder.setCapabilities(PrinterCapabilitiesInfo)
*/
@@ -531,6 +438,32 @@ public abstract class PrinterDiscoverySession {
public abstract void onStopPrinterStateTracking(PrinterId printerId);
/**
+ * Gets the printers that should be tracked. These are printers that are
+ * important to the user and for which you received a call to {@link
+ * #onStartPrinterStateTracking(PrinterId)} asking you to observer their
+ * state and reporting it to the system via {@link #addPrinters(List)}.
+ * You will receive a call to {@link #onStopPrinterStateTracking(PrinterId)}
+ * if you should stop tracking a printer.
+ * <p>
+ * <strong>Note: </strong> Calls to this method after the session is
+ * destroyed, that is after the {@link #onDestroy()} callback, will be ignored.
+ * </p>
+ *
+ * @return The printers.
+ *
+ * @see #onStartPrinterStateTracking(PrinterId)
+ * @see #onStopPrinterStateTracking(PrinterId)
+ * @see #isDestroyed()
+ */
+ public final List<PrinterId> getTrackedPrinters() {
+ PrintService.throwIfNotCalledOnMainThread();
+ if (mIsDestroyed) {
+ return Collections.emptyList();
+ }
+ return new ArrayList<PrinterId>(mTrackedPrinters);
+ }
+
+ /**
* Notifies you that the session is destroyed. After this callback is invoked
* any calls to the methods of this class will be ignored, {@link #isDestroyed()}
* will return true and you will also no longer receive callbacks.
@@ -589,13 +522,16 @@ public abstract class PrinterDiscoverySession {
}
void startPrinterStateTracking(PrinterId printerId) {
- if (!mIsDestroyed && mObserver != null) {
+ if (!mIsDestroyed && mObserver != null
+ && !mTrackedPrinters.contains(printerId)) {
+ mTrackedPrinters.add(printerId);
onStartPrinterStateTracking(printerId);
}
}
void stopPrinterStateTracking(PrinterId printerId) {
- if (!mIsDestroyed && mObserver != null) {
+ if (!mIsDestroyed && mObserver != null
+ && mTrackedPrinters.remove(printerId)) {
onStopPrinterStateTracking(printerId);
}
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 83e1544..a17a537 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -703,6 +703,20 @@ public final class Settings {
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
+ /**
+ * Activity Action: Show the top level print settings.
+ * <p>
+ * In some cases, a matching Activity may not exist, so ensure you
+ * safeguard against this.
+ * <p>
+ * Input: Nothing.
+ * <p>
+ * Output: Nothing.
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_PRINT_SETTINGS =
+ "android.settings.ACTION_PRINT_SETTINGS";
+
// End of Intent actions for Settings
/**