Chromium Code Reviews| 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(); |