Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 17b7f6e6 authored by Svetoslav's avatar Svetoslav
Browse files

Clean up of the print APIs.

1. Fixed a case in which the onPrintCompleted callback may not be invoked.

2. Added string resulrces for the different error messages for failed
   printing in OnPrintCompletedCallback

3. Fixed the string comments for the MediaSize constants.

4. Added APIs to create certain print attributes by passing in a
   string label instead of resource and package name since in some cases
   a print service may be getting already internationalized lables
   or it may not know all possible values.

5. Fixed a crash in PrintJobConfigActivity if there is no input or
   output tray.

Change-Id: Ie877b7dc669051606394aa290e6d2b979a42db4c
parent 29b173ae
Loading
Loading
Loading
Loading
+44 −43
Original line number Diff line number Diff line
@@ -18498,54 +18498,55 @@ package android.print {
  }
  public static final class PrintAttributes.MediaSize {
    ctor public PrintAttributes.MediaSize(java.lang.String, java.lang.String, int, int, int);
    ctor public PrintAttributes.MediaSize(java.lang.String, java.lang.CharSequence, int, int);
    method public static android.print.PrintAttributes.MediaSize createMediaSize(android.content.pm.PackageManager, int);
    method public int getHeightMils();
    method public java.lang.String getId();
    method public java.lang.CharSequence getLabel(android.content.pm.PackageManager);
    method public java.lang.CharSequence getLabel();
    method public int getWidthMils();
    field public static final android.print.PrintAttributes.MediaSize ISO_A0;
    field public static final android.print.PrintAttributes.MediaSize ISO_A1;
    field public static final android.print.PrintAttributes.MediaSize ISO_A10;
    field public static final android.print.PrintAttributes.MediaSize ISO_A2;
    field public static final android.print.PrintAttributes.MediaSize ISO_A3;
    field public static final android.print.PrintAttributes.MediaSize ISO_A4;
    field public static final android.print.PrintAttributes.MediaSize ISO_A5;
    field public static final android.print.PrintAttributes.MediaSize ISO_A6;
    field public static final android.print.PrintAttributes.MediaSize ISO_A7;
    field public static final android.print.PrintAttributes.MediaSize ISO_A8;
    field public static final android.print.PrintAttributes.MediaSize ISO_A9;
    field public static final android.print.PrintAttributes.MediaSize ISO_B0;
    field public static final android.print.PrintAttributes.MediaSize ISO_B1;
    field public static final android.print.PrintAttributes.MediaSize ISO_B10;
    field public static final android.print.PrintAttributes.MediaSize ISO_B2;
    field public static final android.print.PrintAttributes.MediaSize ISO_B3;
    field public static final android.print.PrintAttributes.MediaSize ISO_B4;
    field public static final android.print.PrintAttributes.MediaSize ISO_B5;
    field public static final android.print.PrintAttributes.MediaSize ISO_B6;
    field public static final android.print.PrintAttributes.MediaSize ISO_B7;
    field public static final android.print.PrintAttributes.MediaSize ISO_B8;
    field public static final android.print.PrintAttributes.MediaSize ISO_B9;
    field public static final android.print.PrintAttributes.MediaSize ISO_C0;
    field public static final android.print.PrintAttributes.MediaSize ISO_C1;
    field public static final android.print.PrintAttributes.MediaSize ISO_C10;
    field public static final android.print.PrintAttributes.MediaSize ISO_C2;
    field public static final android.print.PrintAttributes.MediaSize ISO_C3;
    field public static final android.print.PrintAttributes.MediaSize ISO_C4;
    field public static final android.print.PrintAttributes.MediaSize ISO_C5;
    field public static final android.print.PrintAttributes.MediaSize ISO_C6;
    field public static final android.print.PrintAttributes.MediaSize ISO_C7;
    field public static final android.print.PrintAttributes.MediaSize ISO_C8;
    field public static final android.print.PrintAttributes.MediaSize ISO_C9;
    field public static final android.print.PrintAttributes.MediaSize NA_GOVT_LETTER;
    field public static final android.print.PrintAttributes.MediaSize NA_JUNIOR_LEGAL;
    field public static final android.print.PrintAttributes.MediaSize NA_LEDGER;
    field public static final android.print.PrintAttributes.MediaSize NA_LEGAL;
    field public static final android.print.PrintAttributes.MediaSize NA_LETTER;
    field public static final android.print.PrintAttributes.MediaSize NA_TBLOID;
    field public static final int ISO_A0 = 1; // 0x1
    field public static final int ISO_A1 = 2; // 0x2
    field public static final int ISO_A10 = 11; // 0xb
    field public static final int ISO_A2 = 3; // 0x3
    field public static final int ISO_A3 = 4; // 0x4
    field public static final int ISO_A4 = 5; // 0x5
    field public static final int ISO_A5 = 6; // 0x6
    field public static final int ISO_A6 = 7; // 0x7
    field public static final int ISO_A7 = 8; // 0x8
    field public static final int ISO_A8 = 9; // 0x9
    field public static final int ISO_A9 = 10; // 0xa
    field public static final int ISO_B0 = 100; // 0x64
    field public static final int ISO_B1 = 101; // 0x65
    field public static final int ISO_B10 = 110; // 0x6e
    field public static final int ISO_B2 = 102; // 0x66
    field public static final int ISO_B3 = 103; // 0x67
    field public static final int ISO_B4 = 104; // 0x68
    field public static final int ISO_B5 = 105; // 0x69
    field public static final int ISO_B6 = 106; // 0x6a
    field public static final int ISO_B7 = 107; // 0x6b
    field public static final int ISO_B8 = 108; // 0x6c
    field public static final int ISO_B9 = 109; // 0x6d
    field public static final int ISO_C0 = 200; // 0xc8
    field public static final int ISO_C1 = 201; // 0xc9
    field public static final int ISO_C10 = 210; // 0xd2
    field public static final int ISO_C2 = 202; // 0xca
    field public static final int ISO_C3 = 203; // 0xcb
    field public static final int ISO_C4 = 204; // 0xcc
    field public static final int ISO_C5 = 205; // 0xcd
    field public static final int ISO_C6 = 206; // 0xce
    field public static final int ISO_C7 = 207; // 0xcf
    field public static final int ISO_C8 = 208; // 0xd0
    field public static final int ISO_C9 = 209; // 0xd1
    field public static final int NA_GOVT_LETTER = 301; // 0x12d
    field public static final int NA_JUNIOR_LEGAL = 303; // 0x12f
    field public static final int NA_LEDGER = 304; // 0x130
    field public static final int NA_LEGAL = 302; // 0x12e
    field public static final int NA_LETTER = 300; // 0x12c
    field public static final int NA_TBLOID = 305; // 0x131
  }
  public static final class PrintAttributes.Resolution {
    ctor public PrintAttributes.Resolution(java.lang.String, java.lang.String, int, int, int);
    ctor public PrintAttributes.Resolution(java.lang.String, java.lang.CharSequence, int, int);
    method public int getHorizontalDpi();
    method public java.lang.String getId();
    method public java.lang.CharSequence getLabel(android.content.pm.PackageManager);
@@ -18553,7 +18554,7 @@ package android.print {
  }
  public static final class PrintAttributes.Tray {
    ctor public PrintAttributes.Tray(java.lang.String, java.lang.String, int);
    ctor public PrintAttributes.Tray(java.lang.String, java.lang.CharSequence);
    method public java.lang.String getId();
    method public java.lang.CharSequence getLabel(android.content.pm.PackageManager);
  }
+31 −19
Original line number Diff line number Diff line
@@ -16,11 +16,14 @@

package android.print;

import android.content.Context;
import android.os.AsyncTask;
import android.os.CancellationSignal;
import android.os.CancellationSignal.OnCancelListener;
import android.util.Log;

import com.android.internal.R;

import libcore.io.IoUtils;

import java.io.File;
@@ -40,14 +43,17 @@ final class FileDocumentAdapter extends PrintDocumentAdapter {

    private static final String LOG_TAG = "FileDocumentAdapter";

    private final Context mContext;

    private final File mFile;

    private WriteFileAsyncTask mWriteFileAsyncTask;

    public FileDocumentAdapter(File file) {
    public FileDocumentAdapter(Context context, File file) {
        if (file == null) {
            throw new IllegalArgumentException("File cannot be null!");
        }
        mContext = context;
        mFile = file;
    }

@@ -63,16 +69,12 @@ final class FileDocumentAdapter extends PrintDocumentAdapter {
    @Override
    public void onWrite(List<PageRange> pages, FileDescriptor destination,
            CancellationSignal cancellationSignal, WriteResultCallback callback) {
        mWriteFileAsyncTask = new WriteFileAsyncTask(mFile, destination, cancellationSignal,
                callback);
        mWriteFileAsyncTask = new WriteFileAsyncTask(destination, cancellationSignal, callback);
        mWriteFileAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
                (Void[]) null);
        
    }

    private static final class WriteFileAsyncTask extends AsyncTask<Void, Void, Void> {

        private final File mSource;
    private final class WriteFileAsyncTask extends AsyncTask<Void, Void, Void> {

        private final FileDescriptor mDestination;

@@ -80,9 +82,8 @@ final class FileDocumentAdapter extends PrintDocumentAdapter {

        private final CancellationSignal mCancellationSignal;

        public WriteFileAsyncTask(File source, FileDescriptor destination,
        public WriteFileAsyncTask(FileDescriptor destination,
                CancellationSignal cancellationSignal, WriteResultCallback callback) {
            mSource = source;
            mDestination = destination;
            mResultCallback = callback;
            mCancellationSignal = cancellationSignal;
@@ -100,8 +101,11 @@ final class FileDocumentAdapter extends PrintDocumentAdapter {
            OutputStream out = new FileOutputStream(mDestination);
            final byte[] buffer = new byte[8192];
            try {
                in = new FileInputStream(mSource);
                in = new FileInputStream(mFile);
                while (true) {
                    if (isCancelled()) {
                        break;
                    }
                    final int readByteCount = in.read(buffer);
                    if (readByteCount < 0) {
                        break;
@@ -110,18 +114,26 @@ final class FileDocumentAdapter extends PrintDocumentAdapter {
                }
             } catch (IOException ioe) {
                 Log.e(LOG_TAG, "Error writing data!", ioe);
                 mResultCallback.onWriteFailed(mContext.getString(
                         R.string.write_fail_reason_cannot_write));
             } finally {
                IoUtils.closeQuietly(in);
                IoUtils.closeQuietly(out);
                if (!isCancelled()) {
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            List<PageRange> pages = new ArrayList<PageRange>();
            pages.add(PageRange.ALL_PAGES);
            mResultCallback.onWriteFinished(pages);
                } else {
                    mResultCallback.onWriteFailed("Cancelled");
                }
        }
            return null;

        @Override
        protected void onCancelled(Void result) {
            mResultCallback.onWriteFailed(mContext.getString(
                    R.string.write_fail_reason_cancelled));
        }
    }
}
+579 −315

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -166,7 +166,7 @@ public final class PrintManager {
     * @see PrintJob
     */
    public PrintJob print(String printJobName, File pdfFile, PrintAttributes attributes) {
        FileDocumentAdapter documentAdapter = new FileDocumentAdapter(pdfFile);
        FileDocumentAdapter documentAdapter = new FileDocumentAdapter(mContext, pdfFile);
        return print(printJobName, documentAdapter, attributes);
    }

+6 −0
Original line number Diff line number Diff line
@@ -4251,6 +4251,11 @@
    <!-- North America Tabloid media (paper) size: 11" × 17" -->
    <string name="mediaSize_na_tabloid">Tabloid</string>

    <!-- Write fail reason: printing was cancelled.[CHAR LIMIT=none] -->
    <string name="write_fail_reason_cancelled">Cancelled</string>
    <!-- Write fail reason: couldn't write the printed content. [CHAR LIMIT=none] -->
    <string name="write_fail_reason_cannot_write">Error writing content</string>

    <!-- PIN creation dialog message [CHAR LIMIT=none] -->
    <string name="restr_pin_create_pin">Create a PIN for modifying restrictions</string>
    <!-- PIN entry dialog label for PIN [CHAR LIMIT=none] -->
@@ -4267,4 +4272,5 @@
        <item quantity="one">Incorrect PIN. Try again in 1 second.</item>
        <item quantity="other">Incorrect PIN. Try again in <xliff:g id="count">%d</xliff:g> seconds.</item>
    </plurals>

</resources>
Loading