Index: android_webview/java/src/org/chromium/android_webview/AwPrintDocumentAdapter.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/AwPrintDocumentAdapter.java b/android_webview/java/src/org/chromium/android_webview/AwPrintDocumentAdapter.java |
index bfbf727fa3b5f6c0707602032217300729c64b74..dea043393f1ab9de6b77c67d96ad921735338d25 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/AwPrintDocumentAdapter.java |
+++ b/android_webview/java/src/org/chromium/android_webview/AwPrintDocumentAdapter.java |
@@ -14,6 +14,7 @@ import android.print.PrintDocumentAdapter; |
import android.print.PrintDocumentInfo; |
import android.webkit.ValueCallback; |
+import java.util.ArrayList; |
/** |
* Adapter for printing Webview. This class implements the abstract |
@@ -65,19 +66,38 @@ public class AwPrintDocumentAdapter extends PrintDocumentAdapter { |
} |
@Override |
- public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, |
+ public void onWrite(final PageRange[] pages, ParcelFileDescriptor destination, |
CancellationSignal cancellationSignal, final WriteResultCallback callback) { |
- mPdfExporter.exportToPdf(destination, mAttributes, new ValueCallback<Boolean>() { |
- @Override |
- public void onReceiveValue(Boolean value) { |
- if (value) { |
- callback.onWriteFinished(new PageRange[] { PageRange.ALL_PAGES }); |
- } else { |
- // TODO(sgurun) provide a localized error message |
- callback.onWriteFailed(null); |
- } |
+ mPdfExporter.exportToPdf( |
+ destination, mAttributes, normalizeRanges(pages), new ValueCallback<Boolean>() { |
+ @Override |
+ public void onReceiveValue(Boolean value) { |
+ if (value) { |
+ callback.onWriteFinished(pages); |
+ } else { |
+ // TODO(sgurun) provide a localized error message |
+ callback.onWriteFailed(null); |
+ } |
+ } |
+ }, cancellationSignal); |
+ } |
+ |
+ private int[] normalizeRanges(final PageRange[] ranges) { |
+ if (ranges.length == 1 && PageRange.ALL_PAGES.equals(ranges[0])) { |
+ return new int[0]; |
+ } |
+ ArrayList<Integer> pages = new ArrayList<Integer>(); |
+ for (PageRange range : ranges) { |
+ for (int i = range.getStart(); i <= range.getEnd(); ++i) { |
+ pages.add(i); |
} |
- }, cancellationSignal); |
+ } |
+ |
+ int[] ret = new int[pages.size()]; |
+ for (int i = 0; i < pages.size(); ++i) { |
+ ret[i] = pages.get(i).intValue(); |
+ } |
+ return ret; |
} |
} |