Implements printing plain text

This commit is contained in:
Sebastián Katzer 2019-01-30 11:26:15 +01:00
parent d6e1adbbbc
commit 6767d20859

View File

@ -33,8 +33,6 @@ import android.view.View;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
import org.apache.cordova.engine.SystemWebView;
import org.apache.cordova.engine.SystemWebViewClient;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
@ -49,7 +47,8 @@ class PrintManager {
// The application context // The application context
private final @NonNull Context context; private final @NonNull Context context;
private @Nullable WebView webView; // Reference required as long as the page does load the HTML markup
private @Nullable WebView view;
/** /**
* Constructor * Constructor
@ -108,6 +107,7 @@ class PrintManager {
* @param settings Additional settings how to render the content. * @param settings Additional settings how to render the content.
* @param callback The function to invoke once the job is done. * @param callback The function to invoke once the job is done.
*/ */
@SuppressWarnings("ConstantConditions")
void print (@Nullable String content, @NonNull JSONObject settings, void print (@Nullable String content, @NonNull JSONObject settings,
@NonNull View view, @NonNull View view,
@Nullable PrintHelper.OnPrintFinishCallback callback) @Nullable PrintHelper.OnPrintFinishCallback callback)
@ -115,26 +115,55 @@ class PrintManager {
switch (PrintContent.getContentType(content, context)) switch (PrintContent.getContentType(content, context))
{ {
case IMAGE: case IMAGE:
//noinspection ConstantConditions
printImage(content, settings, callback); printImage(content, settings, callback);
break; break;
case PDF: case PDF:
//noinspection ConstantConditions
printPdf(content, settings, callback); printPdf(content, settings, callback);
break; break;
case HTML: case HTML:
if (content == null || content.isEmpty()) { if (content == null || content.isEmpty()) {
printView(view, settings); printView(view, settings);
} else { } else {
printHtml(content, settings); printText(content, "text/html", settings);
} }
break;
case PLAIN: case PLAIN:
// TODO implement me printText(content, "text/plain", settings);
break;
default: default:
// TODO unsupported content // TODO unsupported content
} }
} }
/**
* Prints the markup content.
*
* @param content The HTML markup to print.
* @param settings Additional settings how to render the content.
*/
private void printText (@Nullable String content, @NonNull String mimeType,
@NonNull JSONObject settings)
{
((Activity) context).runOnUiThread(() -> {
view = new WebView(context);
view.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading (WebView view, String url) {
return false;
}
@Override
public void onPageFinished (WebView view, String url) {
printView(PrintManager.this.view, settings);
PrintManager.this.view = null;
}
});
view.loadDataWithBaseURL("file:///android_asset/www/", content, mimeType, "UTF-8",null);
});
}
/** /**
* Prints the content of the specified view. * Prints the content of the specified view.
* *
@ -143,9 +172,9 @@ class PrintManager {
*/ */
private void printView (@NonNull View view, @NonNull JSONObject settings) private void printView (@NonNull View view, @NonNull JSONObject settings)
{ {
PrintOptions options = new PrintOptions(settings); PrintOptions options = new PrintOptions(settings);
String jobName = options.getJobName(); String jobName = options.getJobName();
WebView webView = (WebView) view; WebView webView = (WebView) view;
((Activity) context).runOnUiThread(() -> { ((Activity) context).runOnUiThread(() -> {
PrintDocumentAdapter adapter; PrintDocumentAdapter adapter;
@ -160,36 +189,6 @@ class PrintManager {
}); });
} }
/**
* Prints the HTML markup.
*
* @param content The HTML markup to print.
* @param settings Additional settings how to render the content.
*/
private void printHtml (@NonNull String content,
@NonNull JSONObject settings)
{
((Activity) context).runOnUiThread(() -> {
webView = new WebView(context);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading (WebView view, String url) {
return false;
}
@Override
public void onPageFinished (WebView view, String url) {
printView(webView, settings);
webView = null;
}
});
webView.loadDataWithBaseURL("file:///android_asset/www/", content, "text/html", "UTF-8",
null);
});
}
/** /**
* Prints the provided PDF document. * Prints the provided PDF document.
* *