| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.printing; | 5 package org.chromium.printing; |
| 6 | 6 |
| 7 import android.os.Bundle; | 7 import android.os.Bundle; |
| 8 import android.os.CancellationSignal; | 8 import android.os.CancellationSignal; |
| 9 import android.os.ParcelFileDescriptor; | 9 import android.os.ParcelFileDescriptor; |
| 10 import android.print.PageRange; | 10 import android.print.PageRange; |
| 11 import android.print.PrintAttributes; | 11 import android.print.PrintAttributes; |
| 12 import android.print.PrintDocumentInfo; | 12 import android.print.PrintDocumentInfo; |
| 13 import android.util.Log; |
| 13 | 14 |
| 14 import org.chromium.base.ThreadUtils; | 15 import org.chromium.base.ThreadUtils; |
| 15 import org.chromium.printing.PrintDocumentAdapterWrapper.PdfGenerator; | 16 import org.chromium.printing.PrintDocumentAdapterWrapper.PdfGenerator; |
| 16 | 17 |
| 17 import java.io.IOException; | 18 import java.io.IOException; |
| 18 import java.util.ArrayList; | 19 import java.util.ArrayList; |
| 19 import java.util.Iterator; | 20 import java.util.Iterator; |
| 20 | 21 |
| 21 /** | 22 /** |
| 22 * Controls the interactions with Android framework related to printing. | 23 * Controls the interactions with Android framework related to printing. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 40 /** Printing dialog has been dismissed and cleanup has been done. */ | 41 /** Printing dialog has been dismissed and cleanup has been done. */ |
| 41 private static final int PRINTING_STATE_FINISHED = 3; | 42 private static final int PRINTING_STATE_FINISHED = 3; |
| 42 | 43 |
| 43 /** The singleton instance for this class. */ | 44 /** The singleton instance for this class. */ |
| 44 private static PrintingController sInstance; | 45 private static PrintingController sInstance; |
| 45 | 46 |
| 46 private final String mErrorMessage; | 47 private final String mErrorMessage; |
| 47 | 48 |
| 48 private PrintingContextInterface mPrintingContext; | 49 private PrintingContextInterface mPrintingContext; |
| 49 | 50 |
| 51 /** |
| 52 * The context of a query initiated by window.print(), stored here to allow
syncrhonization |
| 53 * with javascript. |
| 54 */ |
| 55 private PrintingContextInterface mContextFromScriptInitiation; |
| 56 |
| 50 /** The file descriptor into which the PDF will be written. Provided by the
framework. */ | 57 /** The file descriptor into which the PDF will be written. Provided by the
framework. */ |
| 51 private int mFileDescriptor; | 58 private int mFileDescriptor; |
| 52 | 59 |
| 53 /** Dots per inch, as provided by the framework. */ | 60 /** Dots per inch, as provided by the framework. */ |
| 54 private int mDpi; | 61 private int mDpi; |
| 55 | 62 |
| 56 /** Paper dimensions. */ | 63 /** Paper dimensions. */ |
| 57 private PrintAttributes.MediaSize mMediaSize; | 64 private PrintAttributes.MediaSize mMediaSize; |
| 58 | 65 |
| 59 /** Numbers of pages to be printed, zero indexed. */ | 66 /** Numbers of pages to be printed, zero indexed. */ |
| (...skipping 19 matching lines...) Expand all Loading... |
| 79 private int mPrintingState = PRINTING_STATE_READY; | 86 private int mPrintingState = PRINTING_STATE_READY; |
| 80 | 87 |
| 81 /** Whether layouting parameters have been changed to require a new PDF gene
ration. */ | 88 /** Whether layouting parameters have been changed to require a new PDF gene
ration. */ |
| 82 private boolean mNeedNewPdf = false; | 89 private boolean mNeedNewPdf = false; |
| 83 | 90 |
| 84 /** Total number of pages to print with initial print dialog settings. */ | 91 /** Total number of pages to print with initial print dialog settings. */ |
| 85 private int mLastKnownMaxPages = PrintDocumentInfo.PAGE_COUNT_UNKNOWN; | 92 private int mLastKnownMaxPages = PrintDocumentInfo.PAGE_COUNT_UNKNOWN; |
| 86 | 93 |
| 87 private boolean mIsBusy = false; | 94 private boolean mIsBusy = false; |
| 88 | 95 |
| 96 private PrintManagerDelegate mPrintManager; |
| 97 |
| 89 private PrintingControllerImpl(PrintDocumentAdapterWrapper printDocumentAdap
terWrapper, | 98 private PrintingControllerImpl(PrintDocumentAdapterWrapper printDocumentAdap
terWrapper, |
| 90 String errorText) { | 99 String errorText) { |
| 91 mErrorMessage = errorText; | 100 mErrorMessage = errorText; |
| 92 mPrintDocumentAdapterWrapper = printDocumentAdapterWrapper; | 101 mPrintDocumentAdapterWrapper = printDocumentAdapterWrapper; |
| 93 mPrintDocumentAdapterWrapper.setPdfGenerator(this); | 102 mPrintDocumentAdapterWrapper.setPdfGenerator(this); |
| 94 } | 103 } |
| 95 | 104 |
| 96 /** | 105 /** |
| 97 * Creates a controller for handling printing with the framework. | 106 * Creates a controller for handling printing with the framework. |
| 98 * | 107 * |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 public boolean isBusy() { | 170 public boolean isBusy() { |
| 162 return mIsBusy; | 171 return mIsBusy; |
| 163 } | 172 } |
| 164 | 173 |
| 165 @Override | 174 @Override |
| 166 public void setPrintingContext(final PrintingContextInterface printingContex
t) { | 175 public void setPrintingContext(final PrintingContextInterface printingContex
t) { |
| 167 mPrintingContext = printingContext; | 176 mPrintingContext = printingContext; |
| 168 } | 177 } |
| 169 | 178 |
| 170 @Override | 179 @Override |
| 180 public void setPendingPrint(final Printable printable, PrintManagerDelegate
printManager) { |
| 181 if (mIsBusy) return; |
| 182 mPrintable = printable; |
| 183 mPrintManager = printManager; |
| 184 } |
| 185 |
| 186 @Override |
| 187 public void startPendingPrint(PrintingContextInterface printingContext) { |
| 188 if (mIsBusy || mPrintManager == null) { |
| 189 Log.w(LOG_TAG, "Pending print can't be started. Is might be busy or
not initialized."); |
| 190 if (printingContext != null) printingContext.showSystemDialogDone(); |
| 191 return; |
| 192 } |
| 193 mContextFromScriptInitiation = printingContext; |
| 194 mIsBusy = true; |
| 195 mPrintDocumentAdapterWrapper.print(mPrintManager, mPrintable.getTitle())
; |
| 196 mPrintManager = null; |
| 197 } |
| 198 |
| 199 @Override |
| 171 public void startPrint(final Printable printable, PrintManagerDelegate print
Manager) { | 200 public void startPrint(final Printable printable, PrintManagerDelegate print
Manager) { |
| 172 if (mIsBusy) return; | 201 if (mIsBusy) return; |
| 173 mIsBusy = true; | 202 setPendingPrint(printable, printManager); |
| 174 mPrintable = printable; | 203 startPendingPrint(null); |
| 175 mPrintDocumentAdapterWrapper.print(printManager, printable.getTitle()); | |
| 176 } | 204 } |
| 177 | 205 |
| 178 @Override | 206 @Override |
| 179 public void pdfWritingDone(boolean success) { | 207 public void pdfWritingDone(boolean success) { |
| 180 if (mPrintingState == PRINTING_STATE_FINISHED) return; | 208 if (mPrintingState == PRINTING_STATE_FINISHED) return; |
| 181 mPrintingState = PRINTING_STATE_READY; | 209 mPrintingState = PRINTING_STATE_READY; |
| 182 if (success) { | 210 if (success) { |
| 183 PageRange[] pageRanges = convertIntegerArrayToPageRanges(mPages); | 211 PageRange[] pageRanges = convertIntegerArrayToPageRanges(mPages); |
| 184 mOnWriteCallback.onWriteFinished(pageRanges); | 212 mOnWriteCallback.onWriteFinished(pageRanges); |
| 185 } else { | 213 } else { |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 // extra). If we complete the PDF generation successfully from o
nLayout or onWrite, | 342 // extra). If we complete the PDF generation successfully from o
nLayout or onWrite, |
| 315 // we already make the state PRINTING_STATE_READY and call askUs
erForSettingsReply | 343 // we already make the state PRINTING_STATE_READY and call askUs
erForSettingsReply |
| 316 // inside pdfWritingDone, thus not entering here. Also, if we g
et an extra | 344 // inside pdfWritingDone, thus not entering here. Also, if we g
et an extra |
| 317 // AskUserForSettings call, it's handled inside {@link | 345 // AskUserForSettings call, it's handled inside {@link |
| 318 // PrintingContext#pageCountEstimationDone}. | 346 // PrintingContext#pageCountEstimationDone}. |
| 319 mPrintingContext.askUserForSettingsReply(false); | 347 mPrintingContext.askUserForSettingsReply(false); |
| 320 } | 348 } |
| 321 mPrintingContext.updatePrintingContextMap(mFileDescriptor, true); | 349 mPrintingContext.updatePrintingContextMap(mFileDescriptor, true); |
| 322 mPrintingContext = null; | 350 mPrintingContext = null; |
| 323 } | 351 } |
| 352 |
| 353 if (mContextFromScriptInitiation != null) { |
| 354 mContextFromScriptInitiation.showSystemDialogDone(); |
| 355 mContextFromScriptInitiation = null; |
| 356 } |
| 357 |
| 324 mPrintingState = PRINTING_STATE_FINISHED; | 358 mPrintingState = PRINTING_STATE_FINISHED; |
| 325 | 359 |
| 326 closeFileDescriptor(mFileDescriptor); | 360 closeFileDescriptor(mFileDescriptor); |
| 327 mFileDescriptor = -1; | 361 mFileDescriptor = -1; |
| 328 | 362 |
| 329 resetCallbacks(); | 363 resetCallbacks(); |
| 330 // The printmanager contract is that onFinish() is always called as the
last | 364 // The printmanager contract is that onFinish() is always called as the
last |
| 331 // callback. We set busy to false here. | 365 // callback. We set busy to false here. |
| 332 mIsBusy = false; | 366 mIsBusy = false; |
| 333 } | 367 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 | 412 |
| 379 // Convert the list into array. | 413 // Convert the list into array. |
| 380 int[] ret = new int[pages.size()]; | 414 int[] ret = new int[pages.size()]; |
| 381 Iterator<Integer> iterator = pages.iterator(); | 415 Iterator<Integer> iterator = pages.iterator(); |
| 382 for (int i = 0; i < ret.length; i++) { | 416 for (int i = 0; i < ret.length; i++) { |
| 383 ret[i] = iterator.next().intValue(); | 417 ret[i] = iterator.next().intValue(); |
| 384 } | 418 } |
| 385 return ret; | 419 return ret; |
| 386 } | 420 } |
| 387 } | 421 } |
| OLD | NEW |