Merge "Update the documentaton of the android.print package." into klp-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2a40da558b
@@ -39,9 +39,8 @@ public final class PageRange implements Parcelable {
|
|||||||
* @param start The start page index (zero based and inclusive).
|
* @param start The start page index (zero based and inclusive).
|
||||||
* @param end The end page index (zero based and inclusive).
|
* @param end The end page index (zero based and inclusive).
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException If start is less than zero.
|
* @throws IllegalArgumentException If start is less than zero or end
|
||||||
* @throws IllegalArgumentException If end is less than zero.
|
* is less than zero or start greater than end.
|
||||||
* @throws IllegalArgumentException If start greater than end.
|
|
||||||
*/
|
*/
|
||||||
public PageRange(int start, int end) {
|
public PageRange(int start, int end) {
|
||||||
if (start < 0) {
|
if (start < 0) {
|
||||||
|
|||||||
@@ -30,7 +30,11 @@ import com.android.internal.R;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class represents the attributes of a print job.
|
* This class represents the attributes of a print job. These attributes
|
||||||
|
* describe how the printed content should be laid out. For example, the
|
||||||
|
* print attributes may state that the content should be laid out on a
|
||||||
|
* letter size with 300 DPI (dots per inch) resolution, have a margin of
|
||||||
|
* 10 mills (thousand of an inch) on all sides, and be black and white.
|
||||||
*/
|
*/
|
||||||
public final class PrintAttributes implements Parcelable {
|
public final class PrintAttributes implements Parcelable {
|
||||||
/** Color mode: Monochrome color scheme, for example one color is used. */
|
/** Color mode: Monochrome color scheme, for example one color is used. */
|
||||||
@@ -277,7 +281,7 @@ public final class PrintAttributes implements Parcelable {
|
|||||||
* Unknown media size in portrait mode.
|
* Unknown media size in portrait mode.
|
||||||
* <p>
|
* <p>
|
||||||
* <strong>Note: </strong>This is for specifying orientation without media
|
* <strong>Note: </strong>This is for specifying orientation without media
|
||||||
* size. You should not use the dimensions reported by this class.
|
* size. You should not use the dimensions reported by this instance.
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
public static final MediaSize UNKNOWN_PORTRAIT =
|
public static final MediaSize UNKNOWN_PORTRAIT =
|
||||||
@@ -288,7 +292,7 @@ public final class PrintAttributes implements Parcelable {
|
|||||||
* Unknown media size in landscape mode.
|
* Unknown media size in landscape mode.
|
||||||
* <p>
|
* <p>
|
||||||
* <strong>Note: </strong>This is for specifying orientation without media
|
* <strong>Note: </strong>This is for specifying orientation without media
|
||||||
* size. You should not use the dimensions reported by this class.
|
* size. You should not use the dimensions reported by this instance.
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
public static final MediaSize UNKNOWN_LANDSCAPE =
|
public static final MediaSize UNKNOWN_LANDSCAPE =
|
||||||
@@ -615,9 +619,7 @@ public final class PrintAttributes implements Parcelable {
|
|||||||
private final int mHeightMils;
|
private final int mHeightMils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance. This is the preferred constructor since
|
* Creates a new instance.
|
||||||
* it enables the media size label to be shown in a localized fashion
|
|
||||||
* on a locale change.
|
|
||||||
*
|
*
|
||||||
* @param id The unique media size id.
|
* @param id The unique media size id.
|
||||||
* @param packageName The name of the creating package.
|
* @param packageName The name of the creating package.
|
||||||
@@ -625,10 +627,9 @@ public final class PrintAttributes implements Parcelable {
|
|||||||
* @param widthMils The width in mils (thousands of an inch).
|
* @param widthMils The width in mils (thousands of an inch).
|
||||||
* @param heightMils The height in mils (thousands of an inch).
|
* @param heightMils The height in mils (thousands of an inch).
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException If the id is empty.
|
* @throws IllegalArgumentException If the id is empty or the label
|
||||||
* @throws IllegalArgumentException If the label is empty.
|
* is empty or the widthMils is less than or equal to zero or the
|
||||||
* @throws IllegalArgumentException If the widthMils is less than or equal to zero.
|
* heightMils is less than or equal to zero.
|
||||||
* @throws IllegalArgumentException If the heightMils is less than or equal to zero.
|
|
||||||
*
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@@ -667,14 +668,13 @@ public final class PrintAttributes implements Parcelable {
|
|||||||
*
|
*
|
||||||
* @param id The unique media size id. It is unique amongst other media sizes
|
* @param id The unique media size id. It is unique amongst other media sizes
|
||||||
* supported by the printer.
|
* supported by the printer.
|
||||||
* @param label The <strong>internationalized</strong> human readable label.
|
* @param label The <strong>localized</strong> human readable label.
|
||||||
* @param widthMils The width in mils (thousands of an inch).
|
* @param widthMils The width in mils (thousands of an inch).
|
||||||
* @param heightMils The height in mils (thousands of an inch).
|
* @param heightMils The height in mils (thousands of an inch).
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException If the id is empty.
|
* @throws IllegalArgumentException If the id is empty or the label is empty
|
||||||
* @throws IllegalArgumentException If the label is empty.
|
* or the widthMils is less than or equal to zero or the heightMils is less
|
||||||
* @throws IllegalArgumentException If the widthMils is less than or equal to zero.
|
* than or equal to zero.
|
||||||
* @throws IllegalArgumentException If the heightMils is less than or equal to zero.
|
|
||||||
*/
|
*/
|
||||||
public MediaSize(String id, String label, int widthMils, int heightMils) {
|
public MediaSize(String id, String label, int widthMils, int heightMils) {
|
||||||
if (TextUtils.isEmpty(id)) {
|
if (TextUtils.isEmpty(id)) {
|
||||||
@@ -776,12 +776,16 @@ public final class PrintAttributes implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a new media size in a portrait orientation
|
* Returns a new media size instance in a portrait orientation,
|
||||||
* which is the height is the greater dimension.
|
* which is the height is the greater dimension.
|
||||||
*
|
*
|
||||||
* @return New instance in landscape orientation.
|
* @return New instance in landscape orientation if this one
|
||||||
|
* is in landscape, otherwise this instance.
|
||||||
*/
|
*/
|
||||||
public MediaSize asPortrait() {
|
public MediaSize asPortrait() {
|
||||||
|
if (isPortrait()) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
return new MediaSize(mId, mLabel, mPackageName,
|
return new MediaSize(mId, mLabel, mPackageName,
|
||||||
Math.min(mWidthMils, mHeightMils),
|
Math.min(mWidthMils, mHeightMils),
|
||||||
Math.max(mWidthMils, mHeightMils),
|
Math.max(mWidthMils, mHeightMils),
|
||||||
@@ -789,12 +793,16 @@ public final class PrintAttributes implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a new media size in a landscape orientation
|
* Returns a new media size instance in a landscape orientation,
|
||||||
* which is the height is the lesser dimension.
|
* which is the height is the lesser dimension.
|
||||||
*
|
*
|
||||||
* @return New instance in landscape orientation.
|
* @return New instance in landscape orientation if this one
|
||||||
|
* is in portrait, otherwise this instance.
|
||||||
*/
|
*/
|
||||||
public MediaSize asLandscape() {
|
public MediaSize asLandscape() {
|
||||||
|
if (!isPortrait()) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
return new MediaSize(mId, mLabel, mPackageName,
|
return new MediaSize(mId, mLabel, mPackageName,
|
||||||
Math.max(mWidthMils, mHeightMils),
|
Math.max(mWidthMils, mHeightMils),
|
||||||
Math.min(mWidthMils, mHeightMils),
|
Math.min(mWidthMils, mHeightMils),
|
||||||
@@ -881,7 +889,7 @@ public final class PrintAttributes implements Parcelable {
|
|||||||
* This class specifies a supported resolution in DPI (dots per inch).
|
* This class specifies a supported resolution in DPI (dots per inch).
|
||||||
* Resolution defines how many points with different color can be placed
|
* Resolution defines how many points with different color can be placed
|
||||||
* on one inch in horizontal or vertical direction of the target media.
|
* on one inch in horizontal or vertical direction of the target media.
|
||||||
* For example, a printer with 600DIP can produce higher quality images
|
* For example, a printer with 600 DPI can produce higher quality images
|
||||||
* the one with 300 DPI resolution.
|
* the one with 300 DPI resolution.
|
||||||
*/
|
*/
|
||||||
public static final class Resolution {
|
public static final class Resolution {
|
||||||
@@ -895,14 +903,13 @@ public final class PrintAttributes implements Parcelable {
|
|||||||
*
|
*
|
||||||
* @param id The unique resolution id. It is unique amongst other resolutions
|
* @param id The unique resolution id. It is unique amongst other resolutions
|
||||||
* supported by the printer.
|
* supported by the printer.
|
||||||
* @param label The <strong>internationalized</strong> human readable label.
|
* @param label The <strong>localized</strong> human readable label.
|
||||||
* @param horizontalDpi The horizontal resolution in DPI (dots per inch).
|
* @param horizontalDpi The horizontal resolution in DPI (dots per inch).
|
||||||
* @param verticalDpi The vertical resolution in DPI (dots per inch).
|
* @param verticalDpi The vertical resolution in DPI (dots per inch).
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException If the id is empty.
|
* @throws IllegalArgumentException If the id is empty or the label is empty
|
||||||
* @throws IllegalArgumentException If the label is empty.
|
* or the horizontalDpi is less than or equal to zero or the verticalDpi is
|
||||||
* @throws IllegalArgumentException If the horizontalDpi is less than or equal to zero.
|
* less than or equal to zero.
|
||||||
* @throws IllegalArgumentException If the verticalDpi is less than or equal to zero.
|
|
||||||
*/
|
*/
|
||||||
public Resolution(String id, String label, int horizontalDpi, int verticalDpi) {
|
public Resolution(String id, String label, int horizontalDpi, int verticalDpi) {
|
||||||
if (TextUtils.isEmpty(id)) {
|
if (TextUtils.isEmpty(id)) {
|
||||||
|
|||||||
@@ -38,15 +38,46 @@ import android.os.ParcelFileDescriptor;
|
|||||||
* </li>
|
* </li>
|
||||||
* <li>
|
* <li>
|
||||||
* After every call to {@link #onLayout(PrintAttributes, PrintAttributes,
|
* After every call to {@link #onLayout(PrintAttributes, PrintAttributes,
|
||||||
* CancellationSignal, LayoutResultCallback, Bundle)}, you may get a call to
|
* CancellationSignal, LayoutResultCallback, Bundle)}, you <strong>may</strong> get
|
||||||
* {@link #onWrite(PageRange[], ParcelFileDescriptor, CancellationSignal, WriteResultCallback)}
|
* a call to {@link #onWrite(PageRange[], ParcelFileDescriptor, CancellationSignal,
|
||||||
* asking you to write a PDF file with the content for specific pages.
|
* WriteResultCallback)} asking you to write a PDF file with the content for
|
||||||
|
* specific pages.
|
||||||
* </li>
|
* </li>
|
||||||
* <li>
|
* <li>
|
||||||
* Finally, you will receive a call to {@link #onFinish()}. You can use this
|
* Finally, you will receive a call to {@link #onFinish()}. You can use this
|
||||||
* callback to release resources allocated in {@link #onStart()}.
|
* callback to release resources allocated in {@link #onStart()}.
|
||||||
* </li>
|
* </li>
|
||||||
* </ul>
|
* </ul>
|
||||||
|
* <p>
|
||||||
|
* The {@link #onStart()} callback is always the first call you will receive and
|
||||||
|
* is useful for doing one time setup or resource allocation before printing. You
|
||||||
|
* will not receive a subsequent call here.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* The {@link #onLayout(PrintAttributes, PrintAttributes, CancellationSignal,
|
||||||
|
* LayoutResultCallback, Bundle)} callback requires that you layout the content
|
||||||
|
* based on the current {@link PrintAttributes}. The execution of this method is
|
||||||
|
* not considered completed until you invoke one of the methods on the passed in
|
||||||
|
* callback instance. Hence, you will not receive a subsequent call to any other
|
||||||
|
* method of this class until the execution of this method is complete by invoking
|
||||||
|
* one of the callback methods.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* The {@link #onWrite(PageRange[], ParcelFileDescriptor, CancellationSignal,
|
||||||
|
* WriteResultCallback)} requires that you render and write the content of some
|
||||||
|
* pages to the provided destination. The execution of this method is not
|
||||||
|
* considered complete until you invoke one of the methods on the passed in
|
||||||
|
* callback instance. Hence, you will not receive a subsequent call to any other
|
||||||
|
* method of this class until the execution of this method is complete by invoking
|
||||||
|
* one of the callback methods. You will never receive a sequence of one or more
|
||||||
|
* calls to this method without a previous call to {@link #onLayout(PrintAttributes,
|
||||||
|
* PrintAttributes, CancellationSignal, LayoutResultCallback, Bundle)}.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* The {@link #onFinish()} callback is always the last call you will receive and
|
||||||
|
* is useful for doing one time cleanup or resource deallocation after printing.
|
||||||
|
* You will not receive a subsequent call here.
|
||||||
|
* </p>
|
||||||
* </p>
|
* </p>
|
||||||
* <h3>Implementation</h3>
|
* <h3>Implementation</h3>
|
||||||
* <p>
|
* <p>
|
||||||
@@ -54,7 +85,11 @@ import android.os.ParcelFileDescriptor;
|
|||||||
* of the work on an arbitrary thread. For example, if the printed content
|
* of the work on an arbitrary thread. For example, if the printed content
|
||||||
* does not depend on the UI state, i.e. on what is shown on the screen, then
|
* does not depend on the UI state, i.e. on what is shown on the screen, then
|
||||||
* you can offload the entire work on a dedicated thread, thus making your
|
* you can offload the entire work on a dedicated thread, thus making your
|
||||||
* application interactive while the print work is being performed.
|
* application interactive while the print work is being performed. Note that
|
||||||
|
* while your activity is covered by the system print UI and a user cannot
|
||||||
|
* interact with it, doing the printing work on the main application thread
|
||||||
|
* may affect the performance of your other application components as they
|
||||||
|
* are also executed on that thread.
|
||||||
* </p>
|
* </p>
|
||||||
* <p>
|
* <p>
|
||||||
* You can also do work on different threads, for example if you print UI
|
* You can also do work on different threads, for example if you print UI
|
||||||
@@ -64,7 +99,7 @@ import android.os.ParcelFileDescriptor;
|
|||||||
* This will ensure that the UI does not change while you are laying out the
|
* This will ensure that the UI does not change while you are laying out the
|
||||||
* printed content. Then you can handle {@link #onWrite(PageRange[], ParcelFileDescriptor,
|
* printed content. Then you can handle {@link #onWrite(PageRange[], ParcelFileDescriptor,
|
||||||
* CancellationSignal, WriteResultCallback)} and {@link #onFinish()} on another
|
* CancellationSignal, WriteResultCallback)} and {@link #onFinish()} on another
|
||||||
* thread. This will ensure that the UI is frozen for the minimal amount of
|
* thread. This will ensure that the main thread is busy for a minimal amount of
|
||||||
* time. Also this assumes that you will generate the printed content in
|
* time. Also this assumes that you will generate the printed content in
|
||||||
* {@link #onLayout(PrintAttributes, PrintAttributes, CancellationSignal,
|
* {@link #onLayout(PrintAttributes, PrintAttributes, CancellationSignal,
|
||||||
* LayoutResultCallback, Bundle)} which is not mandatory. If you use multiple
|
* LayoutResultCallback, Bundle)} which is not mandatory. If you use multiple
|
||||||
@@ -76,6 +111,12 @@ public abstract class PrintDocumentAdapter {
|
|||||||
/**
|
/**
|
||||||
* Extra: mapped to a boolean value that is <code>true</code> if
|
* Extra: mapped to a boolean value that is <code>true</code> if
|
||||||
* the current layout is for a print preview, <code>false</code> otherwise.
|
* the current layout is for a print preview, <code>false</code> otherwise.
|
||||||
|
* This extra is provided in the {@link Bundle} argument of the {@link
|
||||||
|
* #onLayout(PrintAttributes, PrintAttributes, CancellationSignal,
|
||||||
|
* LayoutResultCallback, Bundle)} callback.
|
||||||
|
*
|
||||||
|
* @see #onLayout(PrintAttributes, PrintAttributes, CancellationSignal,
|
||||||
|
* LayoutResultCallback, Bundle)
|
||||||
*/
|
*/
|
||||||
public static final String EXTRA_PRINT_PREVIEW = "EXTRA_PRINT_PREVIEW";
|
public static final String EXTRA_PRINT_PREVIEW = "EXTRA_PRINT_PREVIEW";
|
||||||
|
|
||||||
@@ -95,17 +136,20 @@ public abstract class PrintDocumentAdapter {
|
|||||||
* After you are done laying out, you <strong>must</strong> invoke: {@link
|
* After you are done laying out, you <strong>must</strong> invoke: {@link
|
||||||
* LayoutResultCallback#onLayoutFinished(PrintDocumentInfo, boolean)} with
|
* LayoutResultCallback#onLayoutFinished(PrintDocumentInfo, boolean)} with
|
||||||
* the last argument <code>true</code> or <code>false</code> depending on
|
* the last argument <code>true</code> or <code>false</code> depending on
|
||||||
* whether the layout changed the content or not, respectively; and {@link
|
* whether the layout changed the content or not, respectively; or {@link
|
||||||
* LayoutResultCallback#onLayoutFailed(CharSequence)}, if an error occurred.
|
* LayoutResultCallback#onLayoutFailed(CharSequence)}, if an error occurred;
|
||||||
* Note that you must call one of the methods of the given callback.
|
* or {@link LayoutResultCallback#onLayoutCancelled()} if layout was
|
||||||
|
* cancelled in a response to a cancellation request via the passed in
|
||||||
|
* {@link CancellationSignal}. Note that you <strong>must</strong> call one of
|
||||||
|
* the methods of the given callback for this method to be considered complete.
|
||||||
* </p>
|
* </p>
|
||||||
* <p>
|
* <p>
|
||||||
* <strong>Note:</strong> If the content is large and a layout will be
|
* <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
|
* performed, it is a good practice to schedule the work on a dedicated
|
||||||
* thread and register an observer in the provided {@link
|
* thread and register an observer in the provided {@link
|
||||||
* CancellationSignal} upon invocation of which you should stop the
|
* CancellationSignal} upon invocation of which you should stop the
|
||||||
* layout. The cancellation callback will not be made on the main
|
* layout. The cancellation callback <strong>will not</strong> be made on
|
||||||
* thread.
|
* the main thread.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @param oldAttributes The old print attributes.
|
* @param oldAttributes The old print attributes.
|
||||||
@@ -128,10 +172,12 @@ public abstract class PrintDocumentAdapter {
|
|||||||
* on the main thread.
|
* on the main thread.
|
||||||
*<p>
|
*<p>
|
||||||
* After you are done writing, you should close the file descriptor and
|
* After you are done writing, you should close the file descriptor and
|
||||||
* invoke {@link WriteResultCallback #onWriteFinished(PageRange[]), if writing
|
* invoke {@link WriteResultCallback#onWriteFinished(PageRange[])}, if writing
|
||||||
* completed successfully; or {@link WriteResultCallback#onWriteFailed(
|
* completed successfully; or {@link WriteResultCallback#onWriteFailed(
|
||||||
* CharSequence)}, if an error occurred. Note that you must call one of
|
* CharSequence)}, if an error occurred; or {@link WriteResultCallback#onWriteCancelled()},
|
||||||
* the methods of the given callback.
|
* if writing was cancelled in a response to a cancellation request via the passed
|
||||||
|
* in {@link CancellationSignal}. Note that you <strong>must</strong> call one of
|
||||||
|
* the methods of the given callback for this method to be considered complete.
|
||||||
* </p>
|
* </p>
|
||||||
* <p>
|
* <p>
|
||||||
* <strong>Note:</strong> If the printed content is large, it is a good
|
* <strong>Note:</strong> If the printed content is large, it is a good
|
||||||
@@ -178,7 +224,8 @@ public abstract class PrintDocumentAdapter {
|
|||||||
/**
|
/**
|
||||||
* Notifies that all the data was written.
|
* Notifies that all the data was written.
|
||||||
*
|
*
|
||||||
* @param pages The pages that were written. Cannot be null or empty.
|
* @param pages The pages that were written. Cannot be <code>null</code>
|
||||||
|
* or empty.
|
||||||
*/
|
*/
|
||||||
public void onWriteFinished(PageRange[] pages) {
|
public void onWriteFinished(PageRange[] pages) {
|
||||||
/* do nothing - stub */
|
/* do nothing - stub */
|
||||||
@@ -187,7 +234,8 @@ public abstract class PrintDocumentAdapter {
|
|||||||
/**
|
/**
|
||||||
* Notifies that an error occurred while writing the data.
|
* Notifies that an error occurred while writing the data.
|
||||||
*
|
*
|
||||||
* @param error Error message. May be null if error is unknown.
|
* @param error The <strong>localized</strong> error message.
|
||||||
|
* shown to the user. May be <code>null</code> if error is unknown.
|
||||||
*/
|
*/
|
||||||
public void onWriteFailed(CharSequence error) {
|
public void onWriteFailed(CharSequence error) {
|
||||||
/* do nothing - stub */
|
/* do nothing - stub */
|
||||||
@@ -218,7 +266,7 @@ public abstract class PrintDocumentAdapter {
|
|||||||
/**
|
/**
|
||||||
* Notifies that the layout finished and whether the content changed.
|
* Notifies that the layout finished and whether the content changed.
|
||||||
*
|
*
|
||||||
* @param info An info object describing the document. Cannot be null.
|
* @param info An info object describing the document. Cannot be <code>null</code>.
|
||||||
* @param changed Whether the layout changed.
|
* @param changed Whether the layout changed.
|
||||||
*
|
*
|
||||||
* @see PrintDocumentInfo
|
* @see PrintDocumentInfo
|
||||||
@@ -230,7 +278,8 @@ public abstract class PrintDocumentAdapter {
|
|||||||
/**
|
/**
|
||||||
* Notifies that an error occurred while laying out the document.
|
* Notifies that an error occurred while laying out the document.
|
||||||
*
|
*
|
||||||
* @param error Error message. May be null if error is unknown.
|
* @param error The <strong>localized</strong> error message.
|
||||||
|
* shown to the user. May be <code>null</code> if error is unknown.
|
||||||
*/
|
*/
|
||||||
public void onLayoutFailed(CharSequence error) {
|
public void onLayoutFailed(CharSequence error) {
|
||||||
/* do nothing - stub */
|
/* do nothing - stub */
|
||||||
|
|||||||
@@ -21,12 +21,56 @@ import android.os.Parcelable;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class encapsulates information about a printed document.
|
* This class encapsulates information about a document for printing
|
||||||
|
* purposes. This meta-data is used by the platform and print services,
|
||||||
|
* components that interact with printers. For example, this class
|
||||||
|
* contains the number of pages contained in the document it describes and
|
||||||
|
* this number of pages is shown to the user allowing him/her to select
|
||||||
|
* the range to print. Also a print service may optimize the printing
|
||||||
|
* process based on the content type, such as document or photo.
|
||||||
|
* <p>
|
||||||
|
* Instances of this class are created by the printing application and
|
||||||
|
* passed to the {@link PrintDocumentAdapter.LayoutResultCallback#onLayoutFinished(
|
||||||
|
* PrintDocumentInfo, boolean) PrintDocumentAdapter.LayoutResultCallback.onLayoutFinished(
|
||||||
|
* PrintDocumentInfo, boolean)} callback after successfully laying out the
|
||||||
|
* content which is performed in {@link PrintDocumentAdapter#onLayout(PrintAttributes,
|
||||||
|
* PrintAttributes, android.os.CancellationSignal, PrintDocumentAdapter.LayoutResultCallback,
|
||||||
|
* android.os.Bundle) PrintDocumentAdapter.onLayout(PrintAttributes,
|
||||||
|
* PrintAttributes, android.os.CancellationSignal,
|
||||||
|
* PrintDocumentAdapter.LayoutResultCallback, android.os.Bundle)}.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* An example usage looks like this:
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* . . .
|
||||||
|
*
|
||||||
|
* public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes,
|
||||||
|
* CancellationSignal cancellationSignal, LayoutResultCallback callback,
|
||||||
|
* Bundle metadata) {
|
||||||
|
*
|
||||||
|
* // Assume the app defined a LayoutResult class which contains
|
||||||
|
* // the layout result data and that the content is a document.
|
||||||
|
* LayoutResult result = doSomeLayoutWork();
|
||||||
|
*
|
||||||
|
* PrintDocumentInfo info = new PrintDocumentInfo
|
||||||
|
* .Builder("printed_file.pdf")
|
||||||
|
* .setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
|
||||||
|
* .setPageCount(result.getPageCount())
|
||||||
|
* .build();
|
||||||
|
*
|
||||||
|
* callback.onLayoutFinished(info, result.getContentChanged());
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* . . .
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public final class PrintDocumentInfo implements Parcelable {
|
public final class PrintDocumentInfo implements Parcelable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constant for unknown page count..
|
* Constant for unknown page count.
|
||||||
*/
|
*/
|
||||||
public static final int PAGE_COUNT_UNKNOWN = -1;
|
public static final int PAGE_COUNT_UNKNOWN = -1;
|
||||||
|
|
||||||
@@ -37,11 +81,23 @@ public final class PrintDocumentInfo implements Parcelable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Content type: document.
|
* Content type: document.
|
||||||
|
* <p>
|
||||||
|
* A print service may use normal paper to print the content instead
|
||||||
|
* of dedicated photo paper. Also it may use a lower quality printing
|
||||||
|
* process as the content is not as sensitive to print quality variation
|
||||||
|
* as a photo is.
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public static final int CONTENT_TYPE_DOCUMENT = 0;
|
public static final int CONTENT_TYPE_DOCUMENT = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Content type: photo.
|
* Content type: photo.
|
||||||
|
* <p>
|
||||||
|
* A print service may use dedicated photo paper to print the content
|
||||||
|
* instead of normal paper. Also it may use a higher quality printing
|
||||||
|
* process as the content is more sensitive to print quality variation
|
||||||
|
* than a document.
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public static final int CONTENT_TYPE_PHOTO = 1;
|
public static final int CONTENT_TYPE_PHOTO = 1;
|
||||||
|
|
||||||
@@ -82,7 +138,8 @@ public final class PrintDocumentInfo implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the document name.
|
* Gets the document name. This name may be shown to
|
||||||
|
* the user.
|
||||||
*
|
*
|
||||||
* @return The document name.
|
* @return The document name.
|
||||||
*/
|
*/
|
||||||
@@ -213,20 +270,23 @@ public final class PrintDocumentInfo implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builder for creating an {@link PrintDocumentInfo}.
|
* Builder for creating a {@link PrintDocumentInfo}.
|
||||||
*/
|
*/
|
||||||
public static final class Builder {
|
public static final class Builder {
|
||||||
private final PrintDocumentInfo mPrototype;
|
private final PrintDocumentInfo mPrototype;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* The values of the relevant properties are initialized with default
|
* The values of the relevant properties are initialized with defaults.
|
||||||
* values. Please refer to the documentation of the individual setters
|
* Please refer to the documentation of the individual setters for
|
||||||
* for information about the default values.
|
* information about the default values.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @param name The document name. Cannot be empty.
|
* @param name The document name which may be shown to the user and
|
||||||
|
* is the file name if the content it describes is saved as a PDF.
|
||||||
|
* Cannot be empty.
|
||||||
*/
|
*/
|
||||||
public Builder(String name) {
|
public Builder(String name) {
|
||||||
if (TextUtils.isEmpty(name)) {
|
if (TextUtils.isEmpty(name)) {
|
||||||
|
|||||||
@@ -17,8 +17,13 @@
|
|||||||
package android.print;
|
package android.print;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class represents a print job from the perspective of
|
* This class represents a print job from the perspective of an
|
||||||
* an application.
|
* application. It contains behavior methods for performing operations
|
||||||
|
* on it as well as methods for querying its state. A snapshot of the
|
||||||
|
* print job state is represented by the {@link PrintJobInfo} class.
|
||||||
|
* The state of a print job may change over time. An application receives
|
||||||
|
* instances of this class when creating a print job or querying for
|
||||||
|
* its print jobs.
|
||||||
*/
|
*/
|
||||||
public final class PrintJob {
|
public final class PrintJob {
|
||||||
|
|
||||||
@@ -145,11 +150,12 @@ public final class PrintJob {
|
|||||||
/**
|
/**
|
||||||
* Gets whether this print job is failed. Such a print job is
|
* Gets whether this print job is failed. Such a print job is
|
||||||
* not successfully printed due to an error. You can request
|
* not successfully printed due to an error. You can request
|
||||||
* a restart via {@link #restart()}.
|
* a restart via {@link #restart()} or cancel via {@link #cancel()}.
|
||||||
*
|
*
|
||||||
* @return Whether the print job is failed.
|
* @return Whether the print job is failed.
|
||||||
*
|
*
|
||||||
* @see #restart()
|
* @see #restart()
|
||||||
|
* @see #cancel()
|
||||||
*/
|
*/
|
||||||
public boolean isFailed() {
|
public boolean isFailed() {
|
||||||
return getInfo().getState() == PrintJobInfo.STATE_FAILED;
|
return getInfo().getState() == PrintJobInfo.STATE_FAILED;
|
||||||
|
|||||||
@@ -22,7 +22,10 @@ import android.os.Parcelable;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class represents the description of a print job.
|
* This class represents the description of a print job. The print job
|
||||||
|
* state includes properties such as its id, print attributes used for
|
||||||
|
* generating the content, and so on. Note that the print jobs state may
|
||||||
|
* change over time and this class represents a snapshot of this state.
|
||||||
*/
|
*/
|
||||||
public final class PrintJobInfo implements Parcelable {
|
public final class PrintJobInfo implements Parcelable {
|
||||||
|
|
||||||
@@ -93,7 +96,7 @@ public final class PrintJobInfo implements Parcelable {
|
|||||||
public static final int STATE_BLOCKED = 4;
|
public static final int STATE_BLOCKED = 4;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print job state: The print job was successfully printed.
|
* Print job state: The print job is successfully printed.
|
||||||
* This is a terminal state.
|
* This is a terminal state.
|
||||||
* <p>
|
* <p>
|
||||||
* Next valid states: None
|
* Next valid states: None
|
||||||
@@ -103,15 +106,14 @@ public final class PrintJobInfo implements Parcelable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Print job state: The print job was printing but printing failed.
|
* Print job state: The print job was printing but printing failed.
|
||||||
* This is a terminal state.
|
|
||||||
* <p>
|
* <p>
|
||||||
* Next valid states: None
|
* Next valid states: {@link #STATE_CANCELED}, {@link #STATE_STARTED}
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
public static final int STATE_FAILED = 6;
|
public static final int STATE_FAILED = 6;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print job state: The print job was canceled.
|
* Print job state: The print job is canceled.
|
||||||
* This is a terminal state.
|
* This is a terminal state.
|
||||||
* <p>
|
* <p>
|
||||||
* Next valid states: None
|
* Next valid states: None
|
||||||
@@ -297,6 +299,14 @@ public final class PrintJobInfo implements Parcelable {
|
|||||||
* Gets the current job state.
|
* Gets the current job state.
|
||||||
*
|
*
|
||||||
* @return The job state.
|
* @return The job state.
|
||||||
|
*
|
||||||
|
* @see #STATE_CREATED
|
||||||
|
* @see #STATE_QUEUED
|
||||||
|
* @see #STATE_STARTED
|
||||||
|
* @see #STATE_COMPLETED
|
||||||
|
* @see #STATE_BLOCKED
|
||||||
|
* @see #STATE_FAILED
|
||||||
|
* @see #STATE_CANCELED
|
||||||
*/
|
*/
|
||||||
public int getState() {
|
public int getState() {
|
||||||
return mState;
|
return mState;
|
||||||
@@ -611,7 +621,7 @@ public final class PrintJobInfo implements Parcelable {
|
|||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param prototype Prototype to use as a starting point.
|
* @param prototype Prototype to use as a starting point.
|
||||||
* Can be null.
|
* Can be <code>null</code>.
|
||||||
*/
|
*/
|
||||||
public Builder(PrintJobInfo prototype) {
|
public Builder(PrintJobInfo prototype) {
|
||||||
mPrototype = (prototype != null)
|
mPrototype = (prototype != null)
|
||||||
|
|||||||
@@ -55,6 +55,49 @@ import java.util.Map;
|
|||||||
* PrintManager printManager =
|
* PrintManager printManager =
|
||||||
* (PrintManager) context.getSystemService(Context.PRINT_SERVICE);
|
* (PrintManager) context.getSystemService(Context.PRINT_SERVICE);
|
||||||
* </pre>
|
* </pre>
|
||||||
|
*
|
||||||
|
* <h3>Print mechanics</h3>
|
||||||
|
* <p>
|
||||||
|
* The key idea behind printing on the platform is that the content to be printed
|
||||||
|
* should be laid out for the currently selected print options resulting in an
|
||||||
|
* optimized output and higher user satisfaction. To achieve this goal the platform
|
||||||
|
* declares a contract that the printing application has to follow which is defined
|
||||||
|
* by the {@link PrintDocumentAdapter} class. At a higher level the contract is that
|
||||||
|
* when the user selects some options from the print UI that may affect the way
|
||||||
|
* content is laid out, for example page size, the application receives a callback
|
||||||
|
* allowing it to layout the content to better fit these new constraints. After a
|
||||||
|
* layout pass the system may ask the application to render one or more pages one
|
||||||
|
* or more times. For example, an application may produce a single column list for
|
||||||
|
* smaller page sizes and a multi-column table for larger page sizes.
|
||||||
|
* </p>
|
||||||
|
* <h3>Print jobs</h3>
|
||||||
|
* <p>
|
||||||
|
* Print jobs are started by calling the {@link #print(String, PrintDocumentAdapter,
|
||||||
|
* PrintAttributes)} from an activity which results in bringing up the system print
|
||||||
|
* UI. Once the print UI is up, when the user changes a selected print option that
|
||||||
|
* affects the way content is laid out the system starts to interact with the
|
||||||
|
* application following the mechanics described the section above.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Print jobs can be in {@link PrintJobInfo#STATE_CREATED created}, {@link
|
||||||
|
* PrintJobInfo#STATE_QUEUED queued}, {@link PrintJobInfo#STATE_STARTED started},
|
||||||
|
* {@link PrintJobInfo#STATE_BLOCKED blocked}, {@link PrintJobInfo#STATE_COMPLETED
|
||||||
|
* completed}, {@link PrintJobInfo#STATE_FAILED failed}, and {@link
|
||||||
|
* PrintJobInfo#STATE_CANCELED canceled} state. Print jobs are stored in dedicated
|
||||||
|
* system spooler until they are handled which is they are cancelled or completed.
|
||||||
|
* Active print jobs, ones that are not cancelled or completed, are considered failed
|
||||||
|
* if the device reboots as the new boot may be after a very long time. The user may
|
||||||
|
* choose to restart such print jobs. Once a print job is queued all relevant content
|
||||||
|
* is stored in the system spooler and its lifecycle becomes detached from this of
|
||||||
|
* the application that created it.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* An applications can query the print spooler for current print jobs it created
|
||||||
|
* but not print jobs created by other applications.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @see PrintJob
|
||||||
|
* @see PrintJobInfo
|
||||||
*/
|
*/
|
||||||
public final class PrintManager {
|
public final class PrintManager {
|
||||||
|
|
||||||
@@ -292,20 +335,54 @@ public final class PrintManager {
|
|||||||
/**
|
/**
|
||||||
* Creates a print job for printing a {@link PrintDocumentAdapter} with
|
* Creates a print job for printing a {@link PrintDocumentAdapter} with
|
||||||
* default print attributes.
|
* default print attributes.
|
||||||
|
* <p>
|
||||||
|
* Calling this method brings the print UI allowing the user to customize
|
||||||
|
* the print job and returns a {@link PrintJob} object without waiting for the
|
||||||
|
* user to customize or confirm the print job. The returned print job instance
|
||||||
|
* is in a {@link PrintJobInfo#STATE_CREATED created} state.
|
||||||
|
* <p>
|
||||||
|
* This method can be called only from an {@link Activity}. The rationale is that
|
||||||
|
* printing from a service will create an inconsistent user experience as the print
|
||||||
|
* UI would appear without any context.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Also the passed in {@link PrintDocumentAdapter} will be considered invalid if
|
||||||
|
* your activity is finished. The rationale is that once the activity that
|
||||||
|
* initiated printing is finished, the provided adapter may be in an inconsistent
|
||||||
|
* state as it may depend on the UI presented by the activity.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* The default print attributes are a hint to the system how the data is to
|
||||||
|
* be printed. For example, a photo editor may look at the photo aspect ratio
|
||||||
|
* to determine the default orientation and provide a hint whether the printing
|
||||||
|
* should be in portrait or landscape. The system will do a best effort to
|
||||||
|
* selected the hinted options in the print dialog, given the current printer
|
||||||
|
* supports them.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param printJobName A name for the new print job.
|
* @param printJobName A name for the new print job which is shown to the user.
|
||||||
* @param documentAdapter An adapter that emits the document to print.
|
* @param documentAdapter An adapter that emits the document to print.
|
||||||
* @param attributes The default print job attributes.
|
* @param attributes The default print job attributes or <code>null</code>.
|
||||||
* @return The created print job on success or null on failure.
|
* @return The created print job on success or null on failure.
|
||||||
|
* @throws IllegalStateException If not called from an {@link Activity}.
|
||||||
|
* @throws IllegalArgumentException If the print job name is empty or the
|
||||||
|
* document adapter is null.
|
||||||
|
*
|
||||||
* @see PrintJob
|
* @see PrintJob
|
||||||
*/
|
*/
|
||||||
public PrintJob print(String printJobName, PrintDocumentAdapter documentAdapter,
|
public PrintJob print(String printJobName, PrintDocumentAdapter documentAdapter,
|
||||||
PrintAttributes attributes) {
|
PrintAttributes attributes) {
|
||||||
|
if (!(mContext instanceof Activity)) {
|
||||||
|
throw new IllegalStateException("Can print only from an activity");
|
||||||
|
}
|
||||||
if (TextUtils.isEmpty(printJobName)) {
|
if (TextUtils.isEmpty(printJobName)) {
|
||||||
throw new IllegalArgumentException("priintJobName cannot be empty");
|
throw new IllegalArgumentException("printJobName cannot be empty");
|
||||||
|
}
|
||||||
|
if (documentAdapter == null) {
|
||||||
|
throw new IllegalArgumentException("documentAdapter cannot be null");
|
||||||
}
|
}
|
||||||
PrintDocumentAdapterDelegate delegate = new PrintDocumentAdapterDelegate(
|
PrintDocumentAdapterDelegate delegate = new PrintDocumentAdapterDelegate(
|
||||||
mContext, documentAdapter);
|
(Activity) mContext, documentAdapter);
|
||||||
try {
|
try {
|
||||||
Bundle result = mService.print(printJobName, delegate,
|
Bundle result = mService.print(printJobName, delegate,
|
||||||
attributes, mContext.getPackageName(), mAppId, mUserId);
|
attributes, mContext.getPackageName(), mAppId, mUserId);
|
||||||
@@ -398,12 +475,9 @@ public final class PrintManager {
|
|||||||
|
|
||||||
private boolean mDestroyed;
|
private boolean mDestroyed;
|
||||||
|
|
||||||
public PrintDocumentAdapterDelegate(Context context,
|
public PrintDocumentAdapterDelegate(Activity activity,
|
||||||
PrintDocumentAdapter documentAdapter) {
|
PrintDocumentAdapter documentAdapter) {
|
||||||
if (!(context instanceof Activity)) {
|
mActivity = activity;
|
||||||
throw new IllegalStateException("Can print only from an activity");
|
|
||||||
}
|
|
||||||
mActivity = (Activity) context;
|
|
||||||
mDocumentAdapter = documentAdapter;
|
mDocumentAdapter = documentAdapter;
|
||||||
mHandler = new MyHandler(mActivity.getMainLooper());
|
mHandler = new MyHandler(mActivity.getMainLooper());
|
||||||
mActivity.getApplication().registerActivityLifecycleCallbacks(this);
|
mActivity.getApplication().registerActivityLifecycleCallbacks(this);
|
||||||
|
|||||||
@@ -24,10 +24,17 @@ import android.print.PrintAttributes.Resolution;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class represents the capabilities of a printer.
|
* This class represents the capabilities of a printer. Instances
|
||||||
|
* of this class are created by a print service to report the
|
||||||
|
* capabilities of a printer it manages. The capabilities of a
|
||||||
|
* printer specify how it can print content. For example, what
|
||||||
|
* are the media sizes supported by the printer, what are the
|
||||||
|
* minimal margins of the printer based on its technical design,
|
||||||
|
* etc.
|
||||||
*/
|
*/
|
||||||
public final class PrinterCapabilitiesInfo implements Parcelable {
|
public final class PrinterCapabilitiesInfo implements Parcelable {
|
||||||
/**
|
/**
|
||||||
@@ -112,7 +119,7 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
|
|||||||
* @return The media sizes.
|
* @return The media sizes.
|
||||||
*/
|
*/
|
||||||
public List<MediaSize> getMediaSizes() {
|
public List<MediaSize> getMediaSizes() {
|
||||||
return mMediaSizes;
|
return Collections.unmodifiableList(mMediaSizes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -121,7 +128,7 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
|
|||||||
* @return The resolutions.
|
* @return The resolutions.
|
||||||
*/
|
*/
|
||||||
public List<Resolution> getResolutions() {
|
public List<Resolution> getResolutions() {
|
||||||
return mResolutions;
|
return Collections.unmodifiableList(mResolutions);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -135,9 +142,9 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the supported color modes.
|
* Gets the bit mask of supported color modes.
|
||||||
*
|
*
|
||||||
* @return The color modes.
|
* @return The bit mask of supported color modes.
|
||||||
*
|
*
|
||||||
* @see PrintAttributes#COLOR_MODE_COLOR
|
* @see PrintAttributes#COLOR_MODE_COLOR
|
||||||
* @see PrintAttributes#COLOR_MODE_MONOCHROME
|
* @see PrintAttributes#COLOR_MODE_MONOCHROME
|
||||||
@@ -355,9 +362,10 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builder for creating of a {@link PrinterInfo}. This class is responsible
|
* Builder for creating of a {@link PrinterCapabilitiesInfo}. This class is
|
||||||
* to enforce that all required attributes have at least one default value.
|
* responsible to enforce that all required attributes have at least one
|
||||||
* In other words, this class creates only well-formed {@link PrinterInfo}s.
|
* default value. In other words, this class creates only well-formed {@link
|
||||||
|
* PrinterCapabilitiesInfo}s.
|
||||||
* <p>
|
* <p>
|
||||||
* Look at the individual methods for a reference whether a property is
|
* Look at the individual methods for a reference whether a property is
|
||||||
* required or if it is optional.
|
* required or if it is optional.
|
||||||
@@ -369,9 +377,9 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
|
|||||||
/**
|
/**
|
||||||
* Creates a new instance.
|
* Creates a new instance.
|
||||||
*
|
*
|
||||||
* @param printerId The printer id. Cannot be null.
|
* @param printerId The printer id. Cannot be <code>null</code>.
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException If the printer id is null.
|
* @throws IllegalArgumentException If the printer id is <code>null</code>.
|
||||||
*/
|
*/
|
||||||
public Builder(PrinterId printerId) {
|
public Builder(PrinterId printerId) {
|
||||||
if (printerId == null) {
|
if (printerId == null) {
|
||||||
@@ -492,7 +500,7 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Crates a new {@link PrinterCapabilitiesInfo} enforcing that all
|
* Crates a new {@link PrinterCapabilitiesInfo} enforcing that all
|
||||||
* required properties have need specified. See individual methods
|
* required properties have been specified. See individual methods
|
||||||
* in this class for reference about required attributes.
|
* in this class for reference about required attributes.
|
||||||
*
|
*
|
||||||
* @return A new {@link PrinterCapabilitiesInfo}.
|
* @return A new {@link PrinterCapabilitiesInfo}.
|
||||||
@@ -521,7 +529,7 @@ public final class PrinterCapabilitiesInfo implements Parcelable {
|
|||||||
if (mPrototype.mMinMargins == null) {
|
if (mPrototype.mMinMargins == null) {
|
||||||
throw new IllegalArgumentException("margins cannot be null");
|
throw new IllegalArgumentException("margins cannot be null");
|
||||||
}
|
}
|
||||||
return new PrinterCapabilitiesInfo(mPrototype);
|
return mPrototype;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void throwIfDefaultAlreadySpecified(int propertyIndex) {
|
private void throwIfDefaultAlreadySpecified(int propertyIndex) {
|
||||||
|
|||||||
@@ -21,7 +21,12 @@ import android.os.Parcelable;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class represents the description of a printer.
|
* This class represents the description of a printer. Instances of
|
||||||
|
* this class are created by print services to report to the system
|
||||||
|
* the printers they manage. The information of this class has two
|
||||||
|
* major components, printer properties such as name, id, status,
|
||||||
|
* description and printer capabilities which describe the various
|
||||||
|
* print modes a printer supports such as media sizes, margins, etc.
|
||||||
*/
|
*/
|
||||||
public final class PrinterInfo implements Parcelable {
|
public final class PrinterInfo implements Parcelable {
|
||||||
|
|
||||||
@@ -96,6 +101,10 @@ public final class PrinterInfo implements Parcelable {
|
|||||||
* Gets the printer status.
|
* Gets the printer status.
|
||||||
*
|
*
|
||||||
* @return The status.
|
* @return The status.
|
||||||
|
*
|
||||||
|
* @see #STATUS_BUSY
|
||||||
|
* @see #STATUS_IDLE
|
||||||
|
* @see #STATUS_UNAVAILABLE
|
||||||
*/
|
*/
|
||||||
public int getStatus() {
|
public int getStatus() {
|
||||||
return mStatus;
|
return mStatus;
|
||||||
@@ -216,6 +225,8 @@ public final class PrinterInfo implements Parcelable {
|
|||||||
* @param printerId The printer id. Cannot be null.
|
* @param printerId The printer id. Cannot be null.
|
||||||
* @param name The printer name. Cannot be empty.
|
* @param name The printer name. Cannot be empty.
|
||||||
* @param status The printer status. Must be a valid status.
|
* @param status The printer status. Must be a valid status.
|
||||||
|
* @throws IllegalArgumentException If the printer id is null, or the
|
||||||
|
* printer name is empty or the status is not a valid one.
|
||||||
*/
|
*/
|
||||||
public Builder(PrinterId printerId, String name, int status) {
|
public Builder(PrinterId printerId, String name, int status) {
|
||||||
if (printerId == null) {
|
if (printerId == null) {
|
||||||
@@ -259,7 +270,8 @@ public final class PrinterInfo implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the printer name.
|
* Sets the <strong>localized</strong> printer name which
|
||||||
|
* is shown to the user
|
||||||
*
|
*
|
||||||
* @param name The name.
|
* @param name The name.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
@@ -270,7 +282,8 @@ public final class PrinterInfo implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the printer description.
|
* Sets the <strong>localized</strong> printer description
|
||||||
|
* which is shown to the user
|
||||||
*
|
*
|
||||||
* @param description The description.
|
* @param description The description.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
@@ -292,12 +305,12 @@ public final class PrinterInfo implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Crates a new {@link PrinterInfo}.
|
* Creates a new {@link PrinterInfo}.
|
||||||
*
|
*
|
||||||
* @return A new {@link PrinterInfo}.
|
* @return A new {@link PrinterInfo}.
|
||||||
*/
|
*/
|
||||||
public PrinterInfo build() {
|
public PrinterInfo build() {
|
||||||
return new PrinterInfo(mPrototype);
|
return mPrototype;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isValidStatus(int status) {
|
private boolean isValidStatus(int status) {
|
||||||
|
|||||||
46
core/java/android/print/package.html
Normal file
46
core/java/android/print/package.html
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<HTML>
|
||||||
|
<BODY>
|
||||||
|
<h3>Overview</h3>
|
||||||
|
<p>
|
||||||
|
Provides classes for implementing print support in applications and also contains all
|
||||||
|
base classes and abstractions involved in printing. These base classes are also used
|
||||||
|
by other more specialized printing related packages.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The entry point for interacting with the print system is the {@link android.print.PrintManager}
|
||||||
|
which is a system service that can be obtained from the current context. The print manager
|
||||||
|
provides APIs for printing, querying the state of print jobs, etc.
|
||||||
|
<p/>
|
||||||
|
<h3>Print contract</h3>
|
||||||
|
<p>
|
||||||
|
An application that wants to implement printing must extend
|
||||||
|
{@link android.print.PrintDocumentAdapter} which defines the contract between the system
|
||||||
|
and the application.The key idea behind this adapter is that the printed content may change
|
||||||
|
based on the selected print options, such as media size, orientation, which
|
||||||
|
requires the content to be re-laid out. The constraints according to which the content has
|
||||||
|
to be laid out are encapsulated in the {@link android.print.PrintAttributes} class. Once
|
||||||
|
layout is completed the application calls back to the system passing a
|
||||||
|
{@link android.print.PrintDocumentInfo} instance which describes the generated content. After
|
||||||
|
the content has been laid out the application may be asked to render some pages of that content
|
||||||
|
for preview or printing. The range of pages that have to be rendered is abstracted by the
|
||||||
|
{@link android.print.PageRange} class.
|
||||||
|
</p>
|
||||||
|
<h3>Print jobs</h3>
|
||||||
|
<p>
|
||||||
|
A print job is represented by the {@link android.print.PrintJob} class which has behavior
|
||||||
|
methods as well as methods for querying its state. Each print job has a unique id represented
|
||||||
|
by the {@link android.print.PrintJobId} class and exposes APIs for obtaining a {@link
|
||||||
|
android.print.PrintJobInfo} which is a snapshot of its state. The print job state may
|
||||||
|
change over time.
|
||||||
|
</p>
|
||||||
|
<h3>Printers</h3>
|
||||||
|
<p>
|
||||||
|
An available printer represented by the {@link android.print.PrinterInfo} class has a
|
||||||
|
unique id which is abstracted by the {@link android.print.PrinterId} class. The {@link
|
||||||
|
android.print.PrinterInfo} contains printer properties such as id, name, description, status,
|
||||||
|
and printer capabilities encapsulated in the {@link android.print.PrinterCapabilitiesInfo}
|
||||||
|
class. Printer capabilities describe how a printer can print content, for example what are
|
||||||
|
the supported media sizes, color modes, resolutions, etc.
|
||||||
|
<p>
|
||||||
|
</BODY>
|
||||||
|
</HTML>
|
||||||
@@ -621,7 +621,7 @@ public class PrintJobConfigActivity extends Activity {
|
|||||||
.getPrintJobInfo(mPrintJobId, PrintManager.APP_ID_ANY);
|
.getPrintJobInfo(mPrintJobId, PrintManager.APP_ID_ANY);
|
||||||
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
|
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
|
||||||
intent.setType("application/pdf");
|
intent.setType("application/pdf");
|
||||||
intent.putExtra(Intent.EXTRA_TITLE, printJob.getLabel());
|
intent.putExtra(Intent.EXTRA_TITLE, mDocument.info.getName());
|
||||||
intent.putExtra(DocumentsContract.EXTRA_PACKAGE_NAME, mCallingPackageName);
|
intent.putExtra(DocumentsContract.EXTRA_PACKAGE_NAME, mCallingPackageName);
|
||||||
startActivityForResult(intent, ACTIVITY_REQUEST_CREATE_FILE);
|
startActivityForResult(intent, ACTIVITY_REQUEST_CREATE_FILE);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user