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(); |