summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlade Diviney <mopriadevteam@gmail.com>2018-12-07 15:28:24 -0800
committerandroid-build-merger <android-build-merger@google.com>2018-12-07 15:28:24 -0800
commit65e53fbe6de493ab8362335c4d73d960eb162f3e (patch)
tree217e2576cafe49e775e9960a13545599ee6e1202
parente5baa9c2552eec4c38df2d7e5c138ec2ffefe2fc (diff)
parentbfc37302771f7df4f95a1347fdfc0c61eb6b9206 (diff)
downloadplatform_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.h1
-rw-r--r--jni/include/printer_capabilities_types.h3
-rw-r--r--jni/ipphelper/ipp_print.c6
-rw-r--r--jni/ipphelper/ipphelper.c9
-rw-r--r--jni/ipphelper/ippstatus_capabilities.c1
-rw-r--r--jni/lib/lib_wprint.c16
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]) {