• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.printing;
6 
7 import android.os.Bundle;
8 import android.os.CancellationSignal;
9 import android.os.ParcelFileDescriptor;
10 import android.print.PageRange;
11 import android.print.PrintAttributes;
12 import android.print.PrintDocumentAdapter;
13 import android.print.PrintDocumentInfo;
14 
15 /**
16  * Wrapper for {@link PrintDocumentAdapter} for easier testing.
17  *
18  * Normally, {@link PrintDocumentAdapter#LayoutResultCallback} and
19  * {@link PrintDocumentAdapter#WriteResultCallback} don't have public constructors. This makes
20  * it impossible to subclass them, which is required to emulate calls to
21  * {@link PrintDocumentAdapter#onLayout} and {@link PrintDocumentAdapter#onWrite}. This class helps
22  * bypassing the limitation.
23  */
24 public class PrintDocumentAdapterWrapper extends PrintDocumentAdapter {
25     private PdfGenerator mPdfGenerator;
26 
27     public static interface PdfGenerator {
onStart()28         void onStart();
onLayout( PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, PrintDocumentAdapterWrapper.LayoutResultCallbackWrapper callback, Bundle metadata)29         void onLayout(
30                 PrintAttributes oldAttributes,
31                 PrintAttributes newAttributes,
32                 CancellationSignal cancellationSignal,
33                 PrintDocumentAdapterWrapper.LayoutResultCallbackWrapper callback,
34                 Bundle metadata);
onWrite( final PageRange[] ranges, final ParcelFileDescriptor destination, final CancellationSignal cancellationSignal, final PrintDocumentAdapterWrapper.WriteResultCallbackWrapper callback)35         void onWrite(
36                 final PageRange[] ranges,
37                 final ParcelFileDescriptor destination,
38                 final CancellationSignal cancellationSignal,
39                 final PrintDocumentAdapterWrapper.WriteResultCallbackWrapper callback);
onFinish()40         void onFinish();
41     }
42 
43     public static interface LayoutResultCallbackWrapper {
onLayoutFinished(PrintDocumentInfo info, boolean changed)44         void onLayoutFinished(PrintDocumentInfo info, boolean changed);
onLayoutFailed(CharSequence error)45         void onLayoutFailed(CharSequence error);
onLayoutCancelled()46         void onLayoutCancelled();
47     }
48 
49     public static interface WriteResultCallbackWrapper {
onWriteFinished(PageRange[] pages)50         void onWriteFinished(PageRange[] pages);
onWriteFailed(CharSequence error)51         void onWriteFailed(CharSequence error);
onWriteCancelled()52         void onWriteCancelled();
53     }
54 
55     public static class LayoutResultCallbackWrapperImpl implements LayoutResultCallbackWrapper {
56         private LayoutResultCallback mCallback = null;
LayoutResultCallbackWrapperImpl(LayoutResultCallback callback)57         public LayoutResultCallbackWrapperImpl(LayoutResultCallback callback) {
58             assert callback != null;
59             mCallback = callback;
60         }
61 
62         @Override
onLayoutFinished(PrintDocumentInfo info, boolean changed)63         public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
64             mCallback.onLayoutFinished(info, changed);
65         }
66 
67         @Override
onLayoutFailed(CharSequence error)68         public void onLayoutFailed(CharSequence error) {
69             mCallback.onLayoutFailed(error);
70         }
71 
72         @Override
onLayoutCancelled()73         public void onLayoutCancelled() {
74             mCallback.onLayoutCancelled();
75         }
76     }
77 
78     public static class WriteResultCallbackWrapperImpl implements WriteResultCallbackWrapper {
79         private WriteResultCallback mCallback = null;
WriteResultCallbackWrapperImpl(WriteResultCallback callback)80         public WriteResultCallbackWrapperImpl(WriteResultCallback callback) {
81             assert callback != null;
82             mCallback = callback;
83         }
84 
85         @Override
onWriteFinished(PageRange[] pages)86         public void onWriteFinished(PageRange[] pages) {
87             mCallback.onWriteFinished(pages);
88         }
89 
90         @Override
onWriteFailed(CharSequence error)91         public void onWriteFailed(CharSequence error) {
92             mCallback.onWriteFailed(error);
93         }
94 
95         @Override
onWriteCancelled()96         public void onWriteCancelled() {
97             mCallback.onWriteCancelled();
98         }
99     }
100 
setPdfGenerator(PdfGenerator pdfGenerator)101     public void setPdfGenerator(PdfGenerator pdfGenerator) {
102         mPdfGenerator = pdfGenerator;
103     }
104 
105     /**
106      * Initiates the printing process within the framework
107      */
print(PrintManagerDelegate printManager, String title)108     public void print(PrintManagerDelegate printManager, String title) {
109         printManager.print(title, this, null);
110     }
111 
112     @Override
onStart()113     public void onStart() {
114         mPdfGenerator.onStart();
115     }
116 
117     @Override
onLayout( PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle metadata)118     public void onLayout(
119             PrintAttributes oldAttributes,
120             PrintAttributes newAttributes,
121             CancellationSignal cancellationSignal,
122             LayoutResultCallback callback,
123             Bundle metadata) {
124         mPdfGenerator.onLayout(oldAttributes, newAttributes, cancellationSignal,
125                 new LayoutResultCallbackWrapperImpl(callback), metadata);
126     }
127 
128     @Override
onWrite( final PageRange[] ranges, final ParcelFileDescriptor destination, final CancellationSignal cancellationSignal, final WriteResultCallback callback)129     public void onWrite(
130             final PageRange[] ranges,
131             final ParcelFileDescriptor destination,
132             final CancellationSignal cancellationSignal,
133             final WriteResultCallback callback) {
134         mPdfGenerator.onWrite(ranges, destination, cancellationSignal,
135                 new WriteResultCallbackWrapperImpl(callback));
136     }
137 
138     @Override
onFinish()139     public void onFinish() {
140         super.onFinish();
141         mPdfGenerator.onFinish();
142     }
143 }