summaryrefslogtreecommitdiffstats
path: root/packages/PrintSpooler/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/PrintSpooler/src')
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java14
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/NotificationController.java39
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java13
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java28
4 files changed, 68 insertions, 26 deletions
diff --git a/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java b/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
index 28fd0e0..ad8d95a 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
@@ -75,6 +75,8 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> {
private List<PrinterInfo> mFavoritePrinters;
+ private PrinterId mTrackedPrinter;
+
public FusedPrintersProvider(Context context) {
super(context);
mPersistenceManager = new PersistenceManager(context);
@@ -166,6 +168,10 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> {
private boolean cancelInternal() {
if (mDiscoverySession != null
&& mDiscoverySession.isPrinterDiscoveryStarted()) {
+ if (mTrackedPrinter != null) {
+ mDiscoverySession.stopPrinterStateTracking(mTrackedPrinter);
+ mTrackedPrinter = null;
+ }
mDiscoverySession.stopPrinterDiscovery();
return true;
} else if (mPersistenceManager.isReadHistoryInProgress()) {
@@ -195,10 +201,14 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> {
onStopLoading();
}
- public void refreshPrinter(PrinterId printerId) {
+ public void setTrackedPrinter(PrinterId printerId) {
if (isStarted() && mDiscoverySession != null
&& mDiscoverySession.isPrinterDiscoveryStarted()) {
- mDiscoverySession.requestPrinterUpdate(printerId);
+ if (mTrackedPrinter != null) {
+ mDiscoverySession.stopPrinterStateTracking(mTrackedPrinter);
+ }
+ mTrackedPrinter = printerId;
+ mDiscoverySession.startPrinterStateTracking(printerId);
}
}
diff --git a/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java b/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java
index c116d37..43a751c 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java
@@ -32,6 +32,7 @@ import android.os.UserHandle;
import android.print.IPrintManager;
import android.print.PrintJobInfo;
import android.print.PrintManager;
+import android.text.TextUtils;
import android.util.Log;
/**
@@ -64,22 +65,27 @@ public class NotificationController {
+ " state:" + PrintJobInfo.stateToString(printJob.getState()));
}
switch (printJob.getState()) {
- case PrintJobInfo.STATE_QUEUED: {
- createPrintingNotificaiton(printJob);
+ case PrintJobInfo.STATE_QUEUED:
+ case PrintJobInfo.STATE_STARTED: {
+ createPrintingNotification(printJob);
} break;
case PrintJobInfo.STATE_FAILED: {
- createFailedNotificaiton(printJob);
+ createFailedNotification(printJob);
} break;
case PrintJobInfo.STATE_COMPLETED:
case PrintJobInfo.STATE_CANCELED: {
removeNotification(printJob.getId());
} break;
+
+ case PrintJobInfo.STATE_BLOCKED: {
+ createBlockedNotification(printJob);
+ } break;
}
}
- private void createPrintingNotificaiton(PrintJobInfo printJob) {
+ private void createPrintingNotification(PrintJobInfo printJob) {
Notification.Builder builder = new Notification.Builder(mContext)
.setSmallIcon(R.drawable.stat_notify_print)
.setContentTitle(mContext.getString(R.string.printing_notification_title_template,
@@ -93,17 +99,36 @@ public class NotificationController {
mNotificationManager.notify(printJob.getId(), builder.build());
}
- private void createFailedNotificaiton(PrintJobInfo printJob) {
+ private void createFailedNotification(PrintJobInfo printJob) {
+ String reason = !TextUtils.isEmpty(printJob.getStateReason())
+ ? printJob.getStateReason() : mContext.getString(R.string.reason_unknown);
+
Notification.Builder builder = new Notification.Builder(mContext)
.setSmallIcon(R.drawable.stat_notify_error)
.setContentTitle(mContext.getString(R.string.failed_notification_title_template,
printJob.getLabel()))
.addAction(R.drawable.stat_notify_cancelling, mContext.getString(R.string.cancel),
createCancelIntent(printJob))
- // TODO: Use appropriate icon when assets are ready
.addAction(android.R.drawable.ic_secure, mContext.getString(R.string.restart),
createRestartIntent(printJob.getId()))
- .setContentText(printJob.getFailureReason())
+ .setContentText(reason)
+ .setWhen(System.currentTimeMillis())
+ .setOngoing(true)
+ .setShowWhen(true);
+ mNotificationManager.notify(printJob.getId(), builder.build());
+ }
+
+ private void createBlockedNotification(PrintJobInfo printJob) {
+ String reason = !TextUtils.isEmpty(printJob.getStateReason())
+ ? printJob.getStateReason() : mContext.getString(R.string.reason_unknown);
+
+ Notification.Builder builder = new Notification.Builder(mContext)
+ .setSmallIcon(R.drawable.stat_notify_error)
+ .setContentTitle(mContext.getString(R.string.blocked_notification_title_template,
+ printJob.getLabel()))
+ .addAction(R.drawable.stat_notify_cancelling, mContext.getString(R.string.cancel),
+ createCancelIntent(printJob))
+ .setContentText(reason)
.setWhen(System.currentTimeMillis())
.setOngoing(true)
.setShowWhen(true);
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
index 607be90..520331c 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
@@ -473,6 +473,11 @@ public class PrintJobConfigActivity extends Activity {
mControllerState = CONTROLLER_STATE_WRITE_COMPLETED;
+ // Update the document size.
+ File file = PrintSpoolerService.peekInstance()
+ .generateFileForPrintJob(mPrintJobId);
+ mDocument.info.setDataSize(file.length());
+
// Update which pages we have fetched.
mDocument.pages = PageRangeUtils.normalize(pages);
@@ -1117,7 +1122,7 @@ public class PrintJobConfigActivity extends Activity {
(Loader<?>) getLoaderManager().getLoader(
LOADER_ID_PRINTERS_LOADER);
if (printersLoader != null) {
- printersLoader.refreshPrinter(printer.getId());
+ printersLoader.setTrackedPrinter(printer.getId());
}
}
}
@@ -1351,10 +1356,6 @@ public class PrintJobConfigActivity extends Activity {
return mEditorState == EDITOR_STATE_CONFIRMED_PRINT;
}
-// public void confirmPreview() {
-// mEditorState = EDITOR_STATE_CONFIRMED_PREVIEW;
-// }
-
public PageRange[] getRequestedPages() {
if (hasErrors()) {
return null;
@@ -1374,7 +1375,7 @@ public class PrintJobConfigActivity extends Activity {
toIndex = Integer.parseInt(range.substring(
dashIndex + 1, range.length())) - 1;
} else {
- fromIndex = toIndex = Integer.parseInt(range);
+ fromIndex = toIndex = Integer.parseInt(range) - 1;
}
PageRange pageRange = new PageRange(fromIndex, toIndex);
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
index c1f4180..dd2598c 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
@@ -335,7 +335,9 @@ public final class PrintSpoolerService extends Service {
final boolean sameState = (state == printJob.getState())
|| (state == PrintJobInfo.STATE_ANY)
|| (state == PrintJobInfo.STATE_ANY_VISIBLE_TO_CLIENTS
- && printJob.getState() > PrintJobInfo.STATE_CREATED);
+ && isStateVisibleToUser(printJob.getState()))
+ || (state == PrintJobInfo.STATE_ANY_ACTIVE
+ && isActiveState(printJob.getState()));
if (sameComponent && sameAppId && sameState) {
if (foundPrintJobs == null) {
foundPrintJobs = new ArrayList<PrintJobInfo>();
@@ -347,6 +349,11 @@ public final class PrintSpoolerService extends Service {
return foundPrintJobs;
}
+ private boolean isStateVisibleToUser(int state) {
+ return (isActiveState(state) && (state == PrintJobInfo.STATE_FAILED
+ || state == PrintJobInfo.STATE_COMPLETED|| state == PrintJobInfo.STATE_CANCELED));
+ }
+
public PrintJobInfo getPrintJobInfo(int printJobId, int appId) {
synchronized (mLock) {
final int printJobCount = mPrintJobs.size();
@@ -389,14 +396,12 @@ public final class PrintSpoolerService extends Service {
switch (printJob.getState()) {
case PrintJobInfo.STATE_QUEUED:
- case PrintJobInfo.STATE_STARTED: {
- // We have a print job that was queued or started in the
- // past
- // but the device battery died or a crash occurred. In this
- // case
- // we assume the print job failed and let the user decide
- // whether
- // to restart the job or just
+ case PrintJobInfo.STATE_STARTED:
+ case PrintJobInfo.STATE_BLOCKED: {
+ // We have a print job that was queued or started or blocked in
+ // the past but the device battery died or a crash occurred. In
+ // this case we assume the print job failed and let the user
+ // decide whether to restart the job or just cancel it.
setPrintJobState(printJob.getId(), PrintJobInfo.STATE_FAILED,
getString(R.string.no_connection_to_printer));
}
@@ -501,7 +506,7 @@ public final class PrintSpoolerService extends Service {
success = true;
printJob.setState(state);
- printJob.setFailureReason(error);
+ printJob.setStateReason(error);
mNotificationController.onPrintJobStateChanged(printJob);
if (DEBUG_PRINT_JOB_LIFECYCLE) {
@@ -568,7 +573,8 @@ public final class PrintSpoolerService extends Service {
private boolean isActiveState(int printJobState) {
return printJobState == PrintJobInfo.STATE_CREATED
|| printJobState == PrintJobInfo.STATE_QUEUED
- || printJobState == PrintJobInfo.STATE_STARTED;
+ || printJobState == PrintJobInfo.STATE_STARTED
+ || printJobState == PrintJobInfo.STATE_BLOCKED;
}
public boolean setPrintJobTag(int printJobId, String tag) {