Search in sources :

Example 11 with PrintAttributes

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

the class PrintActivity method onAdvancedPrintOptionsActivityResult.

private void onAdvancedPrintOptionsActivityResult(int resultCode, Intent data) {
    if (resultCode != RESULT_OK || data == null) {
        return;
    }
    PrintJobInfo printJobInfo = data.getParcelableExtra(PrintService.EXTRA_PRINT_JOB_INFO);
    if (printJobInfo == null) {
        return;
    }
    // Take the advanced options without interpretation.
    mPrintJob.setAdvancedOptions(printJobInfo.getAdvancedOptions());
    if (printJobInfo.getCopies() < 1) {
        Log.w(LOG_TAG, "Cannot apply return value from advanced options activity. Copies " + "must be 1 or more. Actual value is: " + printJobInfo.getCopies() + ". " + "Ignoring.");
    } else {
        mCopiesEditText.setText(String.valueOf(printJobInfo.getCopies()));
        mPrintJob.setCopies(printJobInfo.getCopies());
    }
    PrintAttributes currAttributes = mPrintJob.getAttributes();
    PrintAttributes newAttributes = printJobInfo.getAttributes();
    if (newAttributes != null) {
        // Take the media size only if the current printer supports is.
        MediaSize oldMediaSize = currAttributes.getMediaSize();
        MediaSize newMediaSize = newAttributes.getMediaSize();
        if (newMediaSize != null && !oldMediaSize.equals(newMediaSize)) {
            final int mediaSizeCount = mMediaSizeSpinnerAdapter.getCount();
            MediaSize newMediaSizePortrait = newAttributes.getMediaSize().asPortrait();
            for (int i = 0; i < mediaSizeCount; i++) {
                MediaSize supportedSizePortrait = mMediaSizeSpinnerAdapter.getItem(i).value.asPortrait();
                if (supportedSizePortrait.equals(newMediaSizePortrait)) {
                    currAttributes.setMediaSize(newMediaSize);
                    mMediaSizeSpinner.setSelection(i);
                    if (currAttributes.getMediaSize().isPortrait()) {
                        if (mOrientationSpinner.getSelectedItemPosition() != 0) {
                            mOrientationSpinner.setSelection(0);
                        }
                    } else {
                        if (mOrientationSpinner.getSelectedItemPosition() != 1) {
                            mOrientationSpinner.setSelection(1);
                        }
                    }
                    break;
                }
            }
        }
        // Take the resolution only if the current printer supports is.
        Resolution oldResolution = currAttributes.getResolution();
        Resolution newResolution = newAttributes.getResolution();
        if (!oldResolution.equals(newResolution)) {
            PrinterCapabilitiesInfo capabilities = mCurrentPrinter.getCapabilities();
            if (capabilities != null) {
                List<Resolution> resolutions = capabilities.getResolutions();
                final int resolutionCount = resolutions.size();
                for (int i = 0; i < resolutionCount; i++) {
                    Resolution resolution = resolutions.get(i);
                    if (resolution.equals(newResolution)) {
                        currAttributes.setResolution(resolution);
                        break;
                    }
                }
            }
        }
        // Take the color mode only if the current printer supports it.
        final int currColorMode = currAttributes.getColorMode();
        final int newColorMode = newAttributes.getColorMode();
        if (currColorMode != newColorMode) {
            final int colorModeCount = mColorModeSpinner.getCount();
            for (int i = 0; i < colorModeCount; i++) {
                final int supportedColorMode = mColorModeSpinnerAdapter.getItem(i).value;
                if (supportedColorMode == newColorMode) {
                    currAttributes.setColorMode(newColorMode);
                    mColorModeSpinner.setSelection(i);
                    break;
                }
            }
        }
        // Take the duplex mode only if the current printer supports it.
        final int currDuplexMode = currAttributes.getDuplexMode();
        final int newDuplexMode = newAttributes.getDuplexMode();
        if (currDuplexMode != newDuplexMode) {
            final int duplexModeCount = mDuplexModeSpinner.getCount();
            for (int i = 0; i < duplexModeCount; i++) {
                final int supportedDuplexMode = mDuplexModeSpinnerAdapter.getItem(i).value;
                if (supportedDuplexMode == newDuplexMode) {
                    currAttributes.setDuplexMode(newDuplexMode);
                    mDuplexModeSpinner.setSelection(i);
                    break;
                }
            }
        }
    }
    // Handle selected page changes making sure they are in the doc.
    PrintDocumentInfo info = mPrintedDocument.getDocumentInfo().info;
    final int pageCount = (info != null) ? getAdjustedPageCount(info) : 0;
    PageRange[] pageRanges = printJobInfo.getPages();
    if (pageRanges != null && pageCount > 0) {
        pageRanges = PageRangeUtils.normalize(pageRanges);
        List<PageRange> validatedList = new ArrayList<>();
        final int rangeCount = pageRanges.length;
        for (int i = 0; i < rangeCount; i++) {
            PageRange pageRange = pageRanges[i];
            if (pageRange.getEnd() >= pageCount) {
                final int rangeStart = pageRange.getStart();
                final int rangeEnd = pageCount - 1;
                if (rangeStart <= rangeEnd) {
                    pageRange = new PageRange(rangeStart, rangeEnd);
                    validatedList.add(pageRange);
                }
                break;
            }
            validatedList.add(pageRange);
        }
        if (!validatedList.isEmpty()) {
            PageRange[] validatedArray = new PageRange[validatedList.size()];
            validatedList.toArray(validatedArray);
            updateSelectedPages(validatedArray, pageCount);
        }
    }
    // Update the content if needed.
    if (canUpdateDocument()) {
        updateDocument(false);
    }
}
Also used : PrinterCapabilitiesInfo(android.print.PrinterCapabilitiesInfo) MediaSize(android.print.PrintAttributes.MediaSize) PrintJobInfo(android.print.PrintJobInfo) ArrayList(java.util.ArrayList) PrintAttributes(android.print.PrintAttributes) RemotePrintDocumentInfo(com.android.printspooler.model.RemotePrintDocument.RemotePrintDocumentInfo) PrintDocumentInfo(android.print.PrintDocumentInfo) Resolution(android.print.PrintAttributes.Resolution) PageRange(android.print.PageRange)

Example 12 with PrintAttributes

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

the class RemotePrintDocument method update.

public boolean update(PrintAttributes attributes, PageRange[] pages, boolean preview) {
    boolean willUpdate;
    if (DEBUG) {
        Log.i(LOG_TAG, "[CALLED] update()");
    }
    if (hasUpdateError()) {
        throw new IllegalStateException("Cannot update without a clearing the failure");
    }
    if (mState == STATE_INITIAL || mState == STATE_FINISHED || mState == STATE_DESTROYED) {
        throw new IllegalStateException("Cannot update in state:" + stateToString(mState));
    }
    // We schedule a layout if the constraints changed.
    if (!mUpdateSpec.hasSameConstraints(attributes, preview)) {
        willUpdate = true;
        // cancellation and start over.
        if (mCurrentCommand != null && (mCurrentCommand.isRunning() || mCurrentCommand.isPending())) {
            mCurrentCommand.cancel(false);
        }
        // Schedule a layout command.
        PrintAttributes oldAttributes = mDocumentInfo.attributes != null ? mDocumentInfo.attributes : new PrintAttributes.Builder().build();
        AsyncCommand command = new LayoutCommand(mLooper, mPrintDocumentAdapter, mDocumentInfo, oldAttributes, attributes, preview, mCommandResultCallback);
        scheduleCommand(command);
        mState = STATE_UPDATING;
    // If no layout in progress and we don't have all pages - schedule a write.
    } else if ((!(mCurrentCommand instanceof LayoutCommand) || (!mCurrentCommand.isPending() && !mCurrentCommand.isRunning())) && pages != null && !PageRangeUtils.contains(mUpdateSpec.pages, pages, mDocumentInfo.info.getPageCount())) {
        willUpdate = true;
        // Cancel the current write as a new one is to be scheduled.
        if (mCurrentCommand instanceof WriteCommand && (mCurrentCommand.isPending() || mCurrentCommand.isRunning())) {
            mCurrentCommand.cancel(false);
        }
        // Schedule a write command.
        AsyncCommand command = new WriteCommand(mContext, mLooper, mPrintDocumentAdapter, mDocumentInfo, mDocumentInfo.info.getPageCount(), pages, mDocumentInfo.fileProvider, mCommandResultCallback);
        scheduleCommand(command);
        mState = STATE_UPDATING;
    } else {
        willUpdate = false;
        if (DEBUG) {
            Log.i(LOG_TAG, "[SKIPPING] No update needed");
        }
    }
    // Keep track of what is requested.
    mUpdateSpec.update(attributes, preview, pages);
    runPendingCommand();
    return willUpdate;
}
Also used : PrintAttributes(android.print.PrintAttributes)

Example 13 with PrintAttributes

use of android.print.PrintAttributes in project platform_frameworks_base by android.

the class PrintActivity method updatePrintAttributesFromCapabilities.

private void updatePrintAttributesFromCapabilities(PrinterCapabilitiesInfo capabilities) {
    boolean clearRanges = false;
    PrintAttributes defaults = capabilities.getDefaults();
    // Sort the media sizes based on the current locale.
    List<MediaSize> sortedMediaSizes = new ArrayList<>(capabilities.getMediaSizes());
    Collections.sort(sortedMediaSizes, mMediaSizeComparator);
    PrintAttributes attributes = mPrintJob.getAttributes();
    // Media size.
    MediaSize currMediaSize = attributes.getMediaSize();
    if (currMediaSize == null) {
        clearRanges = true;
        attributes.setMediaSize(defaults.getMediaSize());
    } else {
        MediaSize newMediaSize = null;
        boolean isPortrait = currMediaSize.isPortrait();
        // Try to find the current media size in the capabilities as
        // it may be in a different orientation.
        MediaSize currMediaSizePortrait = currMediaSize.asPortrait();
        final int mediaSizeCount = sortedMediaSizes.size();
        for (int i = 0; i < mediaSizeCount; i++) {
            MediaSize mediaSize = sortedMediaSizes.get(i);
            if (currMediaSizePortrait.equals(mediaSize.asPortrait())) {
                newMediaSize = mediaSize;
                break;
            }
        }
        // If we did not find the current media size fall back to default.
        if (newMediaSize == null) {
            clearRanges = true;
            newMediaSize = defaults.getMediaSize();
        }
        if (newMediaSize != null) {
            if (isPortrait) {
                attributes.setMediaSize(newMediaSize.asPortrait());
            } else {
                attributes.setMediaSize(newMediaSize.asLandscape());
            }
        }
    }
    // Color mode.
    final int colorMode = attributes.getColorMode();
    if ((capabilities.getColorModes() & colorMode) == 0) {
        attributes.setColorMode(defaults.getColorMode());
    }
    // Duplex mode.
    final int duplexMode = attributes.getDuplexMode();
    if ((capabilities.getDuplexModes() & duplexMode) == 0) {
        attributes.setDuplexMode(defaults.getDuplexMode());
    }
    // Resolution
    Resolution resolution = attributes.getResolution();
    if (resolution == null || !capabilities.getResolutions().contains(resolution)) {
        attributes.setResolution(defaults.getResolution());
    }
    // Margins.
    if (!Objects.equals(attributes.getMinMargins(), defaults.getMinMargins())) {
        clearRanges = true;
    }
    attributes.setMinMargins(defaults.getMinMargins());
    if (clearRanges) {
        clearPageRanges();
    }
}
Also used : MediaSize(android.print.PrintAttributes.MediaSize) ArrayList(java.util.ArrayList) PrintAttributes(android.print.PrintAttributes) Resolution(android.print.PrintAttributes.Resolution)

Example 14 with PrintAttributes

use of android.print.PrintAttributes in project platform_frameworks_base by android.

the class PrintActivity method transformDocumentAndFinish.

private void transformDocumentAndFinish(final Uri writeToUri) {
    // If saving to PDF, apply the attibutes as we are acting as a print service.
    PrintAttributes attributes = mDestinationSpinnerAdapter.getPdfPrinter() == mCurrentPrinter ? mPrintJob.getAttributes() : null;
    new DocumentTransformer(this, mPrintJob, mFileProvider, attributes, new Runnable() {

        @Override
        public void run() {
            if (writeToUri != null) {
                mPrintedDocument.writeContent(getContentResolver(), writeToUri);
            }
            setState(STATE_PRINT_COMPLETED);
            doFinish();
        }
    }).transform();
}
Also used : PrintAttributes(android.print.PrintAttributes)

Example 15 with PrintAttributes

use of android.print.PrintAttributes in project android_frameworks_base by AOSPA.

the class PrintActivity method onAdvancedPrintOptionsActivityResult.

private void onAdvancedPrintOptionsActivityResult(int resultCode, Intent data) {
    if (resultCode != RESULT_OK || data == null) {
        return;
    }
    PrintJobInfo printJobInfo = data.getParcelableExtra(PrintService.EXTRA_PRINT_JOB_INFO);
    if (printJobInfo == null) {
        return;
    }
    // Take the advanced options without interpretation.
    mPrintJob.setAdvancedOptions(printJobInfo.getAdvancedOptions());
    if (printJobInfo.getCopies() < 1) {
        Log.w(LOG_TAG, "Cannot apply return value from advanced options activity. Copies " + "must be 1 or more. Actual value is: " + printJobInfo.getCopies() + ". " + "Ignoring.");
    } else {
        mCopiesEditText.setText(String.valueOf(printJobInfo.getCopies()));
        mPrintJob.setCopies(printJobInfo.getCopies());
    }
    PrintAttributes currAttributes = mPrintJob.getAttributes();
    PrintAttributes newAttributes = printJobInfo.getAttributes();
    if (newAttributes != null) {
        // Take the media size only if the current printer supports is.
        MediaSize oldMediaSize = currAttributes.getMediaSize();
        MediaSize newMediaSize = newAttributes.getMediaSize();
        if (newMediaSize != null && !oldMediaSize.equals(newMediaSize)) {
            final int mediaSizeCount = mMediaSizeSpinnerAdapter.getCount();
            MediaSize newMediaSizePortrait = newAttributes.getMediaSize().asPortrait();
            for (int i = 0; i < mediaSizeCount; i++) {
                MediaSize supportedSizePortrait = mMediaSizeSpinnerAdapter.getItem(i).value.asPortrait();
                if (supportedSizePortrait.equals(newMediaSizePortrait)) {
                    currAttributes.setMediaSize(newMediaSize);
                    mMediaSizeSpinner.setSelection(i);
                    if (currAttributes.getMediaSize().isPortrait()) {
                        if (mOrientationSpinner.getSelectedItemPosition() != 0) {
                            mOrientationSpinner.setSelection(0);
                        }
                    } else {
                        if (mOrientationSpinner.getSelectedItemPosition() != 1) {
                            mOrientationSpinner.setSelection(1);
                        }
                    }
                    break;
                }
            }
        }
        // Take the resolution only if the current printer supports is.
        Resolution oldResolution = currAttributes.getResolution();
        Resolution newResolution = newAttributes.getResolution();
        if (!oldResolution.equals(newResolution)) {
            PrinterCapabilitiesInfo capabilities = mCurrentPrinter.getCapabilities();
            if (capabilities != null) {
                List<Resolution> resolutions = capabilities.getResolutions();
                final int resolutionCount = resolutions.size();
                for (int i = 0; i < resolutionCount; i++) {
                    Resolution resolution = resolutions.get(i);
                    if (resolution.equals(newResolution)) {
                        currAttributes.setResolution(resolution);
                        break;
                    }
                }
            }
        }
        // Take the color mode only if the current printer supports it.
        final int currColorMode = currAttributes.getColorMode();
        final int newColorMode = newAttributes.getColorMode();
        if (currColorMode != newColorMode) {
            final int colorModeCount = mColorModeSpinner.getCount();
            for (int i = 0; i < colorModeCount; i++) {
                final int supportedColorMode = mColorModeSpinnerAdapter.getItem(i).value;
                if (supportedColorMode == newColorMode) {
                    currAttributes.setColorMode(newColorMode);
                    mColorModeSpinner.setSelection(i);
                    break;
                }
            }
        }
        // Take the duplex mode only if the current printer supports it.
        final int currDuplexMode = currAttributes.getDuplexMode();
        final int newDuplexMode = newAttributes.getDuplexMode();
        if (currDuplexMode != newDuplexMode) {
            final int duplexModeCount = mDuplexModeSpinner.getCount();
            for (int i = 0; i < duplexModeCount; i++) {
                final int supportedDuplexMode = mDuplexModeSpinnerAdapter.getItem(i).value;
                if (supportedDuplexMode == newDuplexMode) {
                    currAttributes.setDuplexMode(newDuplexMode);
                    mDuplexModeSpinner.setSelection(i);
                    break;
                }
            }
        }
    }
    // Handle selected page changes making sure they are in the doc.
    PrintDocumentInfo info = mPrintedDocument.getDocumentInfo().info;
    final int pageCount = (info != null) ? getAdjustedPageCount(info) : 0;
    PageRange[] pageRanges = printJobInfo.getPages();
    if (pageRanges != null && pageCount > 0) {
        pageRanges = PageRangeUtils.normalize(pageRanges);
        List<PageRange> validatedList = new ArrayList<>();
        final int rangeCount = pageRanges.length;
        for (int i = 0; i < rangeCount; i++) {
            PageRange pageRange = pageRanges[i];
            if (pageRange.getEnd() >= pageCount) {
                final int rangeStart = pageRange.getStart();
                final int rangeEnd = pageCount - 1;
                if (rangeStart <= rangeEnd) {
                    pageRange = new PageRange(rangeStart, rangeEnd);
                    validatedList.add(pageRange);
                }
                break;
            }
            validatedList.add(pageRange);
        }
        if (!validatedList.isEmpty()) {
            PageRange[] validatedArray = new PageRange[validatedList.size()];
            validatedList.toArray(validatedArray);
            updateSelectedPages(validatedArray, pageCount);
        }
    }
    // Update the content if needed.
    if (canUpdateDocument()) {
        updateDocument(false);
    }
}
Also used : PrinterCapabilitiesInfo(android.print.PrinterCapabilitiesInfo) MediaSize(android.print.PrintAttributes.MediaSize) PrintJobInfo(android.print.PrintJobInfo) ArrayList(java.util.ArrayList) PrintAttributes(android.print.PrintAttributes) RemotePrintDocumentInfo(com.android.printspooler.model.RemotePrintDocument.RemotePrintDocumentInfo) PrintDocumentInfo(android.print.PrintDocumentInfo) Resolution(android.print.PrintAttributes.Resolution) PageRange(android.print.PageRange)

Aggregations

PrintAttributes (android.print.PrintAttributes)30 MediaSize (android.print.PrintAttributes.MediaSize)15 PrinterCapabilitiesInfo (android.print.PrinterCapabilitiesInfo)15 ArrayList (java.util.ArrayList)15 Resolution (android.print.PrintAttributes.Resolution)10 PrintDocumentInfo (android.print.PrintDocumentInfo)10 RemotePrintDocumentInfo (com.android.printspooler.model.RemotePrintDocument.RemotePrintDocumentInfo)10 PageRange (android.print.PageRange)5 PrintJobInfo (android.print.PrintJobInfo)5 InputMethodManager (android.view.inputmethod.InputMethodManager)5