/*
 * Copyright (C) 2013 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.printservice;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.print.PrintDocumentInfo;
import android.print.PrintJobId;
import android.util.Log;

import java.io.IOException;

This class represents a printed document from the perspective of a print service. It exposes APIs to query the document and obtain its data.

Note: All methods of this class must be executed on the main application thread.

/** * This class represents a printed document from the perspective of a print * service. It exposes APIs to query the document and obtain its data. * <p> * <strong>Note: </strong> All methods of this class must be executed on the * main application thread. * </p> */
public final class PrintDocument { private static final String LOG_TAG = "PrintDocument"; private final PrintJobId mPrintJobId; private final IPrintServiceClient mPrintServiceClient; private final PrintDocumentInfo mInfo; PrintDocument(PrintJobId printJobId, IPrintServiceClient printServiceClient, PrintDocumentInfo info) { mPrintJobId = printJobId; mPrintServiceClient = printServiceClient; mInfo = info; }
Gets the PrintDocumentInfo that describes this document.
Returns:The document info.
/** * Gets the {@link PrintDocumentInfo} that describes this document. * * @return The document info. */
public @NonNull PrintDocumentInfo getInfo() { PrintService.throwIfNotCalledOnMainThread(); return mInfo; }
Gets the data associated with this document.

Note: It is a responsibility of the client to open a stream to the returned file descriptor, fully read the data, and close the file descriptor.

Returns:A file descriptor for reading the data.
/** * Gets the data associated with this document. * <p> * <strong>Note: </strong> It is a responsibility of the client to open a * stream to the returned file descriptor, fully read the data, and close * the file descriptor. * </p> * * @return A file descriptor for reading the data. */
public @Nullable ParcelFileDescriptor getData() { PrintService.throwIfNotCalledOnMainThread(); ParcelFileDescriptor source = null; ParcelFileDescriptor sink = null; try { ParcelFileDescriptor[] fds = ParcelFileDescriptor.createPipe(); source = fds[0]; sink = fds[1]; mPrintServiceClient.writePrintJobData(sink, mPrintJobId); return source; } catch (IOException ioe) { Log.e(LOG_TAG, "Error calling getting print job data!", ioe); } catch (RemoteException re) { Log.e(LOG_TAG, "Error calling getting print job data!", re); } finally { if (sink != null) { try { sink.close(); } catch (IOException ioe) { /* ignore */ } } } return null; } }