Merge "Multiple printer discovery session instances and other bugs." into klp-dev
This commit is contained in:
@ -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();
|
||||
|
@ -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() {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
Reference in New Issue
Block a user