summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorSvetoslav <svetoslavganov@google.com>2013-09-20 11:58:55 -0700
committerSvetoslav <svetoslavganov@google.com>2013-09-20 12:15:22 -0700
commit5559c368a96c56d55c581c88d9978c59c5212bf1 (patch)
tree330fec8337554c2d00a7bfb7cced7b6588fcd294 /packages
parent5006eb75e6d42ac107734fa8134a726158d768d8 (diff)
downloadframeworks_base-5559c368a96c56d55c581c88d9978c59c5212bf1.zip
frameworks_base-5559c368a96c56d55c581c88d9978c59c5212bf1.tar.gz
frameworks_base-5559c368a96c56d55c581c88d9978c59c5212bf1.tar.bz2
PrintDocumentAdapter contract not followed on print.
1. Layout was not called after pressing the print button if the print attributes did not change. This is not correct since the previous layout calls were for preview purposes and the one after pressing print is not for preview. Hence, we always have to do this layout. 2. After layout we decide whether to ask the app to write some pages. We ask for a write if we do not have the pages selected by the user or the document changed (if the page count changed, the document type changed, or the app told us that the content changed). We were not computing correctly whether the document changed since we compared the size but the document info the app passes in after a layout does not have the size yet. We set the size after a write. So for layout purposes we should ignore the size. We only care if the page count, document type, or content changed where the latter is reported by the app in the layout callback. 3. We were not updating the PrintJob after setting the data size of the printed document. 4. Disabled debugging. bug:10835370 Change-Id: Ic3b2871b4e954cdf610f8cf806de5fc6588a6bec
Diffstat (limited to 'packages')
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java37
1 files changed, 33 insertions, 4 deletions
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
index af1c60e..bcef79c 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
@@ -29,7 +29,6 @@ import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.AsyncTask;
-import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -102,7 +101,7 @@ public class PrintJobConfigActivity extends Activity {
private static final String LOG_TAG = "PrintJobConfigActivity";
- private static final boolean DEBUG = true && Build.IS_DEBUGGABLE;
+ private static final boolean DEBUG = false;
public static final String EXTRA_PRINT_DOCUMENT_ADAPTER = "printDocumentAdapter";
public static final String EXTRA_PRINT_JOB = "printJob";
@@ -344,7 +343,9 @@ public class PrintJobConfigActivity extends Activity {
if (!mController.hasStarted()) {
mController.start();
}
- if (!printAttributesChanged()) {
+ // If print is confirmed we always do a layout since the previous
+ // ones were for preview and this one is for printing.
+ if (!printAttributesChanged() && !mEditor.isPrintConfirmed()) {
if (mDocument.info == null) {
// We are waiting for the result of a layout, so do nothing.
return;
@@ -391,8 +392,12 @@ public class PrintJobConfigActivity extends Activity {
mControllerState = CONTROLLER_STATE_LAYOUT_COMPLETED;
+ // For layout purposes we care only whether the type or the page
+ // count changed. We still do not have the size since we did not
+ // call write. We use "layoutChanged" set by the application to
+ // know whether something else changed about the document.
+ final boolean infoChanged = !equalsIgnoreSize(info, mDocument.info);
// If the info changed, we update the document and the print job.
- final boolean infoChanged = !info.equals(mDocument.info);
if (infoChanged) {
mDocument.info = info;
// Set the info.
@@ -482,6 +487,10 @@ public class PrintJobConfigActivity extends Activity {
.generateFileForPrintJob(mPrintJobId);
mDocument.info.setDataSize(file.length());
+ // Update the print job with the updated info.
+ PrintSpoolerService.peekInstance().setPrintJobPrintDocumentInfoNoPersistence(
+ mPrintJobId, mDocument.info);
+
// Update which pages we have fetched.
mDocument.pages = PageRangeUtils.normalize(pages);
@@ -556,6 +565,26 @@ public class PrintJobConfigActivity extends Activity {
PrintJobConfigActivity.this.finish();
}
+ private boolean equalsIgnoreSize(PrintDocumentInfo lhs, PrintDocumentInfo rhs) {
+ if (lhs == rhs) {
+ return true;
+ }
+ if (lhs == null) {
+ if (rhs != null) {
+ return false;
+ }
+ } else {
+ if (rhs == null) {
+ return false;
+ }
+ if (lhs.getContentType() != rhs.getContentType()
+ || lhs.getPageCount() != rhs.getPageCount()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
private final class ControllerHandler extends Handler {
public static final int MSG_ON_LAYOUT_FINISHED = 1;
public static final int MSG_ON_LAYOUT_FAILED = 2;