summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
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
/**