Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(353)

Unified Diff: printing/android/java/src/org/chromium/printing/PrintDocumentAdapterWrapper.java

Issue 85693005: Android: refactors printing code & adds a test (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't run the test if the device doesn't have KitKat Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698