Multiple printer discovery session instances and other bugs.

1. The fused printers provider was dropping on the floor received printers
    if it was not active. It is in fact a loaded and if not active it should compute
    the printers and not deliver them until activated. This fixes an issue where
    opening the print dialog, then enabling a print service results in the printers
    reported by the service not showing up in the print dialog.

2. Printer discovery session was created twice which leads to incorrect behavior
    as the pint system is designed around the contract that there is a single
    printer discovery session per service at a time. This was possible due to an
    incorrect initialization of a member variable resulting in double session creation
    when the print service is connected.

3. When a print service is enabled during discovery we did not use the correct
    condition to start printer discovery resulting in starting it all the time even if
    not needed. Also if some of the printers that had to be tracked are reported
    by the service just enabled (typically historical printers) we did not ask the
    service to start tracking them.

4. Removed some logging.

bug:10903343

Change-Id: I46c049471a4b099fc668df3aee2aaedc8d7786ac
This commit is contained in:
Svetoslav
2013-09-23 18:48:34 -07:00
committed by Svetoslav Ganov
parent 89e1fec9af
commit b5f180608d
5 changed files with 68 additions and 18 deletions

View File

@@ -383,6 +383,10 @@ public abstract class PrintService extends Service {
final int action = message.what;
switch (action) {
case MSG_CREATE_PRINTER_DISCOVERY_SESSION: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_CREATE_PRINTER_DISCOVERY_SESSION "
+ getPackageName());
}
PrinterDiscoverySession session = onCreatePrinterDiscoverySession();
if (session == null) {
throw new NullPointerException("session cannot be null");
@@ -396,6 +400,10 @@ public abstract class PrintService extends Service {
} break;
case MSG_DESTROY_PRINTER_DISCOVERY_SESSION: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_DESTROY_PRINTER_DISCOVERY_SESSION "
+ getPackageName());
}
if (mDiscoverySession != null) {
mDiscoverySession.destroy();
mDiscoverySession = null;
@@ -403,6 +411,10 @@ public abstract class PrintService extends Service {
} break;
case MSG_START_PRINTER_DISCOVERY: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_START_PRINTER_DISCOVERY "
+ getPackageName());
}
if (mDiscoverySession != null) {
List<PrinterId> priorityList = (ArrayList<PrinterId>) message.obj;
mDiscoverySession.startPrinterDiscovery(priorityList);
@@ -410,12 +422,20 @@ public abstract class PrintService extends Service {
} break;
case MSG_STOP_PRINTER_DISCOVERY: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_STOP_PRINTER_DISCOVERY "
+ getPackageName());
}
if (mDiscoverySession != null) {
mDiscoverySession.stopPrinterDiscovery();
}
} break;
case MSG_VALIDATE_PRINTERS: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_VALIDATE_PRINTERS "
+ getPackageName());
}
if (mDiscoverySession != null) {
List<PrinterId> printerIds = (List<PrinterId>) message.obj;
mDiscoverySession.validatePrinters(printerIds);
@@ -423,6 +443,10 @@ public abstract class PrintService extends Service {
} break;
case MSG_START_PRINTER_STATE_TRACKING: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_START_PRINTER_STATE_TRACKING "
+ getPackageName());
}
if (mDiscoverySession != null) {
PrinterId printerId = (PrinterId) message.obj;
mDiscoverySession.startPrinterStateTracking(printerId);
@@ -430,6 +454,10 @@ public abstract class PrintService extends Service {
} break;
case MSG_STOP_PRINTER_STATE_TRACKING: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_STOP_PRINTER_STATE_TRACKING "
+ getPackageName());
}
if (mDiscoverySession != null) {
PrinterId printerId = (PrinterId) message.obj;
mDiscoverySession.stopPrinterStateTracking(printerId);
@@ -437,11 +465,19 @@ public abstract class PrintService extends Service {
} break;
case MSG_ON_REQUEST_CANCEL_PRINTJOB: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_ON_REQUEST_CANCEL_PRINTJOB "
+ getPackageName());
}
PrintJobInfo printJobInfo = (PrintJobInfo) message.obj;
onRequestCancelPrintJob(new PrintJob(printJobInfo, mClient));
} break;
case MSG_ON_PRINTJOB_QUEUED: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_ON_PRINTJOB_QUEUED "
+ getPackageName());
}
PrintJobInfo printJobInfo = (PrintJobInfo) message.obj;
if (DEBUG) {
Log.i(LOG_TAG, "Queued: " + printJobInfo);
@@ -450,6 +486,10 @@ public abstract class PrintService extends Service {
} break;
case MSG_SET_CLEINT: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_SET_CLEINT "
+ getPackageName());
}
mClient = (IPrintServiceClient) message.obj;
if (mClient != null) {
onConnected();