Index: printing/android/java/src/org/chromium/printing/PrintDocumentAdapterWrapper.java |
diff --git a/printing/android/java/src/org/chromium/printing/PrintDocumentAdapterWrapper.java b/printing/android/java/src/org/chromium/printing/PrintDocumentAdapterWrapper.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1f1f27a757cad0de25f5ff99ad775dccaf8929b1 |
--- /dev/null |
+++ b/printing/android/java/src/org/chromium/printing/PrintDocumentAdapterWrapper.java |
@@ -0,0 +1,145 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.printing; |
+ |
+import android.os.Bundle; |
+import android.os.CancellationSignal; |
+import android.os.ParcelFileDescriptor; |
+import android.print.PageRange; |
+import android.print.PrintAttributes; |
+import android.print.PrintDocumentAdapter; |
+import android.print.PrintDocumentAdapter.LayoutResultCallback; |
+import android.print.PrintDocumentAdapter.WriteResultCallback; |
+import android.print.PrintDocumentInfo; |
+ |
+/** |
+ * Wrapper for {@link PrintDocumentAdapter} for easier testing. |
+ * |
+ * Normally, {@link PrintDocumentAdapter#LayoutResultCallback} and |
+ * {@link PrintDocumentAdapter#WriteResultCallback} don't have public constructors. This makes |
+ * it impossible to subclass them, which is required to emulate calls to |
+ * {@link PrintDocumentAdapter#onLayout} and {@link PrintDocumentAdapter#onWrite}. This class helps |
+ * bypassing the limitation. |
+ */ |
+public class PrintDocumentAdapterWrapper extends PrintDocumentAdapter { |
+ private PdfGenerator mPdfGenerator; |
+ |
+ public static interface PdfGenerator { |
+ void onStart(); |
+ void onLayout( |
+ PrintAttributes oldAttributes, |
+ PrintAttributes newAttributes, |
+ CancellationSignal cancellationSignal, |
+ PrintDocumentAdapterWrapper.LayoutResultCallbackWrapper callback, |
+ Bundle metadata); |
+ void onWrite( |
+ final PageRange[] ranges, |
+ final ParcelFileDescriptor destination, |
+ final CancellationSignal cancellationSignal, |
+ final PrintDocumentAdapterWrapper.WriteResultCallbackWrapper callback); |
+ void onFinish(); |
+ } |
+ |
+ public static interface LayoutResultCallbackWrapper { |
+ void onLayoutFinished(PrintDocumentInfo info, boolean changed); |
+ void onLayoutFailed(CharSequence error); |
+ void onLayoutCancelled(); |
+ } |
+ |
+ public static interface WriteResultCallbackWrapper { |
+ void onWriteFinished(PageRange[] pages); |
+ void onWriteFailed(CharSequence error); |
+ void onWriteCancelled(); |
+ } |
+ |
+ public static class LayoutResultCallbackWrapperImpl implements LayoutResultCallbackWrapper { |
+ private LayoutResultCallback mCallback = null; |
+ public LayoutResultCallbackWrapperImpl(LayoutResultCallback callback) { |
+ assert callback != null; |
+ mCallback = callback; |
+ } |
+ |
+ @Override |
+ public void onLayoutFinished(PrintDocumentInfo info, boolean changed) { |
+ mCallback.onLayoutFinished(info, changed); |
+ } |
+ |
+ @Override |
+ public void onLayoutFailed(CharSequence error) { |
+ mCallback.onLayoutFailed(error); |
+ } |
+ |
+ @Override |
+ public void onLayoutCancelled() { |
+ mCallback.onLayoutCancelled(); |
+ } |
+ } |
+ |
+ public static class WriteResultCallbackWrapperImpl implements WriteResultCallbackWrapper { |
+ private WriteResultCallback mCallback = null; |
+ public WriteResultCallbackWrapperImpl(WriteResultCallback callback) { |
+ assert callback != null; |
+ mCallback = callback; |
+ } |
+ |
+ @Override |
+ public void onWriteFinished(PageRange[] pages) { |
+ mCallback.onWriteFinished(pages); |
+ } |
+ |
+ @Override |
+ public void onWriteFailed(CharSequence error) { |
+ mCallback.onWriteFailed(error); |
+ } |
+ |
+ @Override |
+ public void onWriteCancelled() { |
+ mCallback.onWriteCancelled(); |
+ } |
+ } |
+ |
+ public void setPdfGenerator(PdfGenerator pdfGenerator) { |
+ mPdfGenerator = pdfGenerator; |
+ } |
+ |
+ /** |
+ * Initiates the printing process within the framework |
+ */ |
+ public void print(PrintManagerDelegate printManager, String title) { |
+ printManager.print(title, this, null); |
+ } |
+ |
+ @Override |
+ public void onStart() { |
+ mPdfGenerator.onStart(); |
+ } |
+ |
+ @Override |
+ public void onLayout( |
+ PrintAttributes oldAttributes, |
+ PrintAttributes newAttributes, |
+ CancellationSignal cancellationSignal, |
+ LayoutResultCallback callback, |
+ Bundle metadata) { |
+ mPdfGenerator.onLayout(oldAttributes, newAttributes, cancellationSignal, |
+ new LayoutResultCallbackWrapperImpl(callback), metadata); |
+ } |
+ |
+ @Override |
+ public void onWrite( |
+ final PageRange[] ranges, |
+ final ParcelFileDescriptor destination, |
+ final CancellationSignal cancellationSignal, |
+ final WriteResultCallback callback) { |
+ mPdfGenerator.onWrite(ranges, destination, cancellationSignal, |
+ new WriteResultCallbackWrapperImpl(callback)); |
+ } |
+ |
+ @Override |
+ public void onFinish() { |
+ super.onFinish(); |
+ mPdfGenerator.onFinish(); |
+ } |
+} |