Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Unified Diff: printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java

Issue 63483007: Refactor Android printing code to make it more testable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved isPrintingController into PrintingControllerImpl, cleaned tiny bits Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java
diff --git a/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java b/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java
index 34c4dc404c16b884d7c9f43217df96cd21e5a601..27869af64bcc2beceb0bfbdfac6f08c96734082b 100644
--- a/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java
+++ b/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java
@@ -4,7 +4,11 @@
package org.chromium.printing;
+import org.chromium.base.ThreadUtils;
+
+import android.annotation.SuppressLint;
import android.content.Context;
+import android.os.Build;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
@@ -17,8 +21,6 @@ import android.print.PrintDocumentAdapter;
import android.print.PrintDocumentAdapter.LayoutResultCallback;
import android.print.PrintDocumentAdapter.WriteResultCallback;
import android.print.PrintDocumentInfo;
-import android.print.PrintJob;
-import android.print.PrintManager;
import android.util.Log;
import java.io.IOException;
@@ -35,15 +37,16 @@ import java.util.List;
* print button. The singleton object lives in UI thread. Interaction with the native side is
* carried through PrintingContext class.
*/
-class PrintingControllerImpl extends PrintDocumentAdapter implements PrintingController {
+public class PrintingControllerImpl extends PrintDocumentAdapter implements PrintingController {
- private static final String LOG_TAG = "PrintingControllerImpl";
+ /** The singleton instance for this class. */
+ private static PrintingController sInstance;
- private static final String PDF_FILE_NAME = "chrome_print_document.pdf";
+ private static final String LOG_TAG = "PrintingControllerImpl";
private String mErrorMessage;
- private final PrintManager mPrintManager;
+ private final PrintManagerDelegate mPrintManager;
private PrintingContextInterface mPrintingContext;
@@ -91,18 +94,55 @@ class PrintingControllerImpl extends PrintDocumentAdapter implements PrintingCon
/** Total number of pages to print with initial print dialog settings. */
private int mLastKnownMaxPages = PrintDocumentInfo.PAGE_COUNT_UNKNOWN;
- PrintingControllerImpl(final Context context) {
- mPrintManager = (PrintManager) context.getSystemService(Context.PRINT_SERVICE);
+ private PrintingControllerImpl(final PrintManagerDelegate printManager, String errorText) {
+ mPrintManager = printManager;
+ mErrorMessage = errorText;
}
- @Override
- public boolean hasPrintingFinished() {
- return mPrintingState == PRINTING_STATE_FINISHED;
+ /**
+ * Creates a controller for handling printing with the framework.
+ *
+ * The controller is a singleton, since there can be only one printing action at any time.
whywhat 2013/11/19 15:39:32 Is this going to be true with the window.print() s
cimamoglu1 2013/11/19 17:40:33 We don't "need", but this is nicer approach: For c
+ *
+ * @param printManager
+ * @param errorText The error message to be shown to user in case something goes wrong in PDF
+ * generation in Chromium. We pass it here as a string so src/printing/android
+ * doesn't need any string dependency.
+ * @return The resulting PrintingController.
+ */
+ public static PrintingController create(final PrintManagerDelegate printManager,
+ String errorText) {
+ ThreadUtils.assertOnUiThread();
bulach 2013/11/19 15:32:22 nit: indent this block
cimamoglu1 2013/11/19 17:40:33 Done.
+
+ if (sInstance == null) {
+ sInstance = new PrintingControllerImpl(printManager, errorText);
whywhat 2013/11/19 15:39:32 also, Java indent is 4 spaces so indent this line
cimamoglu1 2013/11/19 17:40:33 Done.
+ }
+ return sInstance;
+ }
+
+ /**
+ * Returns the singleton instance, created by the {@link PrintingControllerImpl#create}.
+ *
+ * This method must be called once {@link PrintingControllerImpl#create} is called, and always
+ * thereafter.
+ *
+ * @return The singleton instance.
+ */
+ public static PrintingController getInstance() {
+ return sInstance;
+ }
+
+ /**
+ * @return True if the running version of the Android supports printing.
+ */
+ @SuppressLint("InlinedApi")
+ public static boolean isPrintingSupported() {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
}
@Override
- public void setErrorText(final String errorText) {
- mErrorMessage = errorText;
+ public boolean hasPrintingFinished() {
+ return mPrintingState == PRINTING_STATE_FINISHED;
}
@Override
@@ -203,8 +243,7 @@ class PrintingControllerImpl extends PrintDocumentAdapter implements PrintingCon
mLastKnownMaxPages = maxPages;
}
if (mPrintingState == PRINTING_STATE_STARTED_FROM_ONLAYOUT) {
- // TODO(cimamoglu): Choose a meaningful filename.
- PrintDocumentInfo info = new PrintDocumentInfo.Builder(PDF_FILE_NAME)
+ PrintDocumentInfo info = new PrintDocumentInfo.Builder(mPrintable.getTitle())
.setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
.setPageCount(mLastKnownMaxPages)
.build();

Powered by Google App Engine
This is Rietveld 408576698