69 lines
2.5 KiB
Java
Executable File
69 lines
2.5 KiB
Java
Executable File
// 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.android_webview;
|
|
|
|
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.PrintDocumentInfo;
|
|
import android.webkit.ValueCallback;
|
|
|
|
|
|
/**
|
|
* Adapter for printing Webview. This class implements the abstract
|
|
* system class PrintDocumentAdapter and hides all printing details from
|
|
* the developer.
|
|
*/
|
|
public class AwPrintDocumentAdapter extends PrintDocumentAdapter {
|
|
|
|
private AwPdfExporter mPdfExporter;
|
|
private PrintAttributes mAttributes;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param pdfExporter The PDF exporter to export the webview contents to a PDF file.
|
|
*/
|
|
public AwPrintDocumentAdapter(AwPdfExporter pdfExporter) {
|
|
mPdfExporter = pdfExporter;
|
|
}
|
|
|
|
@Override
|
|
public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes,
|
|
CancellationSignal cancellationSignal, LayoutResultCallback callback,
|
|
Bundle metadata) {
|
|
mAttributes = newAttributes;
|
|
// TODO(sgurun) pass a meaningful string once b/10705082 is resolved
|
|
PrintDocumentInfo documentInfo = new PrintDocumentInfo
|
|
.Builder("webview")
|
|
.build();
|
|
// TODO(sgurun) once componentization is done, do layout changes and
|
|
// generate PDF here, set the page range information to documentinfo
|
|
// and call onLayoutFinished with true/false depending on whether
|
|
// layout actually changed.
|
|
callback.onLayoutFinished(documentInfo, true);
|
|
}
|
|
|
|
@Override
|
|
public void onWrite(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);
|
|
}
|
|
}
|
|
}, cancellationSignal);
|
|
}
|
|
}
|
|
|