Merge "Multiple printer discovery session instances and other bugs." into klp-dev

This commit is contained in:
Svetoslav
2013-09-24 20:37:58 +00:00
committed by Android (Google) Code Review
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();

View File

@ -86,10 +86,6 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> {
}
private void computeAndDeliverResult(Map<PrinterId, PrinterInfo> discoveredPrinters) {
if (!isStarted()) {
return;
}
List<PrinterInfo> printers = new ArrayList<PrinterInfo>();
// Add the updated favorite printers.
@ -123,9 +119,11 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> {
mPrinters.clear();
mPrinters.addAll(printers);
if (isStarted()) {
// Deliver the printers.
deliverResult(printers);
}
}
@Override
protected void onStartLoading() {

View File

@ -74,7 +74,7 @@ public final class PrintSpoolerService extends Service {
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;

View File

@ -85,7 +85,7 @@ final class RemotePrintService implements DeathRecipient {
private boolean mHasPrinterDiscoverySession;
private boolean mServiceDead;
private boolean mServiceDied;
private List<PrinterId> mDiscoveryPriorityList;
@ -107,7 +107,6 @@ final class RemotePrintService implements DeathRecipient {
mSpooler = spooler;
mHandler = new MyHandler(context.getMainLooper());
mPrintServiceClient = new RemotePrintServiceClient(this);
mServiceDead = true;
}
public ComponentName getComponentName() {
@ -157,7 +156,7 @@ final class RemotePrintService implements DeathRecipient {
private void handleBinderDied() {
mPrintService.asBinder().unlinkToDeath(this, 0);
mPrintService = null;
mServiceDead = true;
mServiceDied = true;
mCallbacks.onServiceDied(this);
}
@ -171,7 +170,7 @@ final class RemotePrintService implements DeathRecipient {
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 @@ final class RemotePrintService implements DeathRecipient {
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 @@ final class RemotePrintService implements DeathRecipient {
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 @@ final class RemotePrintService implements DeathRecipient {
if (!mHasPrinterDiscoverySession && !mHasActivePrintJobs) {
ensureUnbound();
}
mServiceDead = false;
mServiceDied = false;
}
@Override

View File

@ -1007,12 +1007,25 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks {
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) {