| 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;
|
| }
|
| }
|
|
|
|
|