diff options
| author | Glade Diviney <mopriadevteam@gmail.com> | 2018-12-07 15:28:24 -0800 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2018-12-07 15:28:24 -0800 |
| commit | 65e53fbe6de493ab8362335c4d73d960eb162f3e (patch) | |
| tree | 217e2576cafe49e775e9960a13545599ee6e1202 | |
| parent | e5baa9c2552eec4c38df2d7e5c138ec2ffefe2fc (diff) | |
| parent | bfc37302771f7df4f95a1347fdfc0c61eb6b9206 (diff) | |
| download | platform_packages_services_BuiltInPrintService-65e53fbe6de493ab8362335c4d73d960eb162f3e.tar.gz platform_packages_services_BuiltInPrintService-65e53fbe6de493ab8362335c4d73d960eb162f3e.tar.bz2 platform_packages_services_BuiltInPrintService-65e53fbe6de493ab8362335c4d73d960eb162f3e.zip | |
Merge "Print photos in high-quality mode." am: f273e0b943
am: bfc3730277
Change-Id: Ide5bcc9f87dca40f3c2d16fc0695bb495c156fb8
| -rw-r--r-- | jni/include/lib_wprint.h | 1 | ||||
| -rw-r--r-- | jni/include/printer_capabilities_types.h | 3 | ||||
| -rw-r--r-- | jni/ipphelper/ipp_print.c | 6 | ||||
| -rw-r--r-- | jni/ipphelper/ipphelper.c | 9 | ||||
| -rw-r--r-- | jni/ipphelper/ippstatus_capabilities.c | 1 | ||||
| -rw-r--r-- | jni/lib/lib_wprint.c | 16 |
6 files changed, 36 insertions, 0 deletions
diff --git a/jni/include/lib_wprint.h b/jni/include/lib_wprint.h index 147e557..0d2fd12 100644 --- a/jni/include/lib_wprint.h +++ b/jni/include/lib_wprint.h @@ -184,6 +184,7 @@ typedef struct { bool accepts_pclm; bool accepts_pdf; bool copies_supported; + int print_quality; const char *useragent; char docCategory[10]; const char *media_default; diff --git a/jni/include/printer_capabilities_types.h b/jni/include/printer_capabilities_types.h index 0f05b35..677f19c 100644 --- a/jni/include/printer_capabilities_types.h +++ b/jni/include/printer_capabilities_types.h @@ -22,6 +22,7 @@ #define MAX_MEDIA_TRAYS_SUPPORTED 10 #define MAX_MEDIA_TYPES_SUPPORTED 20 #define MAX_RESOLUTIONS_SUPPORTED 10 +#define MAX_QUALITY_SUPPORTED 3 #define MAX_URI_LENGTH 1024 #define MAX_STRING 256 #define MAX_UUID 46 @@ -43,6 +44,8 @@ typedef struct { char location[MAX_STRING]; unsigned char canRotateDuplexBackPage; unsigned char color; + int supportedQuality[MAX_QUALITY_SUPPORTED]; + unsigned int numSupportedQuality; unsigned char faceDownTray; media_size_t supportedMediaSizes[MAX_SIZES_SUPPORTED]; unsigned int numSupportedMediaSizes; diff --git a/jni/ipphelper/ipp_print.c b/jni/ipphelper/ipp_print.c index 57914b3..36b7015 100644 --- a/jni/ipphelper/ipp_print.c +++ b/jni/ipphelper/ipp_print.c @@ -293,6 +293,12 @@ static ipp_t *_fill_job(int ipp_op, char *printer_uri, const wprint_job_params_t ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", job_params->num_copies); } + // Add print quality if requested + if (job_params->print_quality) { + ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", + job_params->print_quality); + } + ippAddResolution(request, IPP_TAG_JOB, "printer-resolution", IPP_RES_PER_INCH, job_params->pixel_units, job_params->pixel_units); if (job_params->duplex == DUPLEX_MODE_BOOK) { diff --git a/jni/ipphelper/ipphelper.c b/jni/ipphelper/ipphelper.c index ec01564..f45060e 100644 --- a/jni/ipphelper/ipphelper.c +++ b/jni/ipphelper/ipphelper.c @@ -784,6 +784,15 @@ void parse_printerAttributes(ipp_t *response, printer_capabilities_t *capabiliti } } } + if ((attrptr = ippFindAttribute(response, "print-quality-supported", IPP_TAG_ENUM)) != + NULL) { + for (i = 0; i < ippGetCount(attrptr) && capabilities->numSupportedQuality + < MAX_QUALITY_SUPPORTED; i++) { + LOGD("print-quality-supported: %d", ippGetInteger(attrptr, i)); + capabilities->supportedQuality[capabilities->numSupportedQuality++] = + ippGetInteger(attrptr, i); + } + } char imagePCLm[] = "application/PCLm"; char imagePWG[] = "image/pwg-raster"; diff --git a/jni/ipphelper/ippstatus_capabilities.c b/jni/ipphelper/ippstatus_capabilities.c index 2c34861..ad784d6 100644 --- a/jni/ipphelper/ippstatus_capabilities.c +++ b/jni/ipphelper/ippstatus_capabilities.c @@ -55,6 +55,7 @@ static const char *pattrs[] = { "media-type-supported", "output-bin-supported", "print-color-mode-supported", + "print-quality-supported", "printer-resolution-supported", "sides-supported", "printer-device-id", diff --git a/jni/lib/lib_wprint.c b/jni/lib/lib_wprint.c index 8af47d6..b8bfbee 100644 --- a/jni/lib/lib_wprint.c +++ b/jni/lib/lib_wprint.c @@ -1455,6 +1455,16 @@ static bool is_supported(media_size_t media_size) { } /* + * Return true if the specified int array of the supplied length contains a value. + */ +static bool int_array_contains(const int *array, int length, int value) { + for (int i = 0; i < length; i++) { + if (array[i] == value) return true; + } + return false; +} + +/* * Checks printers reported media sizes and validates that wprint supports them */ static void _validate_supported_media_sizes(printer_capabilities_t *printer_cap) { @@ -1723,6 +1733,12 @@ status_t wprintGetFinalJobParams(wprint_job_params_t *job_params, job_params->num_copies = 1; } + // If printing photo and HIGH quality is supported, specify it. + if (strcasecmp(job_params->docCategory, "photo") == 0 && int_array_contains( + printer_cap->supportedQuality, printer_cap->numSupportedQuality, IPP_QUALITY_HIGH)) { + job_params->print_quality = IPP_QUALITY_HIGH; + } + // confirm that the media size is supported for (i = 0; i < printer_cap->numSupportedMediaSizes; i++) { if (job_params->media_size == printer_cap->supportedMediaSizes[i]) { |
