Search in sources :

Example 26 with PrintJobInfo

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

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 27 with PrintJobInfo

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

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)

Example 28 with PrintJobInfo

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

the class PrintSpoolerService method setPrintJobCancelling.

public void setPrintJobCancelling(PrintJobId printJobId, boolean cancelling) {
    synchronized (mLock) {
        PrintJobInfo printJob = getPrintJobInfo(printJobId, PrintManager.APP_ID_ANY);
        if (printJob != null) {
            printJob.setCancelling(cancelling);
            if (shouldPersistPrintJob(printJob)) {
                mPersistanceManager.writeStateLocked();
            }
            mNotificationController.onUpdateNotifications(mPrintJobs);
            Message message = mHandlerCaller.obtainMessageO(HandlerCallerCallback.MSG_ON_PRINT_JOB_STATE_CHANGED, printJob);
            mHandlerCaller.executeOrSendMessage(message);
        }
    }
}
Also used : Message(android.os.Message) PrintJobInfo(android.print.PrintJobInfo)

Example 29 with PrintJobInfo

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

the class PrintSpoolerService method getPrintJobInfos.

public List<PrintJobInfo> getPrintJobInfos(ComponentName componentName, int state, int appId) {
    List<PrintJobInfo> foundPrintJobs = null;
    synchronized (mLock) {
        final int printJobCount = mPrintJobs.size();
        for (int i = 0; i < printJobCount; i++) {
            PrintJobInfo printJob = mPrintJobs.get(i);
            PrinterId printerId = printJob.getPrinterId();
            final boolean sameComponent = (componentName == null || (printerId != null && componentName.equals(printerId.getServiceName())));
            final boolean sameAppId = appId == PrintManager.APP_ID_ANY || printJob.getAppId() == appId;
            final boolean sameState = (state == printJob.getState()) || (state == PrintJobInfo.STATE_ANY) || (state == PrintJobInfo.STATE_ANY_VISIBLE_TO_CLIENTS && isStateVisibleToUser(printJob.getState())) || (state == PrintJobInfo.STATE_ANY_ACTIVE && isActiveState(printJob.getState())) || (state == PrintJobInfo.STATE_ANY_SCHEDULED && isScheduledState(printJob.getState()));
            if (sameComponent && sameAppId && sameState) {
                if (foundPrintJobs == null) {
                    foundPrintJobs = new ArrayList<>();
                }
                foundPrintJobs.add(printJob);
            }
        }
    }
    return foundPrintJobs;
}
Also used : PrintJobInfo(android.print.PrintJobInfo) PrinterId(android.print.PrinterId)

Example 30 with PrintJobInfo

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

the class PrintSpoolerService method setPrintJobTag.

public boolean setPrintJobTag(PrintJobId printJobId, String tag) {
    synchronized (mLock) {
        PrintJobInfo printJob = getPrintJobInfo(printJobId, PrintManager.APP_ID_ANY);
        if (printJob != null) {
            String printJobTag = printJob.getTag();
            if (printJobTag == null) {
                if (tag == null) {
                    return false;
                }
            } else if (printJobTag.equals(tag)) {
                return false;
            }
            printJob.setTag(tag);
            if (shouldPersistPrintJob(printJob)) {
                mPersistanceManager.writeStateLocked();
            }
            return true;
        }
    }
    return false;
}
Also used : PrintJobInfo(android.print.PrintJobInfo)

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