Merge "Multiple printer discovery session instances and other bugs." into klp-dev
diff --git a/core/java/android/printservice/PrintService.java b/core/java/android/printservice/PrintService.java
index e5ebf77..e73a53b 100644
--- a/core/java/android/printservice/PrintService.java
+++ b/core/java/android/printservice/PrintService.java
@@ -383,6 +383,10 @@
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 @@
} 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 @@
} 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 @@
} 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 @@
} 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 @@
} 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 @@
} 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 @@
} break;
case MSG_SET_CLEINT: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_SET_CLEINT "
+ + getPackageName());
+ }
mClient = (IPrintServiceClient) message.obj;
if (mClient != null) {
onConnected();
diff --git a/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java b/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
index 72f6f0a..b4eb08a 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
@@ -86,10 +86,6 @@
}
private void computeAndDeliverResult(Map<PrinterId, PrinterInfo> discoveredPrinters) {
- if (!isStarted()) {
- return;
- }
-
List<PrinterInfo> printers = new ArrayList<PrinterInfo>();
// Add the updated favorite printers.
@@ -123,8 +119,10 @@
mPrinters.clear();
mPrinters.addAll(printers);
- // Deliver the printers.
- deliverResult(printers);
+ if (isStarted()) {
+ // Deliver the printers.
+ deliverResult(printers);
+ }
}
@Override
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
index fb2c935..ce1f6ec 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
@@ -74,7 +74,7 @@
private static final String LOG_TAG = "PrintSpoolerService";
- private static final boolean DEBUG_PRINT_JOB_LIFECYCLE = true;
+ private static final boolean DEBUG_PRINT_JOB_LIFECYCLE = false;
private static final boolean DEBUG_PERSISTENCE = false;
diff --git a/services/java/com/android/server/print/RemotePrintService.java b/services/java/com/android/server/print/RemotePrintService.java
index a20973e..5b9dc28 100644
--- a/services/java/com/android/server/print/RemotePrintService.java
+++ b/services/java/com/android/server/print/RemotePrintService.java
@@ -85,7 +85,7 @@
private boolean mHasPrinterDiscoverySession;
- private boolean mServiceDead;
+ private boolean mServiceDied;
private List<PrinterId> mDiscoveryPriorityList;
@@ -107,7 +107,6 @@
mSpooler = spooler;
mHandler = new MyHandler(context.getMainLooper());
mPrintServiceClient = new RemotePrintServiceClient(this);
- mServiceDead = true;
}
public ComponentName getComponentName() {
@@ -157,7 +156,7 @@
private void handleBinderDied() {
mPrintService.asBinder().unlinkToDeath(this, 0);
mPrintService = null;
- mServiceDead = true;
+ mServiceDied = true;
mCallbacks.onServiceDied(this);
}
@@ -171,7 +170,7 @@
if (!isBound()) {
// The service is dead and neither has active jobs nor discovery
// session, so ensure we are unbound since the service has no work.
- if (mServiceDead && !mHasPrinterDiscoverySession) {
+ if (mServiceDied && !mHasPrinterDiscoverySession) {
ensureUnbound();
return;
}
@@ -286,7 +285,7 @@
if (!isBound()) {
// The service is dead and neither has active jobs nor discovery
// session, so ensure we are unbound since the service has no work.
- if (mServiceDead && !mHasActivePrintJobs) {
+ if (mServiceDied && !mHasActivePrintJobs) {
ensureUnbound();
return;
}
@@ -556,15 +555,15 @@
return;
}
// If the service died and there is a discovery session, recreate it.
- if (mServiceDead && mHasPrinterDiscoverySession) {
+ if (mServiceDied && mHasPrinterDiscoverySession) {
handleCreatePrinterDiscoverySession();
}
// If the service died and there is discovery started, restart it.
- if (mServiceDead && mDiscoveryPriorityList != null) {
+ if (mServiceDied && mDiscoveryPriorityList != null) {
handleStartPrinterDiscovery(mDiscoveryPriorityList);
}
// If the service died and printers were tracked, start tracking.
- if (mServiceDead && mTrackedPrinterList != null) {
+ if (mServiceDied && mTrackedPrinterList != null) {
final int trackedPrinterCount = mTrackedPrinterList.size();
for (int i = 0; i < trackedPrinterCount; i++) {
handleStartPrinterStateTracking(mTrackedPrinterList.get(i));
@@ -581,7 +580,7 @@
if (!mHasPrinterDiscoverySession && !mHasActivePrintJobs) {
ensureUnbound();
}
- mServiceDead = false;
+ mServiceDied = false;
}
@Override
diff --git a/services/java/com/android/server/print/UserState.java b/services/java/com/android/server/print/UserState.java
index fd4a3a4..8c21827 100644
--- a/services/java/com/android/server/print/UserState.java
+++ b/services/java/com/android/server/print/UserState.java
@@ -1007,12 +1007,25 @@
mHandler.obtainMessage(
SessionHandler.MSG_CREATE_PRINTER_DISCOVERY_SESSION,
service).sendToTarget();
- // If there are some observers that started discovery - tell the service.
- if (mDiscoveryObservers.getRegisteredCallbackCount() > 0) {
+ // Start printer discovery if necessary.
+ if (!mStartedPrinterDiscoveryTokens.isEmpty()) {
mHandler.obtainMessage(
SessionHandler.MSG_START_PRINTER_DISCOVERY,
service).sendToTarget();
}
+ // Start tracking printers if necessary
+ final int trackedPrinterCount = mStateTrackedPrinters.size();
+ for (int i = 0; i < trackedPrinterCount; i++) {
+ PrinterId printerId = mStateTrackedPrinters.get(i);
+ if (printerId.getServiceName().equals(service.getComponentName())) {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = service;
+ args.arg2 = printerId;
+ mHandler.obtainMessage(SessionHandler
+ .MSG_START_PRINTER_STATE_TRACKING, args)
+ .sendToTarget();
+ }
+ }
}
public void dump(PrintWriter pw, String prefix) {