Search in sources :

Example 96 with PrintJobInfo

use of android.print.PrintJobInfo in project android_frameworks_base by DirtyUnicorns.

the class PrintSpoolerService method setPrintJobState.

public boolean setPrintJobState(PrintJobId printJobId, int state, String error) {
    boolean success = false;
    synchronized (mLock) {
        PrintJobInfo printJob = getPrintJobInfo(printJobId, PrintManager.APP_ID_ANY);
        if (printJob != null) {
            final int oldState = printJob.getState();
            if (oldState == state) {
                return false;
            }
            success = true;
            printJob.setState(state);
            printJob.setStatus(error);
            printJob.setCancelling(false);
            if (DEBUG_PRINT_JOB_LIFECYCLE) {
                Slog.i(LOG_TAG, "[STATE CHANGED] " + printJob);
            }
            MetricsLogger.histogram(this, "print_job_state", state);
            switch(state) {
                case PrintJobInfo.STATE_COMPLETED:
                case PrintJobInfo.STATE_CANCELED:
                    mPrintJobs.remove(printJob);
                    removePrintJobFileLocked(printJob.getId());
                case PrintJobInfo.STATE_FAILED:
                    {
                        PrinterId printerId = printJob.getPrinterId();
                        if (printerId != null) {
                            ComponentName service = printerId.getServiceName();
                            if (!hasActivePrintJobsForServiceLocked(service)) {
                                sendOnAllPrintJobsForServiceHandled(service);
                            }
                        }
                    }
                    break;
                case PrintJobInfo.STATE_QUEUED:
                    {
                        sendOnPrintJobQueued(new PrintJobInfo(printJob));
                    }
                    break;
            }
            if (shouldPersistPrintJob(printJob)) {
                mPersistanceManager.writeStateLocked();
            }
            if (!hasActivePrintJobsLocked()) {
                notifyOnAllPrintJobsHandled();
            }
            notifyPrintJobUpdated(printJob);
        }
    }
    return success;
}
Also used : PrintJobInfo(android.print.PrintJobInfo) ComponentName(android.content.ComponentName) PrinterId(android.print.PrinterId)

Example 97 with PrintJobInfo

use of android.print.PrintJobInfo in project android_frameworks_base by DirtyUnicorns.

the class PrintSpoolerService method updatePrintJobUserConfigurableOptionsNoPersistence.

public void updatePrintJobUserConfigurableOptionsNoPersistence(PrintJobInfo printJob) {
    synchronized (mLock) {
        final int printJobCount = mPrintJobs.size();
        for (int i = 0; i < printJobCount; i++) {
            PrintJobInfo cachedPrintJob = mPrintJobs.get(i);
            if (cachedPrintJob.getId().equals(printJob.getId())) {
                cachedPrintJob.setPrinterId(printJob.getPrinterId());
                cachedPrintJob.setPrinterName(printJob.getPrinterName());
                cachedPrintJob.setCopies(printJob.getCopies());
                cachedPrintJob.setDocumentInfo(printJob.getDocumentInfo());
                cachedPrintJob.setPages(printJob.getPages());
                cachedPrintJob.setAttributes(printJob.getAttributes());
                cachedPrintJob.setAdvancedOptions(printJob.getAdvancedOptions());
                return;
            }
        }
        throw new IllegalArgumentException("No print job with id:" + printJob.getId());
    }
}
Also used : PrintJobInfo(android.print.PrintJobInfo)

Example 98 with PrintJobInfo

use of android.print.PrintJobInfo in project android_frameworks_base by crdroidandroid.

the class NotificationController method onUpdateNotifications.

public void onUpdateNotifications(List<PrintJobInfo> printJobs) {
    List<PrintJobInfo> notifyPrintJobs = new ArrayList<>();
    final int printJobCount = printJobs.size();
    for (int i = 0; i < printJobCount; i++) {
        PrintJobInfo printJob = printJobs.get(i);
        if (shouldNotifyForState(printJob.getState())) {
            notifyPrintJobs.add(printJob);
        }
    }
    updateNotifications(notifyPrintJobs);
}
Also used : PrintJobInfo(android.print.PrintJobInfo) ArrayList(java.util.ArrayList)

Example 99 with PrintJobInfo

use of android.print.PrintJobInfo in project android_frameworks_base by crdroidandroid.

the class PrintSpoolerService method setPrintJobState.

public boolean setPrintJobState(PrintJobId printJobId, int state, String error) {
    boolean success = false;
    synchronized (mLock) {
        PrintJobInfo printJob = getPrintJobInfo(printJobId, PrintManager.APP_ID_ANY);
        if (printJob != null) {
            final int oldState = printJob.getState();
            if (oldState == state) {
                return false;
            }
            success = true;
            printJob.setState(state);
            printJob.setStatus(error);
            printJob.setCancelling(false);
            if (DEBUG_PRINT_JOB_LIFECYCLE) {
                Slog.i(LOG_TAG, "[STATE CHANGED] " + printJob);
            }
            MetricsLogger.histogram(this, "print_job_state", state);
            switch(state) {
                case PrintJobInfo.STATE_COMPLETED:
                case PrintJobInfo.STATE_CANCELED:
                    mPrintJobs.remove(printJob);
                    removePrintJobFileLocked(printJob.getId());
                case PrintJobInfo.STATE_FAILED:
                    {
                        PrinterId printerId = printJob.getPrinterId();
                        if (printerId != null) {
                            ComponentName service = printerId.getServiceName();
                            if (!hasActivePrintJobsForServiceLocked(service)) {
                                sendOnAllPrintJobsForServiceHandled(service);
                            }
                        }
                    }
                    break;
                case PrintJobInfo.STATE_QUEUED:
                    {
                        sendOnPrintJobQueued(new PrintJobInfo(printJob));
                    }
                    break;
            }
            if (shouldPersistPrintJob(printJob)) {
                mPersistanceManager.writeStateLocked();
            }
            if (!hasActivePrintJobsLocked()) {
                notifyOnAllPrintJobsHandled();
            }
            notifyPrintJobUpdated(printJob);
        }
    }
    return success;
}
Also used : PrintJobInfo(android.print.PrintJobInfo) ComponentName(android.content.ComponentName) PrinterId(android.print.PrinterId)

Example 100 with PrintJobInfo

use of android.print.PrintJobInfo in project android_frameworks_base by crdroidandroid.

the class PrintSpoolerService method handleReadPrintJobsLocked.

private void handleReadPrintJobsLocked() {
    // Make a map with the files for a print job since we may have
    // to delete some. One example of getting orphan files if the
    // spooler crashes while constructing a print job. We do not
    // persist partially populated print jobs under construction to
    // avoid special handling for various attributes missing.
    ArrayMap<PrintJobId, File> fileForJobMap = null;
    File[] files = getFilesDir().listFiles();
    if (files != null) {
        final int fileCount = files.length;
        for (int i = 0; i < fileCount; i++) {
            File file = files[i];
            if (file.isFile() && file.getName().startsWith(PRINT_JOB_FILE_PREFIX)) {
                if (fileForJobMap == null) {
                    fileForJobMap = new ArrayMap<PrintJobId, File>();
                }
                String printJobIdString = file.getName().substring(PRINT_JOB_FILE_PREFIX.length(), file.getName().indexOf('.'));
                PrintJobId printJobId = PrintJobId.unflattenFromString(printJobIdString);
                fileForJobMap.put(printJobId, file);
            }
        }
    }
    final int printJobCount = mPrintJobs.size();
    for (int i = 0; i < printJobCount; i++) {
        PrintJobInfo printJob = mPrintJobs.get(i);
        // We want to have only the orphan files at the end.
        if (fileForJobMap != null) {
            fileForJobMap.remove(printJob.getId());
        }
        switch(printJob.getState()) {
            case PrintJobInfo.STATE_QUEUED:
            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));
                }
                break;
        }
    }
    if (!mPrintJobs.isEmpty()) {
        // Update the notification.
        mNotificationController.onUpdateNotifications(mPrintJobs);
    }
    // Delete the orphan files.
    if (fileForJobMap != null) {
        final int orphanFileCount = fileForJobMap.size();
        for (int i = 0; i < orphanFileCount; i++) {
            File file = fileForJobMap.valueAt(i);
            file.delete();
        }
    }
}
Also used : PrintJobId(android.print.PrintJobId) PrintJobInfo(android.print.PrintJobInfo) AtomicFile(android.util.AtomicFile) File(java.io.File)

Aggregations

PrintJobInfo (android.print.PrintJobInfo)110 PrintJobId (android.print.PrintJobId)18 AtomicFile (android.util.AtomicFile)15 File (java.io.File)15 PrinterId (android.print.PrinterId)14 ArrayList (java.util.ArrayList)14 MainThread (android.annotation.MainThread)10 ComponentName (android.content.ComponentName)9 NonNull (android.annotation.NonNull)5 Notification (android.app.Notification)5 InboxStyle (android.app.Notification.InboxStyle)5 Message (android.os.Message)5 RemoteException (android.os.RemoteException)5 PageRange (android.print.PageRange)5 PrintAttributes (android.print.PrintAttributes)5 MediaSize (android.print.PrintAttributes.MediaSize)5 Resolution (android.print.PrintAttributes.Resolution)5 PrintDocumentInfo (android.print.PrintDocumentInfo)5 PrinterCapabilitiesInfo (android.print.PrinterCapabilitiesInfo)5 ArraySet (android.util.ArraySet)5