diff options
136 files changed, 2656 insertions, 165 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e87f721..acd23d7 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -18,7 +18,7 @@ <uses-feature android:name="android.hardware.wifi" android:required="false"/> - <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> + <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> @@ -52,6 +52,13 @@ </service> <activity + android:name="com.android.bips.ui.MoreOptionsActivity" + android:theme="@android:style/Theme.DeviceDefault.Settings" + android:configChanges="orientation|screenSize" + android:exported="true" + android:permission="android.permission.START_PRINT_SERVICE_CONFIG_ACTIVITY" /> + + <activity android:name="com.android.bips.ui.AddPrintersActivity" android:label="@string/title_activity_add_printer" android:theme="@android:style/Theme.DeviceDefault.Settings" diff --git a/jni/include/lib_wprint.h b/jni/include/lib_wprint.h index 006f6c1..0d2fd12 100644 --- a/jni/include/lib_wprint.h +++ b/jni/include/lib_wprint.h @@ -184,10 +184,15 @@ typedef struct { bool accepts_pclm; bool accepts_pdf; bool copies_supported; + int print_quality; const char *useragent; char docCategory[10]; const char *media_default; + // Expected certificate if any + uint8 *certificate; + int certificate_len; + // IPP max job-name is 2**31 - 1, we set a shorter limit char job_name[MAX_ID_STRING_LENGTH + 1]; char job_originating_user_name[MAX_NAME_LENGTH + 1]; @@ -198,17 +203,23 @@ typedef struct { bool accepts_os_version; } wprint_job_params_t; +typedef struct wprint_connect_info_st wprint_connect_info_t; + /* * Parameters defining how to reach a remote printing service */ -typedef struct { +struct wprint_connect_info_st { const char *printer_addr; const char *uri_path; const char *uri_scheme; int port_num; /* Timeout per retry in milliseconds */ long timeout; -} wprint_connect_info_t; + /* Return non-0 if the received certificate is not acceptable. */ + int (*validate_certificate)(struct wprint_connect_info_st *connect_info, uint8 *data, int data_len); + /* User-supplied data. */ + void *user; +}; /* * Current state of a queued job @@ -224,6 +235,9 @@ typedef struct { wprint_job_state_t state; unsigned int blocked_reasons; int job_done_result; + // Certificate received from printer, if any + uint8 *certificate; + int certificate_len; } wprint_job_callback_params_t; typedef enum { 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/include/wprint_status_types.h b/jni/include/wprint_status_types.h index 9fe1b1d..80b3c74 100644 --- a/jni/include/wprint_status_types.h +++ b/jni/include/wprint_status_types.h @@ -38,7 +38,8 @@ #define BLOCKED_REASON_IDLE (1 << PRINT_STATUS_IDLE) #define BLOCKED_REASON_CANCELLED (1 << PRINT_STATUS_CANCELLED) #define BLOCKED_REASON_PRINT_STATUS_VERY_LOW_ON_INK (1 << PRINT_STATUS_VERY_LOW_ON_INK) -#define BLOCKED_REASON_PARTIAL_CANCEL (1 << PRINT_STATUS_PARTIAL_CANCEL) +#define BLOCKED_REASON_PARTIAL_CANCEL (1 << PRINT_STATUS_PARTIAL_CANCEL) +#define BLOCKED_REASON_BAD_CERTIFICATE (1 << PRINT_STATUS_BAD_CERTIFICATE) /* * Enumeration for printer statuses @@ -68,6 +69,7 @@ typedef enum { PRINT_STATUS_VERY_LOW_ON_INK, PRINT_STATUS_PARTIAL_CANCEL, + PRINT_STATUS_BAD_CERTIFICATE, PRINT_STATUS_MAX_STATE // Add new entries above this line. } print_status_t; 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 60758ac..d9803e7 100644 --- a/jni/ipphelper/ipphelper.c +++ b/jni/ipphelper/ipphelper.c @@ -643,8 +643,6 @@ void parse_getMediaSupported(ipp_t *response, media_supported_t *media_supported LOGD("media-supported found; number of values %d", ippGetCount(attrptr)); for (i = 0; i < ippGetCount(attrptr); i++) { idx = ipp_find_media_size(ippGetString(attrptr, i, NULL), &media_sizeTemp); - LOGD(" Temp - i: %d idx %d keyword: %s PT_size %d", i, idx, ippGetString( - attrptr, i, NULL), media_sizeTemp); // Modified since anytime the find media size returned 0 it could either mean // NOT found or na_letter. @@ -786,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"; @@ -968,15 +975,14 @@ void parse_printerAttributes(ipp_t *response, printer_capabilities_t *capabiliti LOGD("pclm-compression-method-preferred=%s", ippGetString(attrptr, 0, NULL)); } - // is device able to rotate back page for duplex jobs? - if ((attrptr = ippFindAttribute(response, "pclm-raster-back-side", IPP_TAG_KEYWORD)) != NULL) { - LOGD("pclm-raster-back-side=%s", ippGetString(attrptr, 0, NULL)); - if (strcmp(ippGetString(attrptr, 0, NULL), "rotated") == 0) { - capabilities->canRotateDuplexBackPage = 0; - LOGD("Device cannot rotate back page for duplex jobs."); - } else { - capabilities->canRotateDuplexBackPage = 1; - } + // is device able to rotate back page for duplex jobs? (assume PCLM and PWG are similar) + capabilities->canRotateDuplexBackPage = 0; + if ((attrptr = ippFindAttribute(response, "pclm-raster-back-side", IPP_TAG_KEYWORD)) == NULL) { + attrptr = ippFindAttribute(response, "pwg-raster-document-sheet-back", IPP_TAG_KEYWORD); + } + if (attrptr != NULL && strcmp(ippGetString(attrptr, 0, NULL), "rotated") != 0) { + LOGD("Device can rotate back page for duplex jobs."); + capabilities->canRotateDuplexBackPage = 1; } // look for full-bleed supported by looking for 0 on all margins @@ -1171,11 +1177,29 @@ void debuglist_printerStatus(printer_state_dyn_t *printer_state_dyn) { } } +/* + * Handle server certificate information. + */ +static int ipp_server_cert_cb(http_t *http, void *tls, cups_array_t *certs, void *user_data) { + wprint_connect_info_t *connect_info = (wprint_connect_info_t *)user_data; + int error = 0; + if (connect_info->validate_certificate) { + http_credential_t *credential = cupsArrayFirst(certs); + if (credential) { + LOGD("ipp_server_cert_cb: validate_certificate (len=%d)", credential->datalen); + error = connect_info->validate_certificate(connect_info, credential->data, credential->datalen); + } + } + return error; +} + http_t *ipp_cups_connect(const wprint_connect_info_t *connect_info, char *printer_uri, unsigned int uriLength) { const char *uri_path; http_t *curl_http = NULL; + cupsSetServerCertCB(ipp_server_cert_cb, (void *)connect_info); + if ((connect_info->uri_path == NULL) || (strlen(connect_info->uri_path) == 0)) { uri_path = DEFAULT_IPP_URI_RESOURCE; } else { @@ -1202,6 +1226,8 @@ http_t *ipp_cups_connect(const wprint_connect_info_t *connect_info, char *printe if (curl_http == NULL) { LOGD("ipp_cups_connect failed addr=%s port=%d", connect_info->printer_addr, ippPortNumber); } + + cupsSetServerCertCB(NULL, NULL); return curl_http; } diff --git a/jni/ipphelper/ippstatus_capabilities.c b/jni/ipphelper/ippstatus_capabilities.c index 2c34861..9c596cb 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", @@ -63,6 +64,7 @@ static const char *pattrs[] = { "pclm-strip-height-preferred", "pclm-compression-method-preferred", "pclm-source-resolution-supported", + "pwg-raster-document-sheet-back", "document-format-details-supported" }; diff --git a/jni/lib/lib_wprint.c b/jni/lib/lib_wprint.c index e7aebfe..508c47f 100644 --- a/jni/lib/lib_wprint.c +++ b/jni/lib/lib_wprint.c @@ -154,6 +154,10 @@ typedef struct { char printer_uri[1024]; int job_debug_fd; int page_debug_fd; + + /* A buffer of bytes containing the certificate received while setting up this job, if any. */ + uint8 *certificate; + int certificate_len; } _job_queue_t; /* @@ -480,7 +484,10 @@ static int _recycle_handle(wJob_t job_handle) { } jq->page_debug_fd = -1; jq->debug_path[0] = 0; - + if (jq->certificate) { + free(jq->certificate); + jq->certificate = NULL; + } return OK; } else { return ERROR; @@ -516,6 +523,8 @@ static void _job_status_callback(const printer_state_dyn_t *new_status, statusnew = new_status->printer_status & ~PRINTER_IDLE_BIT; statusold = old_status->printer_status & ~PRINTER_IDLE_BIT; + cb_param.certificate = jq->certificate; + cb_param.certificate_len = jq->certificate_len; LOGD("_job_status_callback(): current printer state: %d", statusnew); blocked_reasons = 0; @@ -689,10 +698,86 @@ static int _start_status_thread(_job_queue_t *jq) { } /* + * Return true unless the server gave an unexpected certificate + */ +static bool _is_certificate_allowed(_job_queue_t *jq) { + int result = true; + + // Compare certificates if both are known + if (jq->job_params.certificate && jq->certificate) { + if (jq->job_params.certificate_len != jq->certificate_len) { + LOGD("_is_certificate_allowed: certificate length mismatch allowed=%d, received=%d", + jq->job_params.certificate_len, jq->certificate_len); + result = false; + } else if (0 != memcmp(jq->job_params.certificate, jq->certificate, jq->certificate_len)) { + LOGD("_is_certificate_allowed: certificate content mismatch"); + result = false; + } else { + LOGD("_is_certificate_allowed: certificate match, len=%d", + jq->job_params.certificate_len); + } + } + + return result; +} + +/* + * Callback from lower layers containing certificate data, if any. + */ +static int _validate_certificate(wprint_connect_info_t *connect_info, uint8 *data, int data_len) { + _job_queue_t *jq = connect_info->user; + LOGD("_validate_certificate: %s://%s:%d%s handling server cert len=%d for job %ld", + connect_info->uri_scheme, connect_info->printer_addr, connect_info->port_num, + connect_info->uri_path, data_len, jq->job_handle); + + // Free any old certificate we have and save new certificate data + if (jq->certificate) { + free(jq->certificate); + jq->certificate = NULL; + } + jq->certificate = (uint8 *)malloc(data_len); + int error = 0; + if (jq->certificate == NULL) { + LOGD("_validate_certificate: malloc failed"); + error = -1; + } else { + memcpy(jq->certificate, data, data_len); + jq->certificate_len = data_len; + if (!_is_certificate_allowed(jq)) { + LOGD("_validate_certificate: received certificate disallowed."); + error = -1; + } + } + return error; +} + +/* + * Initialize the status interface (so we can use it to query for printer status. + */ +static void _initialize_status_ifc(_job_queue_t *jq) { + wprint_connect_info_t connect_info; + connect_info.printer_addr = jq->printer_addr; + connect_info.uri_path = jq->printer_uri; + connect_info.port_num = jq->port_num; + if (jq->use_secure_uri) { + connect_info.uri_scheme = IPPS_PREFIX; + connect_info.user = jq; + connect_info.validate_certificate = _validate_certificate; + } else { + connect_info.uri_scheme = IPP_PREFIX; + connect_info.validate_certificate = NULL; + } + connect_info.timeout = DEFAULT_IPP_TIMEOUT; + + // Initialize the status interface with this connection info + jq->status_ifc->init(jq->status_ifc, &connect_info); +} + +/* * Runs a print job. Contains logic for what to do given different printer statuses. */ static void *_job_thread(void *param) { - wprint_job_callback_params_t cb_param; + wprint_job_callback_params_t cb_param = { 0 }; _msg_t msg; wJob_t job_handle; _job_queue_t *jq; @@ -737,17 +822,7 @@ static void *_job_thread(void *param) { // initialize the status ifc if (jq->status_ifc != NULL) { - wprint_connect_info_t connect_info; - connect_info.printer_addr = jq->printer_addr; - connect_info.uri_path = jq->printer_uri; - connect_info.port_num = jq->port_num; - if (jq->use_secure_uri) { - connect_info.uri_scheme = IPPS_PREFIX; - } else { - connect_info.uri_scheme = IPP_PREFIX; - } - connect_info.timeout = DEFAULT_IPP_TIMEOUT; - jq->status_ifc->init(jq->status_ifc, &connect_info); + _initialize_status_ifc(jq); } // wait for the printer to be idle if ((jq->status_ifc != NULL) && (jq->status_ifc->get_status != NULL)) { @@ -759,6 +834,10 @@ static void *_job_thread(void *param) { jq->status_ifc->get_status(jq->status_ifc, &printer_state); status = printer_state.printer_status & ~PRINTER_IDLE_BIT; + // Pass along any certificate received in future callbacks + cb_param.certificate = jq->certificate; + cb_param.certificate_len = jq->certificate_len; + switch (status) { case PRINT_STATUS_IDLE: printer_state.printer_status = PRINT_STATUS_IDLE; @@ -776,8 +855,13 @@ static void *_job_thread(void *param) { case PRINT_STATUS_SVC_REQUEST: if ((printer_state.printer_reasons[0] == PRINT_STATUS_UNABLE_TO_CONNECT) || (printer_state.printer_reasons[0] == PRINT_STATUS_OFFLINE)) { - LOGD("_job_thread: Received an Unable to Connect message"); - jq->blocked_reasons = BLOCKED_REASON_UNABLE_TO_CONNECT; + if (_is_certificate_allowed(jq)) { + LOGD("_job_thread: Received an Unable to Connect message"); + jq->blocked_reasons = BLOCKED_REASON_UNABLE_TO_CONNECT; + } else { + LOGD("_job_thread: Bad certificate"); + jq->blocked_reasons = BLOCKED_REASON_BAD_CERTIFICATE; + } loop = 0; break; } @@ -960,7 +1044,7 @@ static void *_job_thread(void *param) { jq->job_params.copy_num = (i + 1); jq->job_params.copy_page_num = page.page_num; - jq->job_params.page_backside = (per_copy_page_num & 0x1); + jq->job_params.page_backside = !(per_copy_page_num & 0x1); jq->job_params.page_corrupted = (page.corrupted ? 1 : 0); jq->job_params.page_printing = true; _unlock(); @@ -1006,7 +1090,7 @@ static void *_job_thread(void *param) { // make sure we always print an even number of pages in duplex jobs if (page.last_page && (jq->job_params.duplex != DUPLEX_MODE_NONE) - && (jq->job_params.page_backside) + && !(jq->job_params.page_backside) && (jq->plugin->print_blank_page != NULL)) { _unlock(); jq->plugin->print_blank_page(job_handle, &(jq->job_params)); @@ -1371,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) { @@ -1639,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]) { @@ -2047,6 +2147,8 @@ status_t wprintCancelJob(wJob_t job_handle) { cb_param.state = JOB_DONE; cb_param.blocked_reasons = BLOCKED_REASONS_CANCELLED; cb_param.job_done_result = CANCELLED; + cb_param.certificate = jq->certificate; + cb_param.certificate_len = jq->certificate_len; jq->cb_fn(job_handle, (void *) &cb_param); } diff --git a/jni/lib/printer.c b/jni/lib/printer.c index 55eca67..fa4c9ab 100644 --- a/jni/lib/printer.c +++ b/jni/lib/printer.c @@ -18,6 +18,7 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <sys/stat.h> #include <unistd.h> #include <errno.h> @@ -264,4 +265,4 @@ const ifc_print_job_t *printer_connect(int port_num) { } else { return NULL; } -}
\ No newline at end of file +} diff --git a/jni/lib/wprintJNI.c b/jni/lib/wprintJNI.c index 913198a..869ba7f 100644 --- a/jni/lib/wprintJNI.c +++ b/jni/lib/wprintJNI.c @@ -18,6 +18,7 @@ #include <jni.h> #include "lib_wprint.h" +#include <string.h> #include "wprint_debug.h" #include <errno.h> #include "../plugins/wprint_mupdf.h" @@ -75,6 +76,7 @@ static jfieldID _LocalPrinterCapabilitiesField__mediaDefault; static jfieldID _LocalPrinterCapabilitiesField__supportedMediaTypes; static jfieldID _LocalPrinterCapabilitiesField__supportedMediaSizes; static jfieldID _LocalPrinterCapabilitiesField__nativeData; +static jfieldID _LocalPrinterCapabilitiesField__certificate; static jclass _JobCallbackClass; static jobject _callbackReceiver; @@ -86,6 +88,7 @@ static jfieldID _JobCallbackParamsField__jobId; static jfieldID _JobCallbackParamsField__jobState; static jfieldID _JobCallbackParamsField__jobDoneResult; static jfieldID _JobCallbackParamsField__blockedReasons; +static jfieldID _JobCallbackParamsField__certificate; static jclass _PrintServiceStringsClass; static jfieldID _PrintServiceStringsField__JOB_STATE_QUEUED; @@ -110,6 +113,7 @@ static jfieldID _PrintServiceStringsField__BLOCKED_REASON__SERVICE_REQUEST; static jfieldID _PrintServiceStringsField__BLOCKED_REASON__LOW_ON_INK; static jfieldID _PrintServiceStringsField__BLOCKED_REASON__LOW_ON_TONER; static jfieldID _PrintServiceStringsField__BLOCKED_REASON__REALLY_LOW_ON_INK; +static jfieldID _PrintServiceStringsField__BLOCKED_REASON__BAD_CERTIFICATE; static jfieldID _PrintServiceStringsField__BLOCKED_REASON__UNKNOWN; static jfieldID _PrintServiceStringsField__ALIGNMENT__CENTER; static jfieldID _PrintServiceStringsField__ALIGNMENT__CENTER_HORIZONTAL; @@ -482,6 +486,8 @@ static void _initJNI(JNIEnv *env, jobject callbackReceiver, jstring fakeDir) { env, _LocalPrinterCapabilitiesClass, "supportedMediaSizes", "[I"); _LocalPrinterCapabilitiesField__nativeData = (*env)->GetFieldID( env, _LocalPrinterCapabilitiesClass, "nativeData", "[B"); + _LocalPrinterCapabilitiesField__certificate = (*env)->GetFieldID( + env, _LocalPrinterCapabilitiesClass, "certificate", "[B"); _JobCallbackParamsClass = (jclass) (*env)->NewGlobalRef(env, (*env)->FindClass( env, "com/android/bips/jni/JobCallbackParams")); @@ -495,6 +501,8 @@ static void _initJNI(JNIEnv *env, jobject callbackReceiver, jstring fakeDir) { env, _JobCallbackParamsClass, "jobDoneResult", "Ljava/lang/String;"); _JobCallbackParamsField__blockedReasons = (*env)->GetFieldID( env, _JobCallbackParamsClass, "blockedReasons", "[Ljava/lang/String;"); + _JobCallbackParamsField__certificate = (*env)->GetFieldID( + env, _JobCallbackParamsClass, "certificate", "[B"); if (callbackReceiver) { _callbackReceiver = (jobject) (*env)->NewGlobalRef(env, callbackReceiver); @@ -557,6 +565,9 @@ static void _initJNI(JNIEnv *env, jobject callbackReceiver, jstring fakeDir) { _PrintServiceStringsField__BLOCKED_REASON__REALLY_LOW_ON_INK = (*env)->GetStaticFieldID( env, _PrintServiceStringsClass, "BLOCKED_REASON__REALLY_LOW_ON_INK", "Ljava/lang/String;"); + _PrintServiceStringsField__BLOCKED_REASON__BAD_CERTIFICATE = (*env)->GetStaticFieldID( + env, _PrintServiceStringsClass, "BLOCKED_REASON__BAD_CERTIFICATE", + "Ljava/lang/String;"); _PrintServiceStringsField__BLOCKED_REASON__UNKNOWN = (*env)->GetStaticFieldID( env, _PrintServiceStringsClass, "BLOCKED_REASON__UNKNOWN", "Ljava/lang/String;"); @@ -589,7 +600,7 @@ static int _convertPrinterCaps_to_C(JNIEnv *env, jobject javaPrinterCaps, } jbyte *nativeDataPtr = (*env)->GetByteArrayElements(env, nativeDataObject, NULL); memcpy(wprintPrinterCaps, (const void *) nativeDataPtr, sizeof(printer_capabilities_t)); - (*env)->ReleaseByteArrayElements(env, nativeDataObject, nativeDataPtr, JNI_ABORT); + (*env)->ReleaseByteArrayElements(env, nativeDataObject, nativeDataPtr, 0); return OK; } @@ -1076,6 +1087,10 @@ static void _wprint_callback_fn(wJob_t job_handle, void *param) { jStr = (jstring) (*env)->GetStaticObjectField( env, _PrintServiceStringsClass, _PrintServiceStringsField__BLOCKED_REASON__REALLY_LOW_ON_INK); + } else if (blocked_reasons & BLOCKED_REASON_BAD_CERTIFICATE) { + jStr = (jstring) (*env)->GetStaticObjectField( + env, _PrintServiceStringsClass, + _PrintServiceStringsField__BLOCKED_REASON__BAD_CERTIFICATE); } else if (blocked_reasons & BLOCKED_REASON_UNKNOWN) { jStr = (jstring) (*env)->GetStaticObjectField( env, _PrintServiceStringsClass, @@ -1094,6 +1109,24 @@ static void _wprint_callback_fn(wJob_t job_handle, void *param) { (*env)->SetIntField(env, callbackParams, _JobCallbackParamsField__jobId, (jint) job_handle); + + if (cb_param->certificate) { + LOGI("_wprint_callback_fn: copying certificate len=%d", cb_param->certificate_len); + jbyteArray certificate = (*env)->NewByteArray(env, cb_param->certificate_len); + jbyte *certificateBytes = (*env)->GetByteArrayElements(env, certificate, 0); + memcpy(certificateBytes, (const void *) cb_param->certificate, + cb_param->certificate_len); + (*env)->ReleaseByteArrayElements(env, certificate, certificateBytes, 0); + (*env)->SetObjectField(env, callbackParams, _JobCallbackParamsField__certificate, + certificate); + (*env)->DeleteLocalRef(env, certificate); + } else { + LOGI("_wprint_callback_fn: there is no certificate"); + // No cert, set NULL + (*env)->SetObjectField(env, callbackParams, _JobCallbackParamsField__certificate, + NULL); + } + (*env)->CallVoidMethod(env, _callbackReceiver, _JobCallbackMethod__jobCallback, (jint) job_handle, callbackParams); (*env)->DeleteLocalRef(env, callbackParams); @@ -1160,6 +1193,7 @@ JNIEXPORT jint JNICALL Java_com_android_bips_ipp_Backend_nativeGetCapabilities( connect_info.uri_scheme = copyToNewString(env, uriScheme); connect_info.port_num = port; connect_info.timeout = timeout; + connect_info.validate_certificate = NULL; LOGI("nativeGetCapabilities for %s JNIenv is %p", connect_info.printer_addr, env); @@ -1222,6 +1256,24 @@ JNIEXPORT jint JNICALL Java_com_android_bips_ipp_Backend_nativeGetFinalJobParame } /* + * Convert certificate (if present) from printer capabilities into job_params. + */ +static void _convertCertificate(JNIEnv *env, jobject printerCaps, wprint_job_params_t *params) { + params->certificate = NULL; + jbyteArray certificate = (jbyteArray) (*env)->GetObjectField(env, printerCaps, + _LocalPrinterCapabilitiesField__certificate); + if (certificate) { + params->certificate_len = (*env)->GetArrayLength(env, certificate); + params->certificate = malloc(params->certificate_len); + if (params->certificate) { + jbyte *certificateBytes = (*env)->GetByteArrayElements(env, certificate, NULL); + memcpy(params->certificate, certificateBytes, params->certificate_len); + (*env)->ReleaseByteArrayElements(env, certificate, certificateBytes, JNI_ABORT); + } + } +} + +/* * JNI call to wprint to start a print job. Takes connection params, job params, caps, and file * array to complete the job */ @@ -1238,6 +1290,7 @@ JNIEXPORT jint JNICALL Java_com_android_bips_ipp_Backend_nativeStartJob( _convertJobParams_to_C(env, jobParams, ¶ms); _convertPrinterCaps_to_C(env, printerCaps, &caps); + _convertCertificate(env, printerCaps, ¶ms); LOGD("nativeStartJob: After _convertJobParams_to_C: res=%d, name=%s", params.pdf_render_resolution, params.job_name); @@ -1360,6 +1413,9 @@ JNIEXPORT jint JNICALL Java_com_android_bips_ipp_Backend_nativeStartJob( } } + if (params.certificate) { + free(params.certificate); + } (*env)->ReleaseStringUTFChars(env, mimeType, mimeTypeStr); (*env)->ReleaseStringUTFChars(env, address, addressStr); (*env)->ReleaseStringUTFChars(env, _fakeDir, dataDirStr); @@ -1420,4 +1476,4 @@ JNIEXPORT void JNICALL Java_com_android_bips_ipp_Backend_nativeSetSourceInfo( (*env)->ReleaseStringUTFChars(env, appName, appNameStr); (*env)->ReleaseStringUTFChars(env, appVersion, appVersionStr); (*env)->ReleaseStringUTFChars(env, osName, osNameStr); -}
\ No newline at end of file +} diff --git a/jni/lib/wprint_msgq.c b/jni/lib/wprint_msgq.c index ac412aa..0e20de0 100644 --- a/jni/lib/wprint_msgq.c +++ b/jni/lib/wprint_msgq.c @@ -22,6 +22,7 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <pthread.h> #include <semaphore.h> @@ -155,4 +156,4 @@ int msgQNumMsgs(msg_q_id msgQ) { pthread_mutex_unlock(&(msgq->mutex)); } return num_msgs; -}
\ No newline at end of file +} diff --git a/jni/plugins/lib_pclm.c b/jni/plugins/lib_pclm.c index aed183e..ae44bd6 100644 --- a/jni/plugins/lib_pclm.c +++ b/jni/plugins/lib_pclm.c @@ -19,6 +19,7 @@ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <math.h> #include "lib_pcl.h" @@ -183,6 +184,7 @@ static int _start_page(pcl_job_info_t *job_info, int pixel_width, int pixel_heig int outBuffSize = 0; _START_PAGE(job_info, pixel_width, pixel_height); + job_info->pixel_width = pixel_width; page_info->sourceHeight = (float) pixel_height / job_info->standard_scale; page_info->sourceWidth = (float) pixel_width / job_info->standard_scale; @@ -272,10 +274,14 @@ static int _end_page(pcl_job_info_t *job_info, int page_number) { if (page_number == -1) { LOGI("_end_page(): writing blank page"); - _start_page(job_info, 0, 0); - unsigned char blank_data[1] = {0xFF}; - PCLmEncapsulate(job_info->pclmgen_obj, (void *) blank_data, 1, 1, + _start_page(job_info, job_info->pixel_width, job_info->strip_height); + size_t blank_data_size = (size_t) job_info->strip_height * job_info->pixel_width * + job_info->num_components; + void *blank_data = malloc(blank_data_size); + memset(blank_data, 0xff, blank_data_size); + PCLmEncapsulate(job_info->pclmgen_obj, blank_data, blank_data_size, job_info->strip_height, (void **) &job_info->pclm_output_buffer, &outBuffSize); + free(blank_data); _WRITE(job_info, (const char *) job_info->pclm_output_buffer, outBuffSize); } LOGI("_end_page()"); @@ -308,4 +314,4 @@ static const ifc_pcl_t _pcl_ifc = { ifc_pcl_t *pclm_connect(void) { return ((ifc_pcl_t *) &_pcl_ifc); -}
\ No newline at end of file +} diff --git a/jni/plugins/lib_pwg.c b/jni/plugins/lib_pwg.c index 5f60a10..8e3e525 100644 --- a/jni/plugins/lib_pwg.c +++ b/jni/plugins/lib_pwg.c @@ -70,7 +70,6 @@ static void _write_header_pwg(int pixel_width, int pixel_height, cups_page_heade h->PageSize[1] = (int) h->cupsPageSize[1]; h->Separations = CUPS_TRUE; h->TraySwitch = CUPS_TRUE; - h->Tumble = CUPS_TRUE; h->cupsWidth = pixel_width; h->cupsHeight = pixel_height; h->cupsBitsPerPixel = (monochrome ? 8 : 24); @@ -219,12 +218,15 @@ static wJob_t _start_job(wJob_t job_handle, pcl_job_info_t *job_info, media_size if (duplex == DUPLEX_MODE_BOOK) { job_info->pclm_page_info.duplexDisposition = duplex_longEdge; header_pwg.Duplex = CUPS_TRUE; + header_pwg.Tumble = CUPS_FALSE; } else if (duplex == DUPLEX_MODE_TABLET) { job_info->pclm_page_info.duplexDisposition = duplex_shortEdge; header_pwg.Duplex = CUPS_TRUE; + header_pwg.Tumble = CUPS_TRUE; } else { job_info->pclm_page_info.duplexDisposition = simplex; header_pwg.Duplex = CUPS_FALSE; + header_pwg.Tumble = CUPS_FALSE; } job_info->pclm_page_info.mirrorBackside = false; diff --git a/jni/plugins/plugin_pcl.c b/jni/plugins/plugin_pcl.c index 4170173..ab51c81 100644 --- a/jni/plugins/plugin_pcl.c +++ b/jni/plugins/plugin_pcl.c @@ -18,6 +18,7 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <unistd.h> #include "ifc_print_job.h" #include "lib_pcl.h" @@ -529,4 +530,4 @@ wprint_plugin_t *libwprintplugin_pcl_reg(void) { .get_print_formats = _get_print_formats, .start_job = _start_job, .print_page = _print_page, .print_blank_page = _print_blank_page, .end_job = _end_job,}; return ((wprint_plugin_t *) &_pcl_plugin); -}
\ No newline at end of file +} diff --git a/jni/plugins/plugin_pdf.c b/jni/plugins/plugin_pdf.c index 2e7854b..4c54fd7 100644 --- a/jni/plugins/plugin_pdf.c +++ b/jni/plugins/plugin_pdf.c @@ -18,6 +18,7 @@ #include <stdlib.h> #include <stdio.h> +#include <string.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> @@ -130,4 +131,4 @@ wprint_plugin_t *libwprintplugin_pdf_reg(void) { .get_print_formats = _get_print_formats, .start_job = _start_job, .print_page = _print_page, .print_blank_page = NULL, .end_job = _end_job,}; return ((wprint_plugin_t *) &_pdf_plugin); -}
\ No newline at end of file +} diff --git a/jni/plugins/wprint_image.c b/jni/plugins/wprint_image.c index fc0dc9e..0e5647c 100644 --- a/jni/plugins/wprint_image.c +++ b/jni/plugins/wprint_image.c @@ -17,6 +17,7 @@ */ #include <stdlib.h> +#include <string.h> #include <math.h> #include "wprint_image.h" #include "lib_wprint.h" @@ -1090,4 +1091,4 @@ void wprint_image_cleanup(wprint_image_info_t *image_info) { free(image_info->output_cache); image_info->output_cache = NULL; } -}
\ No newline at end of file +} diff --git a/res/drawable/ic_download_from_market.xml b/res/drawable/ic_download_from_market.xml new file mode 100644 index 0000000..44a5edf --- /dev/null +++ b/res/drawable/ic_download_from_market.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="36dp" + android:height="36dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:pathData="M40,12h-8L32,8l-4,-4h-8l-4,4v4L8,12c-2.21,0 -3.98,1.79 -3.98,4L4,38c0,2.21 1.79,4 4,4h32c2.21,0 4,-1.79 4,-4L44,16c0,-2.21 -1.79,-4 -4,-4zM20,8h8v4h-8L20,8zM24,38L14,28h6v-8h8v8h6L24,38z" + android:fillColor="?android:attr/colorAccent"/> +</vector> diff --git a/res/drawable/ic_settings_gear.xml b/res/drawable/ic_settings_gear.xml new file mode 100644 index 0000000..df02917 --- /dev/null +++ b/res/drawable/ic_settings_gear.xml @@ -0,0 +1,24 @@ +<!-- + Copyright (C) 2017 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector + xmlns:android="http://schemas.android.com/apk/res/android" + android:height="24dp" + android:width="24dp" + android:viewportHeight="48.0" + android:viewportWidth="48.0" + android:tint="?android:attr/colorAccent"> + <path android:fillColor="#000000" android:pathData="M38.86,25.95c0.08,-0.64 0.14,-1.29 0.14,-1.95s-0.06,-1.31 -0.14,-1.95l4.23,-3.31c0.38,-0.3 0.49,-0.84 0.24,-1.28l-4,-6.93c-0.25,-0.43 -0.77,-0.61 -1.22,-0.43l-4.98,2.01c-1.03,-0.79 -2.16,-1.46 -3.38,-1.97L29,4.84c-0.09,-0.47 -0.5,-0.84 -1,-0.84h-8c-0.5,0 -0.91,0.37 -0.99,0.84l-0.75,5.3c-1.22,0.51 -2.35,1.17 -3.38,1.97L9.9,10.1c-0.45,-0.17 -0.97,0 -1.22,0.43l-4,6.93c-0.25,0.43 -0.14,0.97 0.24,1.28l4.22,3.31C9.06,22.69 9,23.34 9,24s0.06,1.31 0.14,1.95l-4.22,3.31c-0.38,0.3 -0.49,0.84 -0.24,1.28l4,6.93c0.25,0.43 0.77,0.61 1.22,0.43l4.98,-2.01c1.03,0.79 2.16,1.46 3.38,1.97l0.75,5.3c0.08,0.47 0.49,0.84 0.99,0.84h8c0.5,0 0.91,-0.37 0.99,-0.84l0.75,-5.3c1.22,-0.51 2.35,-1.17 3.38,-1.97l4.98,2.01c0.45,0.17 0.97,0 1.22,-0.43l4,-6.93c0.25,-0.43 0.14,-0.97 -0.24,-1.28l-4.22,-3.31zM24,31c-3.87,0 -7,-3.13 -7,-7s3.13,-7 7,-7 7,3.13 7,7 -3.13,7 -7,7z"/> +</vector> diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 08836fb..a4ca6a8 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Deur is oop"</string> <string name="printer_jammed" msgid="5104099859384749499">"Iets sit vas"</string> <string name="printer_offline" msgid="9196864753298645066">"Vanlyn"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Swak sertifikaat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nie geënkripteer nie"</string> <string name="printer_check" msgid="6428369671197132828">"Gaan drukker na"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Wag om te stuur"</string> <string name="unreadable_input" msgid="2199948329556527912">"Kon nie dokument lees nie"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Vergeet"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Koppel via Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Koppel via huidige netwerk by <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Sekuriteit"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Hierdie drukker het \'n nuwe sekuriteitsertifikaat verskaf, of \'n ander toestel boots dit tans na. Aanvaar die nuwe sertifikaat?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Hierdie drukker aanvaar nie meer geënkripteerde take nie. Hou aan druk?"</string> + <string name="accept" msgid="4426153292469698134">"Aanvaar"</string> + <string name="reject" msgid="24751635160440693">"Weier"</string> </resources> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 48b0b8f..cc35e64 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"በር ክፍት ነው"</string> <string name="printer_jammed" msgid="5104099859384749499">"ወረቀት ታጭቋል"</string> <string name="printer_offline" msgid="9196864753298645066">"ከመስመር ውጪ"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"መጥፎ የእውቅና ማረጋገጫ"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"አልተመሰጠረም"</string> <string name="printer_check" msgid="6428369671197132828">"አታሚን ይፈትሹ"</string> <string name="waiting_to_send" msgid="2022115199902822180">"ለመላክ በመጠበቅ ላይ"</string> <string name="unreadable_input" msgid="2199948329556527912">"ሰነዱን ማነበብ አልተቻለም"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"እርሳ"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"በWi-Fi Direct በኩል ያገናኛል"</string> <string name="connects_via_network" msgid="5990041581556733898">"አሁን ባለ አውታረ መረብ በኩል በ<xliff:g id="IP_ADDRESS">%1$s</xliff:g> ላይ ያገናኛል"</string> + <string name="security" msgid="2279008326210305401">"ደኅንነት"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"ይህ አታሚ አዲስ የደህንነት እውቅና ማረጋገጫ አቅርቧል፣ ወይም ሌላ መሣሪያ እያስመሰለው ነው። አዲሱ የእውቅና ማረጋገጫ ይቀበሉ?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"ይህ አታሚ ከእንግዲህ የተመሰጠሩ ስራዎችን አይቀበልም። ማተም ይቀጥሉ?"</string> + <string name="accept" msgid="4426153292469698134">"ተቀበል"</string> + <string name="reject" msgid="24751635160440693">"አትቀበል"</string> </resources> diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 87461f6..81fd249 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"الباب مفتوح"</string> <string name="printer_jammed" msgid="5104099859384749499">"الأوراق عالقة"</string> <string name="printer_offline" msgid="9196864753298645066">"بلا اتصال"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"شهادة غير صالحة"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"بدون تشفير"</string> <string name="printer_check" msgid="6428369671197132828">"التحقق من الطابعة"</string> <string name="waiting_to_send" msgid="2022115199902822180">"في انتظار الإرسال"</string> <string name="unreadable_input" msgid="2199948329556527912">"تعذرت قراءة المستند"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"حذف"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"يتم الاتصال عبر اتصال Wi-Fi مباشر."</string> <string name="connects_via_network" msgid="5990041581556733898">"يتم الاتصال عبر الشبكة الحالية باستخدام العنوان <xliff:g id="IP_ADDRESS">%1$s</xliff:g>."</string> + <string name="security" msgid="2279008326210305401">"الأمان"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"قدّمت هذه الطابعة شهادة أمان جديدة، أو هناك جهاز آخر يمثل وظيفتها. هل توافق على الشهادة الجديدة؟"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"لم تعُد هذه الطابعة تقبل المهام المشفّرة. هل تريد متابعة الطباعة؟"</string> + <string name="accept" msgid="4426153292469698134">"موافقة"</string> + <string name="reject" msgid="24751635160440693">"رفض"</string> </resources> diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 13fb929..92c72c1 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Açıq qapı"</string> <string name="printer_jammed" msgid="5104099859384749499">"Sıxılmış"</string> <string name="printer_offline" msgid="9196864753298645066">"Oflayn"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Uyğun olmayan sertifikat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Şifrələnmədi"</string> <string name="printer_check" msgid="6428369671197132828">"Printeri yoxlayın"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Göndərmək üçü gözlənilir"</string> <string name="unreadable_input" msgid="2199948329556527912">"Sənədi oxumaq mümkün deyil"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Unudun"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct ilə qoşulur"</string> <string name="connects_via_network" msgid="5990041581556733898">"Cari şəbəkə ilə <xliff:g id="IP_ADDRESS">%1$s</xliff:g> ünvanında qoşulur"</string> + <string name="security" msgid="2279008326210305401">"Təhlükəsizlik"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Bu printer yeni sertifikat təqdim etdi və ya digər cihaz onun şəxsiyyətini oğurlayır. Yeni sertifikat qəbul edilsin?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Bu printer artıq şifrələnmiş işləri qəbul etmir. Çapa davam edilsin?"</string> + <string name="accept" msgid="4426153292469698134">"Qəbul edin"</string> + <string name="reject" msgid="24751635160440693">"Rədd edin"</string> </resources> diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index 21a4af1..8e82abf 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Vrata su otvorena"</string> <string name="printer_jammed" msgid="5104099859384749499">"Papir je zaglavljen"</string> <string name="printer_offline" msgid="9196864753298645066">"Oflajn"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Neispravan sertifikat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nije šifrovano"</string> <string name="printer_check" msgid="6428369671197132828">"Proverite štampač"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Čeka se na slanje"</string> <string name="unreadable_input" msgid="2199948329556527912">"Čitanje dokumenta nije uspelo"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Zaboravi"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Povezuje se preko Wi-Fi Direct-a"</string> <string name="connects_via_network" msgid="5990041581556733898">"Povezuje se preko trenutne mreže pomoću IP adrese <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Bezbednost"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Ovaj štampač pruža novi bezbednosni sertifikat ili se neki drugi uređaj lažno predstavlja kao on. Želite li da prihvatite novi sertifikat?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Ovaj štampač više ne prihvata šifrovane zadatke. Želite li da nastavite sa štampanjem?"</string> + <string name="accept" msgid="4426153292469698134">"Prihvati"</string> + <string name="reject" msgid="24751635160440693">"Odbij"</string> </resources> diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index fa123e8..f218334 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Дзверцы адкрытыя"</string> <string name="printer_jammed" msgid="5104099859384749499">"Папера захрасла"</string> <string name="printer_offline" msgid="9196864753298645066">"Пазасеткавы рэжым"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Недапушчальны сертыфікат"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Не зашыфравана"</string> <string name="printer_check" msgid="6428369671197132828">"Праверце прынтар"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Чаканне адпраўкі"</string> <string name="unreadable_input" msgid="2199948329556527912">"Не атрымалася прачытаць дакумент"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Забыць"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Падключэнне праз Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Падключэнне праз бягучую сетку па адрасе <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Бяспека"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Гэты прынтар мае новы сертыфікат бяспекі, ці пад яго выглядам працуе іншая прылада. Прыняць новы сертыфікат?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Гэты прынтар больш не прымае зашыфраваныя заданні. Прадоўжыць друкаванне?"</string> + <string name="accept" msgid="4426153292469698134">"Прыняць"</string> + <string name="reject" msgid="24751635160440693">"Адхіліць"</string> </resources> diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 75a8020..3c87dfd 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Входът е отворен"</string> <string name="printer_jammed" msgid="5104099859384749499">"Заседнала хартия"</string> <string name="printer_offline" msgid="9196864753298645066">"Офлайн"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Невалиден сертификат"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Нешифровано"</string> <string name="printer_check" msgid="6428369671197132828">"Проверка на принтера"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Изчаква се изпращане"</string> <string name="unreadable_input" msgid="2199948329556527912">"Документът не можа да бъде прочетен"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Забравяне"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Свързва се чрез Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Свързва се чрез текущата мрежа на адрес <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Сигурност"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Този принтер предостави нов сертификат за сигурност или друго устройство се представя за него. Приемате ли новия сертификат?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Този принтер вече не приема шифровани задания. Искате ли да продължите да отпечатвате?"</string> + <string name="accept" msgid="4426153292469698134">"Приемам"</string> + <string name="reject" msgid="24751635160440693">"Отхвърляне"</string> </resources> diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index b8cb801..4ce1715 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"ঢাকনাটি খোলা"</string> <string name="printer_jammed" msgid="5104099859384749499">"জ্যাম হয়েছে"</string> <string name="printer_offline" msgid="9196864753298645066">"অফলাইন"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"খারাপ সার্টিফিকেট"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"এনক্রিপ্ট করা হয়নি"</string> <string name="printer_check" msgid="6428369671197132828">"প্রিন্টারটি পরীক্ষা করুন"</string> <string name="waiting_to_send" msgid="2022115199902822180">"পাঠানোর জন্য অপেক্ষা করা হচ্ছে"</string> <string name="unreadable_input" msgid="2199948329556527912">"দস্তাবেজটি পড়া যাবেনা"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"ভুলে যান"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"ওয়াই-ফাই ডাইরেক্টের মাধ্যমে সংযুক্ত হয়"</string> <string name="connects_via_network" msgid="5990041581556733898">"বর্তমান নেটওয়ার্কের মাধ্যমে <xliff:g id="IP_ADDRESS">%1$s</xliff:g> অ্যাড্রেসে সংযুক্ত হয়"</string> + <string name="security" msgid="2279008326210305401">"নিরাপত্তা"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"এই প্রিন্টার একটি নতুন নিরাপত্তার সার্টিফিকেট দেবে, অথবা ডিভাইস থেকে এটি ব্যবহার করা হচ্ছে। নতুন সার্টিফিকেট গ্রহণ করতে চান?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"এই প্রিন্টারের মাধ্যমে আর এনক্রিপ্ট করা ডকুমেন্ট প্রিন্ট করা যাবে না। প্রিন্টিং করা চালিয়ে যেতে চান?"</string> + <string name="accept" msgid="4426153292469698134">"গ্রহণ করুন"</string> + <string name="reject" msgid="24751635160440693">"বাতিল করুন"</string> </resources> diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index d505d6a..9c901ca 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Poklopac je otvoren"</string> <string name="printer_jammed" msgid="5104099859384749499">"Zaglavljeno"</string> <string name="printer_offline" msgid="9196864753298645066">"Van mreže"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Pogrešna potvrda"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nije šifrirano"</string> <string name="printer_check" msgid="6428369671197132828">"Provjerite štampač"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Čeka se slanje"</string> <string name="unreadable_input" msgid="2199948329556527912">"Dokument nije pročitan"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Zaboravi"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Povezivanje putem opcije WiFi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Povezivanje putem trenutne mreže na <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Sigurnost"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Ovaj štampač je pružio novu potvrdu sigurnosti ili ga drugi uređaj imitira. Prihvatiti novu potvrdu?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Ovaj štampač više ne prihvata šifrirane zadatke. Nastaviti štampati?"</string> + <string name="accept" msgid="4426153292469698134">"Prihvati"</string> + <string name="reject" msgid="24751635160440693">"Odbij"</string> </resources> diff --git a/res/values-ca/lineage_strings.xml b/res/values-ca/lineage_strings.xml new file mode 100644 index 0000000..6f25f8d --- /dev/null +++ b/res/values-ca/lineage_strings.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">Impressió Wi-Fi Direct</string> + <string name="recommendation_summary">El servei d\'impressió per defecte proporciona opcions bàsiques. Podeu disposar d\'altres opcions per a aquesta impressora des d\'un altre servei d\'impressió.</string> + <string name="recommendations_heading">Serveis recomanats</string> + <string name="recommendation_install_summary">Seleccioneu per instal·lar-lo</string> + <string name="recommendation_enable_summary">Seleccioneu-lo per activar-lo</string> + <string name="recommendation_manage">Gestiona els serveis</string> + <string name="connections">Connexions</string> + <string name="wifi_direct_permission_rationale">El servei d\'impressió per defecte necessita permisos d\'ubicació + per accedir a les impresores Wi-Fi Direct perquè la vostra ubicació pot inferir als dispositius propers.</string> + <string name="fix">Repara</string> +</resources> diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index f4f1c31..0df42ed 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Porta oberta"</string> <string name="printer_jammed" msgid="5104099859384749499">"Paper encallat"</string> <string name="printer_offline" msgid="9196864753298645066">"Sense connexió"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificat incorrecte"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Sense encriptar"</string> <string name="printer_check" msgid="6428369671197132828">"Comprova la impressora"</string> <string name="waiting_to_send" msgid="2022115199902822180">"S\'està esperant que s\'enviï"</string> <string name="unreadable_input" msgid="2199948329556527912">"No s\'ha pogut llegir el document"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Oblida"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Es connecta per Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Es connecta a través de la xarxa actual a l\'adreça IP <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Seguretat"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Aquesta impressora ha proporcionat un certificat de seguretat nou o bé hi ha un altre dispositiu suplantant-la. Vols acceptar el certificat nou?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Aquesta impressora ja no accepta tasques encriptades. Vols continuar imprimint?"</string> + <string name="accept" msgid="4426153292469698134">"Accepta"</string> + <string name="reject" msgid="24751635160440693">"Rebutja"</string> </resources> diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 8dfd423..38a8cac 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Otevřená dvířka"</string> <string name="printer_jammed" msgid="5104099859384749499">"Zaseknutý papír"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Nesprávný certifikát"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Není šifrováno"</string> <string name="printer_check" msgid="6428369671197132828">"Zkontrolovat tiskárnu"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Čekání na odeslání"</string> <string name="unreadable_input" msgid="2199948329556527912">"Dokument nelze přečíst"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Odstranit"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Připojení prostřednictvím Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Připojení prostřednictvím stávající sítě s IP adresou <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Zabezpečení"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Tato tiskárna poskytla nový bezpečnostní certifikát, nebo se za ni vydává jiné zařízení. Chcete nový certifikát přijmout?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Tato tiskárna už nepřijímá šifrované tiskové úlohy. Pokračovat v tisku?"</string> + <string name="accept" msgid="4426153292469698134">"Přijmout"</string> + <string name="reject" msgid="24751635160440693">"Odmítnout"</string> </resources> diff --git a/res/values-cy/lineage_strings.xml b/res/values-cy/lineage_strings.xml new file mode 100644 index 0000000..3f93a51 --- /dev/null +++ b/res/values-cy/lineage_strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">Argraffu Wi-Fi Uniongyrchol</string> + <string name="recommendation_summary">Mae\'r Gwasanaeth Argraffu Rhagosodedig yn cynnig dewisiadau sylfaenol. Gall fod rhagor o ddewisiadau ar gyfer yr argraffydd hwn ar gael gan wasanaeth argraffu arall.</string> + <string name="recommendations_heading">Gwasanaethau argymelledig</string> + <string name="recommendation_install_summary">Dewisa i osod</string> + <string name="recommendation_enable_summary">Dewisa i alluogi</string> + <string name="recommendation_manage">Rheoli gwasanaethau</string> + <string name="connections">Cysylltiadau</string> + <string name="wifi_direct_permission_rationale">Mae ar Wasanaeth Argraffu Rhagosodedig angen caniatâd lleoliad er cysylltu ag argraffyddion Wi-Fi Uniongyrchol am na ellir canfod dy leoliad o ddyfeisiau gerllaw.</string> + <string name="fix">Trwsio</string> +</resources> diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 12863f5..2e1ef92 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Lågen er åben"</string> <string name="printer_jammed" msgid="5104099859384749499">"Papirstop"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Ugyldigt certifikat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Ikke krypteret"</string> <string name="printer_check" msgid="6428369671197132828">"Tjek printeren"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Venter på at sende"</string> <string name="unreadable_input" msgid="2199948329556527912">"Dokumentet kunne ikke læses"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Glem"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Opretter forbindelse via Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Opretter forbindelse via netværk med adressen <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Sikkerhed"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Denne printer angav et nyt sikkerhedscertifikat, eller en anden enhed efterligner den. Vil du acceptere det nye certifikat?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Denne printer understøtter ikke længere krypterede jobs. Vil du fortsætte med at udskrive?"</string> + <string name="accept" msgid="4426153292469698134">"Acceptér"</string> + <string name="reject" msgid="24751635160440693">"Afvis"</string> </resources> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 5f5169d..e97f9e9 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Klappe geöffnet"</string> <string name="printer_jammed" msgid="5104099859384749499">"Papierstau"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Ungültiges Zertifikat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nicht verschlüsselt"</string> <string name="printer_check" msgid="6428369671197132828">"Drucker prüfen"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Auf Senden wird gewartet"</string> <string name="unreadable_input" msgid="2199948329556527912">"Dokument konnte nicht gelesen werden"</string> @@ -49,7 +51,7 @@ <string name="find_wifi_direct" msgid="5270504288829123954">"Wi-Fi Direct-Drucker suchen"</string> <string name="wifi_direct_printers" msgid="541168032444693191">"Wi-Fi Direct-Drucker"</string> <string name="searching" msgid="2114018057619514587">"Wird gesucht…"</string> - <string name="connect_hint_text" msgid="587112503851044234">"Möglicherweise musst du diese Verbindung auf dem Display deines Druckers bestätigen"</string> + <string name="connect_hint_text" msgid="587112503851044234">"Eventuell musst du diese Verbindung auf dem Display deines Druckers bestätigen"</string> <string name="connecting_to" msgid="2665161014972086194">"Verbindung zu <xliff:g id="PRINTER">%1$s</xliff:g> wird hergestellt"</string> <string name="failed_printer_connection" msgid="4196305972749960362">"Es konnte keine Verbindung zum Drucker hergestellt werden"</string> <string name="failed_connection" msgid="8068661997318286575">"Es konnte keine Verbindung zu <xliff:g id="PRINTER">%1$s</xliff:g> hergestellt werden"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Entfernen"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Verbindung über Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Verbindung über das aktuelle Netzwerk mit der IP-Adresse <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Sicherheit"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Dieser Drucker hat ein neues Sicherheitszertifikat oder ein anderes Gerät nutzt dessen Identität. Möchtest du das neue Zertifikat akzeptieren?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Dieser Drucker akzeptiert keine verschlüsselten Aufträge mehr. Weiter drucken?"</string> + <string name="accept" msgid="4426153292469698134">"Akzeptieren"</string> + <string name="reject" msgid="24751635160440693">"Ablehnen"</string> </resources> diff --git a/res/values-el/lineage_strings.xml b/res/values-el/lineage_strings.xml new file mode 100644 index 0000000..0ce4b3b --- /dev/null +++ b/res/values-el/lineage_strings.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">Εκτύπωση Wi-Fi Direct</string> + <string name="recommendation_summary">Η προεπιλεγμένη υπηρεσία εκτύπωσης παρέχει βασικές επιλογές. Άλλες επιλογές για αυτόν τον εκτυπωτή ενδέχεται να είναι διαθέσιμες από άλλη υπηρεσία εκτύπωσης.</string> + <string name="recommendations_heading">Συνιστώμενες υπηρεσίες</string> + <string name="recommendation_install_summary">Επιλέξτε για εγκατάσταση</string> + <string name="recommendation_enable_summary">Επιλέξτε για ενεργοποίηση</string> + <string name="recommendation_manage">Διαχείριση υπηρεσιών</string> + <string name="connections">Συνδέσεις</string> + <string name="wifi_direct_permission_rationale">Η προεπιλεγμένη υπηρεσία εκτύπωσης χρειάζεται δικαιώματα τοποθεσίας + για πρόσβαση σε εκτυπωτές Wi-Fi Direct, επειδή η τοποθεσία σας μπορεί να συναχθεί από κοντινές συσκευές.</string> + <string name="fix">Επιδιόρθωση</string> +</resources> diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 9a0584d..24d189e 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Η θύρα είναι ανοιχτή"</string> <string name="printer_jammed" msgid="5104099859384749499">"Εμπλοκή χαρτιού"</string> <string name="printer_offline" msgid="9196864753298645066">"Εκτός σύνδεσης"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Ακατάλληλο πιστοποιητικό"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Χωρίς κρυπτογράφηση"</string> <string name="printer_check" msgid="6428369671197132828">"Έλεγχος εκτυπωτή"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Αναμονή για αποστολή"</string> <string name="unreadable_input" msgid="2199948329556527912">"Δεν ήταν δυνατή η ανάγνωση του εγγράφου"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Κατάργηση απομνημόνευσης"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Συνδέεται μέσω του Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Συνδέεται μέσω του τρέχοντος δικτύου στη διεύθυνση <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Ασφάλεια"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Αυτός ο εκτυπωτής παρείχε ένα νέο πιστοποιητικό ασφαλείας ή κάποια άλλη συσκευή έχει κλέψει τα στοιχεία ταυτότητάς του. Αποδοχή του νέου πιστοποιητικού ασφαλείας;"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Αυτός ο εκτυπωτής δεν δέχεται πλέον κρυπτογραφημένες εργασίες. Να συνεχιστεί η εκτύπωση;"</string> + <string name="accept" msgid="4426153292469698134">"Αποδοχή"</string> + <string name="reject" msgid="24751635160440693">"Απόρριψη"</string> </resources> diff --git a/res/values-en-rAU/lineage_strings.xml b/res/values-en-rAU/lineage_strings.xml new file mode 100644 index 0000000..3409960 --- /dev/null +++ b/res/values-en-rAU/lineage_strings.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">Wi-Fi Direct printing</string> + <string name="recommendation_summary">The Default Print Service provides basic options. Other options for this printer may be available from another print service.</string> + <string name="recommendations_heading">Recommended services</string> + <string name="recommendation_install_summary">Select to install</string> + <string name="recommendation_enable_summary">Select to enable</string> + <string name="recommendation_manage">Manage services</string> + <string name="connections">Connections</string> + <string name="wifi_direct_permission_rationale">Default Print Service needs location permissions + to access Wi-Fi Direct printers because your location can be inferred from nearby devices.</string> + <string name="fix">Fix</string> +</resources> diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 6b6d47d..9e23076 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Door open"</string> <string name="printer_jammed" msgid="5104099859384749499">"Jammed"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Bad certificate"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Not encrypted"</string> <string name="printer_check" msgid="6428369671197132828">"Check printer"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Waiting to send"</string> <string name="unreadable_input" msgid="2199948329556527912">"Could not read document"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Forget"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Connects via Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Connects via current network at <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Security"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"This printer provided a new security certificate, or another device is impersonating it. Accept the new certificate?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"This printer no longer accepts encrypted jobs. Continue printing?"</string> + <string name="accept" msgid="4426153292469698134">"Accept"</string> + <string name="reject" msgid="24751635160440693">"Reject"</string> </resources> diff --git a/res/values-en-rCA/lineage_strings.xml b/res/values-en-rCA/lineage_strings.xml new file mode 100644 index 0000000..3409960 --- /dev/null +++ b/res/values-en-rCA/lineage_strings.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">Wi-Fi Direct printing</string> + <string name="recommendation_summary">The Default Print Service provides basic options. Other options for this printer may be available from another print service.</string> + <string name="recommendations_heading">Recommended services</string> + <string name="recommendation_install_summary">Select to install</string> + <string name="recommendation_enable_summary">Select to enable</string> + <string name="recommendation_manage">Manage services</string> + <string name="connections">Connections</string> + <string name="wifi_direct_permission_rationale">Default Print Service needs location permissions + to access Wi-Fi Direct printers because your location can be inferred from nearby devices.</string> + <string name="fix">Fix</string> +</resources> diff --git a/res/values-en-rGB/lineage_strings.xml b/res/values-en-rGB/lineage_strings.xml new file mode 100644 index 0000000..3409960 --- /dev/null +++ b/res/values-en-rGB/lineage_strings.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">Wi-Fi Direct printing</string> + <string name="recommendation_summary">The Default Print Service provides basic options. Other options for this printer may be available from another print service.</string> + <string name="recommendations_heading">Recommended services</string> + <string name="recommendation_install_summary">Select to install</string> + <string name="recommendation_enable_summary">Select to enable</string> + <string name="recommendation_manage">Manage services</string> + <string name="connections">Connections</string> + <string name="wifi_direct_permission_rationale">Default Print Service needs location permissions + to access Wi-Fi Direct printers because your location can be inferred from nearby devices.</string> + <string name="fix">Fix</string> +</resources> diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 6b6d47d..9e23076 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Door open"</string> <string name="printer_jammed" msgid="5104099859384749499">"Jammed"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Bad certificate"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Not encrypted"</string> <string name="printer_check" msgid="6428369671197132828">"Check printer"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Waiting to send"</string> <string name="unreadable_input" msgid="2199948329556527912">"Could not read document"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Forget"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Connects via Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Connects via current network at <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Security"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"This printer provided a new security certificate, or another device is impersonating it. Accept the new certificate?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"This printer no longer accepts encrypted jobs. Continue printing?"</string> + <string name="accept" msgid="4426153292469698134">"Accept"</string> + <string name="reject" msgid="24751635160440693">"Reject"</string> </resources> diff --git a/res/values-en-rIN/lineage_strings.xml b/res/values-en-rIN/lineage_strings.xml new file mode 100644 index 0000000..3409960 --- /dev/null +++ b/res/values-en-rIN/lineage_strings.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">Wi-Fi Direct printing</string> + <string name="recommendation_summary">The Default Print Service provides basic options. Other options for this printer may be available from another print service.</string> + <string name="recommendations_heading">Recommended services</string> + <string name="recommendation_install_summary">Select to install</string> + <string name="recommendation_enable_summary">Select to enable</string> + <string name="recommendation_manage">Manage services</string> + <string name="connections">Connections</string> + <string name="wifi_direct_permission_rationale">Default Print Service needs location permissions + to access Wi-Fi Direct printers because your location can be inferred from nearby devices.</string> + <string name="fix">Fix</string> +</resources> diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 6b6d47d..9e23076 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Door open"</string> <string name="printer_jammed" msgid="5104099859384749499">"Jammed"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Bad certificate"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Not encrypted"</string> <string name="printer_check" msgid="6428369671197132828">"Check printer"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Waiting to send"</string> <string name="unreadable_input" msgid="2199948329556527912">"Could not read document"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Forget"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Connects via Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Connects via current network at <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Security"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"This printer provided a new security certificate, or another device is impersonating it. Accept the new certificate?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"This printer no longer accepts encrypted jobs. Continue printing?"</string> + <string name="accept" msgid="4426153292469698134">"Accept"</string> + <string name="reject" msgid="24751635160440693">"Reject"</string> </resources> diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml index 06cf494..9aab97b 100644 --- a/res/values-en-rXC/strings.xml +++ b/res/values-en-rXC/strings.xml @@ -17,44 +17,44 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="3551052199033657984">"Default Print Service"</string> - <string name="printer_busy" msgid="8604311528104955859">"Busy"</string> - <string name="printer_out_of_paper" msgid="4882186432807703877">"Out of paper"</string> - <string name="printer_out_of_ink" msgid="7361897651097675464">"Out of ink"</string> - <string name="printer_out_of_toner" msgid="2077516357225364154">"Out of toner"</string> - <string name="printer_low_on_ink" msgid="3515015872393897705">"Low on ink"</string> - <string name="printer_low_on_toner" msgid="8807858294038587130">"Low on toner"</string> - <string name="printer_door_open" msgid="2446302931916940874">"Door open"</string> - <string name="printer_jammed" msgid="5104099859384749499">"Jammed"</string> - <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> - <string name="printer_check" msgid="6428369671197132828">"Check printer"</string> - <string name="waiting_to_send" msgid="2022115199902822180">"Waiting to send"</string> - <string name="unreadable_input" msgid="2199948329556527912">"Could not read document"</string> - <string name="media_size_l" msgid="164416542021598181">"L"</string> - <string name="media_size_5x7in" msgid="1275128379533195285">"5x7 in"</string> - <string name="media_size_89x119mm" msgid="6828167243395807385">"89x119 mm"</string> - <string name="media_size_54x86mm" msgid="1301991206183343895">"54x86 mm"</string> - <string name="media_size_8x10in" msgid="1872576638522812402">"8x10 in"</string> - <string name="media_size_4x6in" msgid="3093276425529958253">"4x6 in"</string> - <string name="printer_description" msgid="8580767673213837142">"%1$s – %2$s"</string> - <string name="title_activity_add_printer" msgid="9119216095769228566">"Add printer"</string> - <string name="add_printer_by_ip" msgid="562864787592910327">"Add printer by IP address"</string> - <string name="hostname_or_ip" msgid="3460546103553992915">"Hostname or IP address"</string> - <string name="ip_hint" msgid="7939777481941979799">"192.168.0.4"</string> - <string name="add" msgid="1950342261671100906">"Add"</string> - <string name="add_named" msgid="9074106244018070583">"Add <xliff:g id="PRINTER">%1$s</xliff:g>"</string> - <string name="no_printer_found" msgid="4777867380924351173">"No printer found at this address"</string> - <string name="printer_not_supported" msgid="281955849350938408">"Printer not supported"</string> - <string name="wifi_direct" msgid="4629404342852294985">"Wi-Fi Direct"</string> - <string name="find_wifi_direct" msgid="5270504288829123954">"Find Wi-Fi Direct printers"</string> - <string name="wifi_direct_printers" msgid="541168032444693191">"Wi-Fi Direct printers"</string> - <string name="searching" msgid="2114018057619514587">"Searching…"</string> - <string name="connect_hint_text" msgid="587112503851044234">"You may need to approve this connection on your printer\'s front panel"</string> - <string name="connecting_to" msgid="2665161014972086194">"Connecting to <xliff:g id="PRINTER">%1$s</xliff:g>"</string> - <string name="failed_printer_connection" msgid="4196305972749960362">"Could not connect to printer"</string> - <string name="failed_connection" msgid="8068661997318286575">"Could not connect to <xliff:g id="PRINTER">%1$s</xliff:g>"</string> - <string name="saved_printers" msgid="4567534965213125526">"Saved printers"</string> - <string name="forget" msgid="892068061425802502">"Forget"</string> - <string name="connects_via_wifi_direct" msgid="652300632780158437">"Connects via Wi-Fi Direct"</string> - <string name="connects_via_network" msgid="5990041581556733898">"Connects via current network at <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="app_name" msgid="3551052199033657984">"Default Print Service"</string> + <string name="printer_busy" msgid="8604311528104955859">"Busy"</string> + <string name="printer_out_of_paper" msgid="4882186432807703877">"Out of paper"</string> + <string name="printer_out_of_ink" msgid="7361897651097675464">"Out of ink"</string> + <string name="printer_out_of_toner" msgid="2077516357225364154">"Out of toner"</string> + <string name="printer_low_on_ink" msgid="3515015872393897705">"Low on ink"</string> + <string name="printer_low_on_toner" msgid="8807858294038587130">"Low on toner"</string> + <string name="printer_door_open" msgid="2446302931916940874">"Door open"</string> + <string name="printer_jammed" msgid="5104099859384749499">"Jammed"</string> + <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_check" msgid="6428369671197132828">"Check printer"</string> + <string name="waiting_to_send" msgid="2022115199902822180">"Waiting to send"</string> + <string name="unreadable_input" msgid="2199948329556527912">"Could not read document"</string> + <string name="media_size_l" msgid="164416542021598181">"L"</string> + <string name="media_size_5x7in" msgid="1275128379533195285">"5x7 in"</string> + <string name="media_size_89x119mm" msgid="6828167243395807385">"89x119 mm"</string> + <string name="media_size_54x86mm" msgid="1301991206183343895">"54x86 mm"</string> + <string name="media_size_8x10in" msgid="1872576638522812402">"8x10 in"</string> + <string name="media_size_4x6in" msgid="3093276425529958253">"4x6 in"</string> + <string name="printer_description" msgid="8580767673213837142">"%1$s – %2$s"</string> + <string name="title_activity_add_printer" msgid="9119216095769228566">"Add printer"</string> + <string name="add_printer_by_ip" msgid="562864787592910327">"Add printer by IP address"</string> + <string name="hostname_or_ip" msgid="3460546103553992915">"Hostname or IP address"</string> + <string name="ip_hint" msgid="7939777481941979799">"192.168.0.4"</string> + <string name="add" msgid="1950342261671100906">"Add"</string> + <string name="add_named" msgid="9074106244018070583">"Add <xliff:g id="PRINTER">%1$s</xliff:g>"</string> + <string name="no_printer_found" msgid="4777867380924351173">"No printer found at this address"</string> + <string name="printer_not_supported" msgid="281955849350938408">"Printer not supported"</string> + <string name="wifi_direct" msgid="4629404342852294985">"Wi-Fi Direct"</string> + <string name="find_wifi_direct" msgid="5270504288829123954">"Find Wi-Fi Direct printers"</string> + <string name="wifi_direct_printers" msgid="541168032444693191">"Wi-Fi Direct printers"</string> + <string name="searching" msgid="2114018057619514587">"Searching…"</string> + <string name="connect_hint_text" msgid="587112503851044234">"You may need to approve this connection on your printer\'s front panel"</string> + <string name="connecting_to" msgid="2665161014972086194">"Connecting to <xliff:g id="PRINTER">%1$s</xliff:g>"</string> + <string name="failed_printer_connection" msgid="4196305972749960362">"Could not connect to printer"</string> + <string name="failed_connection" msgid="8068661997318286575">"Could not connect to <xliff:g id="PRINTER">%1$s</xliff:g>"</string> + <string name="saved_printers" msgid="4567534965213125526">"Saved printers"</string> + <string name="forget" msgid="892068061425802502">"Forget"</string> + <string name="connects_via_wifi_direct" msgid="652300632780158437">"Connects via Wi-Fi Direct"</string> + <string name="connects_via_network" msgid="5990041581556733898">"Connects via current network at <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> </resources> diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index f86ec88..b3d9f11 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Puerta abierta"</string> <string name="printer_jammed" msgid="5104099859384749499">"Papel atascado"</string> <string name="printer_offline" msgid="9196864753298645066">"Sin conexión"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificado incorrecto"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Sin encriptar"</string> <string name="printer_check" msgid="6428369671197132828">"Verificar impresora"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Esperando para enviar"</string> <string name="unreadable_input" msgid="2199948329556527912">"No se pudo leer el documento"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Olvidar"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Se conecta mediante Wi-Fi directo"</string> <string name="connects_via_network" msgid="5990041581556733898">"Se conecta mediante la red actual a <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Seguridad"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Esta impresora emitió un nuevo certificado de seguridad, o bien está suplantándola otro dispositivo. ¿Quieres aceptar el nuevo certificado?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Esta impresora ya no acepta tareas encriptadas. ¿Quieres continuar con la impresión?"</string> + <string name="accept" msgid="4426153292469698134">"Aceptar"</string> + <string name="reject" msgid="24751635160440693">"Rechazar"</string> </resources> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 9864468..ad2f0a1 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Puerta abierta"</string> <string name="printer_jammed" msgid="5104099859384749499">"Atascada"</string> <string name="printer_offline" msgid="9196864753298645066">"Sin conexión"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificado erróneo"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Sin cifrar"</string> <string name="printer_check" msgid="6428369671197132828">"Comprobar impresora"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Pendiente de envío"</string> <string name="unreadable_input" msgid="2199948329556527912">"No se ha podido leer el documento"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Olvidar"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Se conecta a través de Wi‑Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Se conecta a través de la red actual con la dirección IP <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Seguridad"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Esta impresora ha proporcionado un nuevo certificado de seguridad, o bien otro dispositivo está suplantándola. ¿Quieres aceptar el nuevo certificado?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Esta impresora ya no acepta tareas cifradas. ¿Quieres continuar con la impresión?"</string> + <string name="accept" msgid="4426153292469698134">"Aceptar"</string> + <string name="reject" msgid="24751635160440693">"Rechazar"</string> </resources> diff --git a/res/values-et/lineage_strings.xml b/res/values-et/lineage_strings.xml new file mode 100644 index 0000000..320e923 --- /dev/null +++ b/res/values-et/lineage_strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">WiFi Direct printimine</string> + <string name="recommendation_summary">Printimise vaiketeenus pakub põhilisi valikuid. Teisi valikuid selle printeri jaoks võib leida mõnelt teiselt printimise teenuselt.</string> + <string name="recommendations_heading">Soovitatud teenused</string> + <string name="recommendation_install_summary">Vali installimiseks</string> + <string name="recommendation_enable_summary">Vali lubamiseks</string> + <string name="recommendation_manage">Halda teenuseid</string> + <string name="connections">Ühendused</string> + <string name="wifi_direct_permission_rationale">Printimise vaiketeenus vajab asukoha luba et pääseda ligi Wi-Fi Direct printeritele, kuna sinu asukohta saab järeldada lähedalolevatelt seadmetelt.</string> + <string name="fix">Paranda</string> +</resources> diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index 33ac631..169b964 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Luuk on avatud"</string> <string name="printer_jammed" msgid="5104099859384749499">"Ummistunud"</string> <string name="printer_offline" msgid="9196864753298645066">"Võrguühenduseta"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Sobimatu sertifikaat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Pole krüpteeritud"</string> <string name="printer_check" msgid="6428369671197132828">"Printeri kontrollimine"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Saatmise ootel"</string> <string name="unreadable_input" msgid="2199948329556527912">"Dokumenti ei õnnestunud lugeda"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Unusta"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Ühendab funktsiooni Wi-Fi Direct kaudu"</string> <string name="connects_via_network" msgid="5990041581556733898">"Ühendab praeguse võrgu kaudu IP-aadressil <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Turvalisus"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"See printer esitas uue turvasertifikaadi mõni teine seade esineb selle printerina. Kas nõustuda uue sertifikaadiga?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"See printer ei aktsepteeri enam krüpteeritud töid. Kas jätkata printimist?"</string> + <string name="accept" msgid="4426153292469698134">"Nõustu"</string> + <string name="reject" msgid="24751635160440693">"Keeldu"</string> </resources> diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index bb7a356..d5a648a 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Atea irekita dago"</string> <string name="printer_jammed" msgid="5104099859384749499">"Papera trabatuta dago"</string> <string name="printer_offline" msgid="9196864753298645066">"Konexiorik gabe"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Ziurtagiri okerra"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Enkriptatu gabe"</string> <string name="printer_check" msgid="6428369671197132828">"Egiaztatu inprimagailua"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Bidaltzeko zain"</string> <string name="unreadable_input" msgid="2199948329556527912">"Ezin izan da irakurri dokumentua"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Ahaztu"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct zerbitzuaren bidez konektatzen da"</string> <string name="connects_via_network" msgid="5990041581556733898">"Uneko sarearen bidez konektatzen da (<xliff:g id="IP_ADDRESS">%1$s</xliff:g>)"</string> + <string name="security" msgid="2279008326210305401">"Segurtasuna"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Inprimagailuak segurtasun-ziurtagiri berri bat eman du, edo beste gailu bat ziurtagiria faltsutzen ari da. Ziurtagiri berria onartu nahi duzu?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Inprimagailu honek ez du jada onartzen lan enkriptaturik. Aurrera egin nahi duzu inprimaketarekin?"</string> + <string name="accept" msgid="4426153292469698134">"Onartu"</string> + <string name="reject" msgid="24751635160440693">"Baztertu"</string> </resources> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 41a90ef..e5d3797 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"در باز است"</string> <string name="printer_jammed" msgid="5104099859384749499">"گیر کرده است"</string> <string name="printer_offline" msgid="9196864753298645066">"آفلاین"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"گواهینامه نادرست است"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"رمزگذارینشده"</string> <string name="printer_check" msgid="6428369671197132828">"بررسی چاپگر"</string> <string name="waiting_to_send" msgid="2022115199902822180">"درانتظار ارسال"</string> <string name="unreadable_input" msgid="2199948329556527912">"سند خوانده نشد"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"فراموش کردن"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"ازطریق Wi-Fi بیواسطه متصل میشود"</string> <string name="connects_via_network" msgid="5990041581556733898">"ازطریق شبکه فعلی به نشانی <xliff:g id="IP_ADDRESS">%1$s</xliff:g> متصل میشود"</string> + <string name="security" msgid="2279008326210305401">"امنیت"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"این چاپگر گواهینامه امنیتی جدیدی ارائه کرده است، یا دستگاه دیگری درحال جعل کردن هویت آن است. گواهینامه جدید پذیرفته شود؟"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"این چاپگر دیگر کارهای رمزگذاریشده را نمیپذیرد. به چاپ کردن ادامه میدهید؟"</string> + <string name="accept" msgid="4426153292469698134">"پذیرفتن"</string> + <string name="reject" msgid="24751635160440693">"رد کردن"</string> </resources> diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index da0c32b..171ffcf 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Luukku auki"</string> <string name="printer_jammed" msgid="5104099859384749499">"Jumissa"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline-tilassa"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Virheellinen varmenne"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Ei salattu"</string> <string name="printer_check" msgid="6428369671197132828">"Tarkista tulostin."</string> <string name="waiting_to_send" msgid="2022115199902822180">"Odotetaan lähetystä."</string> <string name="unreadable_input" msgid="2199948329556527912">"Dokumentin lukeminen epäonnistui."</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Unohda"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Yhteys muodostettu Wi-Fi Directin kautta"</string> <string name="connects_via_network" msgid="5990041581556733898">"Yhdistetään nykyisen verkon kautta osoitteessa <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Suojaus"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Tämä tulostin antoi uuden turvallisuusvarmenteen, tai toinen laite esiintyy tulostimena. Hyväksytäänkö uusi varmenne?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Tämä tulostin ei enää hyväksy salattuja töitä. Jatketaanko tulostamista?"</string> + <string name="accept" msgid="4426153292469698134">"Hyväksy"</string> + <string name="reject" msgid="24751635160440693">"Hylkää"</string> </resources> diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 9a83c54..17e0dfc 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Porte ouverte"</string> <string name="printer_jammed" msgid="5104099859384749499">"Bourrage"</string> <string name="printer_offline" msgid="9196864753298645066">"Hors ligne"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificat non fiable"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Non chiffrée"</string> <string name="printer_check" msgid="6428369671197132828">"Vérifiez l\'imprimante"</string> <string name="waiting_to_send" msgid="2022115199902822180">"En attente d\'envoi"</string> <string name="unreadable_input" msgid="2199948329556527912">"Impossible de lire le document"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Oublier"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Se connecte par Wi-Fi direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Se connecte à l\'aide du réseau actuel, avec l\'adresse <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Sécurité"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Cette imprimante a fourni un nouveau certificat de sécurité, ou bien un autre appareil tente d\'usurper son identité. Accepter le nouveau certificat?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Cette imprimante n\'accepte plus les tâches chiffrées. Continuer l\'impression?"</string> + <string name="accept" msgid="4426153292469698134">"Accepter"</string> + <string name="reject" msgid="24751635160440693">"Refuser"</string> </resources> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 97ebb9c..733fd21 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Porte ouverte"</string> <string name="printer_jammed" msgid="5104099859384749499">"Bourrage papier"</string> <string name="printer_offline" msgid="9196864753298645066">"Hors connexion"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificat non fiable"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Non chiffrée"</string> <string name="printer_check" msgid="6428369671197132828">"Vérifier l\'imprimante"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Envoi en attente"</string> <string name="unreadable_input" msgid="2199948329556527912">"Impossible de lire le document"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Supprimer"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Se connecte via Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Se connecte via le réseau actuel à l\'adresse <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Sécurité"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Cette imprimante a fourni un nouveau certificat de sécurité, ou bien un autre appareil a usurpé son identité. Voulez-vous accepter le nouveau certificat ?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Cette imprimante n\'accepte plus les tâches chiffrées. Poursuivre l\'impression ?"</string> + <string name="accept" msgid="4426153292469698134">"Accepter"</string> + <string name="reject" msgid="24751635160440693">"Refuser"</string> </resources> diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 85fad8a..f3ab38d 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Tapa aberta"</string> <string name="printer_jammed" msgid="5104099859384749499">"Atasco"</string> <string name="printer_offline" msgid="9196864753298645066">"Sen conexión"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificado incorrecto"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Sen encriptar"</string> <string name="printer_check" msgid="6428369671197132828">"Comprobar impresora"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Esperando para o envío"</string> <string name="unreadable_input" msgid="2199948329556527912">"Non se puido ler o documento"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Borrar"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Conéctase a través de Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Conéctase a través da rede actual ao enderezo IP <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Seguranza"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Esta impresora proporcionou un novo certificado de seguranza ou ben outro dispositivo está suplantando a súa identidade. Queres aceptar o novo certificado?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Esta impresora xa non acepta traballos encriptados. Queres continuar coa impresión?"</string> + <string name="accept" msgid="4426153292469698134">"Aceptar"</string> + <string name="reject" msgid="24751635160440693">"Rexeitar"</string> </resources> diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 2bf5fa2..95d1c72 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"ખુલ્લો દરવાજો"</string> <string name="printer_jammed" msgid="5104099859384749499">"જામ થઇ ગયું છે"</string> <string name="printer_offline" msgid="9196864753298645066">"ઑફલાઇન"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"ખોટું પ્રમાણપત્ર"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"એન્ક્રિપ્ટ કરેલું નથી"</string> <string name="printer_check" msgid="6428369671197132828">"પ્રિન્ટર તપાસો"</string> <string name="waiting_to_send" msgid="2022115199902822180">"મોકલવાની રાહ જોઇ રહ્યાં છીએ"</string> <string name="unreadable_input" msgid="2199948329556527912">"દસ્તાવેજ વાંચી શકાતા નથી"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"ભૂલી જાઓ"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct મારફતે કનેક્ટ થશે"</string> <string name="connects_via_network" msgid="5990041581556733898">"હાલના નેટવર્ક મારફતે <xliff:g id="IP_ADDRESS">%1$s</xliff:g> પર કનેક્ટ થશે"</string> + <string name="security" msgid="2279008326210305401">"સુરક્ષા"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"આ પ્રિન્ટરે નવું સુરક્ષા પ્રમાણપત્ર રજૂ કર્યું છે અથવા કોઈ અન્ય ડિવાઇસ ખોટી ઓળખ રજૂ કરી રહ્યું છે. શું નવા પ્રમાણપત્રનો સ્વીકાર કરીએ?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"આ પ્રિન્ટર હવે કોઈ એન્ક્રિપ્ટ કરેલા કાર્યનો સ્વીકાર કરતું નથી. પ્રિન્ટ કરવાનું ચાલુ રાખીએ?"</string> + <string name="accept" msgid="4426153292469698134">"સ્વીકારો"</string> + <string name="reject" msgid="24751635160440693">"નકારો"</string> </resources> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 3456a70..2405bbc 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"दरवाज़ा खुला है"</string> <string name="printer_jammed" msgid="5104099859384749499">"जाम है"</string> <string name="printer_offline" msgid="9196864753298645066">"ऑफ़लाइन"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"गलत प्रमाणपत्र"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"सुरक्षित नहीं किया गया है"</string> <string name="printer_check" msgid="6428369671197132828">"प्रिंटर जाँचें"</string> <string name="waiting_to_send" msgid="2022115199902822180">"भेजने की प्रतीक्षा की जा रही है"</string> <string name="unreadable_input" msgid="2199948329556527912">"दस्तावेज़ पढ़ा नहीं जा सका"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"भूल जाएं"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct के ज़रिए कनेक्ट किया जाता है"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> पर मौजूदा नेटवर्क के ज़रिए कनेक्ट किया जाता है"</string> + <string name="security" msgid="2279008326210305401">"सुरक्षा"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"इस प्रिंटर ने एक नया सुरक्षा प्रमाणपत्र दिया या फिर कोई दूसरा डिवाइस इसके नाम से काम कर रहा है. नया प्रमाणपत्र स्वीकार करें?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"यह प्रिंटर अब सुरक्षित किए गए काम स्वीकार नहीं करता है प्रिंट करना चाहते हैं?"</string> + <string name="accept" msgid="4426153292469698134">"स्वीकार करें"</string> + <string name="reject" msgid="24751635160440693">"अस्वीकार करें"</string> </resources> diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 665e083..4c5ad9b 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Otvorena vrata"</string> <string name="printer_jammed" msgid="5104099859384749499">"Zaglavljeno"</string> <string name="printer_offline" msgid="9196864753298645066">"Izvanmrežno"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Neispravan certifikat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nije kriptirano"</string> <string name="printer_check" msgid="6428369671197132828">"Provjerite pisač"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Čeka se slanje"</string> <string name="unreadable_input" msgid="2199948329556527912">"Dokument se ne može pročitati"</string> @@ -55,6 +57,11 @@ <string name="failed_connection" msgid="8068661997318286575">"Povezivanje s pisačem <xliff:g id="PRINTER">%1$s</xliff:g> nije uspjelo"</string> <string name="saved_printers" msgid="4567534965213125526">"Spremljeni pisači"</string> <string name="forget" msgid="892068061425802502">"Zaboravi"</string> - <string name="connects_via_wifi_direct" msgid="652300632780158437">"Povezuje se putem Izravnog Wi-Fi-ja"</string> + <string name="connects_via_wifi_direct" msgid="652300632780158437">"Povezuje se putem Izravnog Wi-Fija"</string> <string name="connects_via_network" msgid="5990041581556733898">"Povezuje se putem trenutačne mreže na IP adresi <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Sigurnost"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Ovaj je pisač pružio novi sigurnosni certifikat ili ga drugi uređaj lažno predstavlja. Želite li prihvatiti novi certifikat?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Ovaj pisač više ne prihvaća kriptirane zadatke. Želite li nastaviti s ispisom?"</string> + <string name="accept" msgid="4426153292469698134">"Prihvati"</string> + <string name="reject" msgid="24751635160440693">"Odbij"</string> </resources> diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 124f921..e6778f5 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Nyitott ajtó"</string> <string name="printer_jammed" msgid="5104099859384749499">"Elakadt"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Helytelen tanúsítvány"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nem titkosított"</string> <string name="printer_check" msgid="6428369671197132828">"Nyomtató ellenőrzése"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Várakozás a küldésre"</string> <string name="unreadable_input" msgid="2199948329556527912">"A dokumentum nem olvasható"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Elfelejtés"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Directen keresztül csatlakozik"</string> <string name="connects_via_network" msgid="5990041581556733898">"A következő címen csatlakozik az aktuális hálózaton keresztül: <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Biztonság"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"A nyomtató új biztonsági tanúsítványt adott meg, vagy egy másik eszköz a nyomtatónak álcázza magát. Elfogadja az új tanúsítványt?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Ez a nyomtató már nem fogad titkosított feladatokat. Folytatja a nyomtatást?"</string> + <string name="accept" msgid="4426153292469698134">"Elfogadás"</string> + <string name="reject" msgid="24751635160440693">"Elutasítás"</string> </resources> diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 7d02654..58e25ce 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Կափարիչը բաց է"</string> <string name="printer_jammed" msgid="5104099859384749499">"Թղթի ծամում"</string> <string name="printer_offline" msgid="9196864753298645066">"Անցանց"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Անվավեր հավաստագիր"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Գաղտնագրված չէ"</string> <string name="printer_check" msgid="6428369671197132828">"Ստուգել տպիչը"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Սպասում է ուղարկման"</string> <string name="unreadable_input" msgid="2199948329556527912">"Հնարավոր չէ կարդալ փաստաթուղթը"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Չհիշել"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Միանում է Wi-Fi Direct-ի միջոցով"</string> <string name="connects_via_network" msgid="5990041581556733898">"Միանում է ընթացիկ ցանցի միջոցով (IP հասցե՝ <xliff:g id="IP_ADDRESS">%1$s</xliff:g>)"</string> + <string name="security" msgid="2279008326210305401">"Անվտանգություն"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Այս տպիչը տրամադրել է անվտանգության նոր հավաստագիր, կամ մեկ այլ սարք նմանակում է դրան։ Ընդունե՞լ նոր հավաստագիրը:"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Տպիչն այլևս չի ընդունում գաղտնագրված առաջադրանքներ: Շարունակե՞լ տպումը:"</string> + <string name="accept" msgid="4426153292469698134">"Ընդունել"</string> + <string name="reject" msgid="24751635160440693">"Մերժել"</string> </resources> diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index f7a0c66..595dec4 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Pintu terbuka"</string> <string name="printer_jammed" msgid="5104099859384749499">"Macet"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Sertifikat buruk"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Tidak dienkripsi"</string> <string name="printer_check" msgid="6428369671197132828">"Periksa printer"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Menunggu untuk mengirim"</string> <string name="unreadable_input" msgid="2199948329556527912">"Tidak dapat membaca dokumen"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Lupakan"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Menghubungkan melalui Wi-Fi Langsung"</string> <string name="connects_via_network" msgid="5990041581556733898">"Menghubungkan melalui jaringan saat ini di <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Keamanan"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Printer ini menyediakan sertifikat keamanan baru, atau perangkat lain sedang meniru identitasnya. Setujui sertifikat baru?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Printer ini tidak menerima pekerjaan yang terenkripsi lagi. Lanjutkan mencetak?"</string> + <string name="accept" msgid="4426153292469698134">"Setuju"</string> + <string name="reject" msgid="24751635160440693">"Tolak"</string> </resources> diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index f44e03b..315c849 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Hlíf opin"</string> <string name="printer_jammed" msgid="5104099859384749499">"Stífla"</string> <string name="printer_offline" msgid="9196864753298645066">"Ótengdur"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Ógilt vottorð"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Ekki dulkóðað"</string> <string name="printer_check" msgid="6428369671197132828">"Athugaðu prentara"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Bíður eftir að senda"</string> <string name="unreadable_input" msgid="2199948329556527912">"Ekki tókst að lesa skjal"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Gleyma"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Tengist um Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Tengist um núverandi netkerfi á <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Öryggi"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Þessi prentari útvegaði öryggisvottorð, eða annað tæki er að villa á sér heimildir. Viltu samþykkja nýja vottorðið?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Þessi prentari styður ekki lengur dulkóðuð verk. Halda áfram að prenta?"</string> + <string name="accept" msgid="4426153292469698134">"Samþykkja"</string> + <string name="reject" msgid="24751635160440693">"Hafna"</string> </resources> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index fd945f9..2ad34b1 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Sportello aperto"</string> <string name="printer_jammed" msgid="5104099859384749499">"Bloccata"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificato non valido"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Non criptata"</string> <string name="printer_check" msgid="6428369671197132828">"Controlla la stampante"</string> <string name="waiting_to_send" msgid="2022115199902822180">"In attesa di invio"</string> <string name="unreadable_input" msgid="2199948329556527912">"Impossibile leggere il documento"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Elimina"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Si connette tramite Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Si connette tramite la rete attuale all\'indirizzo <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Sicurezza"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"La stampante ha fornito un nuovo certificato di sicurezza oppure un altro dispositivo viene identificato come tale. Accettare il nuovo certificato?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Questa stampante non accetta più processi criptati. Vuoi continuare a stampare?"</string> + <string name="accept" msgid="4426153292469698134">"Accetta"</string> + <string name="reject" msgid="24751635160440693">"Rifiuta"</string> </resources> diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 54147b3..cdfae43 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"דלת המדפסת פתוחה"</string> <string name="printer_jammed" msgid="5104099859384749499">"חסימה"</string> <string name="printer_offline" msgid="9196864753298645066">"המדפסת לא מחוברת"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"אישור פגום"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"ללא הצפנה"</string> <string name="printer_check" msgid="6428369671197132828">"בדוק את המדפסת"</string> <string name="waiting_to_send" msgid="2022115199902822180">"ממתין לשליחה"</string> <string name="unreadable_input" msgid="2199948329556527912">"לא ניתן היה לקרוא את המסמך"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"מחיקה"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"מתחבר דרך Wi-Fi ישיר"</string> <string name="connects_via_network" msgid="5990041581556733898">"מתחבר דרך הרשת הנוכחית בכתובת <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"אבטחה"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"המדפסת הזו סיפקה אישור אבטחה חדש, או שמכשיר אחר מתחזה לה. האם לקבל את האישור החדש?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"מדפסת זו כבר לא מקבלת משימות מוצפנות. האם להמשיך בהדפסה?"</string> + <string name="accept" msgid="4426153292469698134">"אישור"</string> + <string name="reject" msgid="24751635160440693">"דחייה"</string> </resources> diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 739ec4e..93bc046 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"ドアが開いています"</string> <string name="printer_jammed" msgid="5104099859384749499">"詰まっています"</string> <string name="printer_offline" msgid="9196864753298645066">"オフラインです"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"不適切な証明書"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"暗号化なし"</string> <string name="printer_check" msgid="6428369671197132828">"プリンタを確認してください"</string> <string name="waiting_to_send" msgid="2022115199902822180">"送信を待機しています"</string> <string name="unreadable_input" msgid="2199948329556527912">"ドキュメントを読み込めませんでした"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"削除"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct 経由で接続する"</string> <string name="connects_via_network" msgid="5990041581556733898">"現在のネットワーク(<xliff:g id="IP_ADDRESS">%1$s</xliff:g>)経由で接続する"</string> + <string name="security" msgid="2279008326210305401">"セキュリティ"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"このプリンタが新しいセキュリティ証明書を提示しました。これは他のデバイスによるなりすましの可能性もあります。新しい証明書を承認しますか?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"このプリンタは暗号化されたジョブに対応しなくなりました。印刷を続行しますか?"</string> + <string name="accept" msgid="4426153292469698134">"承認"</string> + <string name="reject" msgid="24751635160440693">"拒否"</string> </resources> diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index 0b63a29..de03480 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"კარი ღიაა"</string> <string name="printer_jammed" msgid="5104099859384749499">"გაიჭედა"</string> <string name="printer_offline" msgid="9196864753298645066">"ხაზგარეშე"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"სერტიფიკატი არასათანადოა"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"დაუშიფრავი"</string> <string name="printer_check" msgid="6428369671197132828">"პრინტერის შემოწმება"</string> <string name="waiting_to_send" msgid="2022115199902822180">"ელოდება გაგზავნას"</string> <string name="unreadable_input" msgid="2199948329556527912">"დოკუმენტის წაკითხვა ვერ მოხერხდა"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"დავიწყება"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"უკავშირდება Wi-Fi Direct-ის მეშვეობით"</string> <string name="connects_via_network" msgid="5990041581556733898">"უკავშირდება ამჟამინდელი ქსელით, შემდეგ IP მისამართზე: <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"უსაფრთხოება"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"ამ პრინტერმა უზრუნველყო უსაფრთხოების ახალი სერტიფიკატი, ან მის იმიტირებას ახდენს სხვა მოწყობილობა. გსურთ ახალი სერტიფიკატის მიღება?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"ეს პრინტერი აღარ იღებს დაშიფრულ დავალებებს. გსურთ ბეჭდვის გაგრძელება?"</string> + <string name="accept" msgid="4426153292469698134">"მიღება"</string> + <string name="reject" msgid="24751635160440693">"უარყოფა"</string> </resources> diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 9502dbe..bc887f6 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Есігі ашық"</string> <string name="printer_jammed" msgid="5104099859384749499">"Кептелген"</string> <string name="printer_offline" msgid="9196864753298645066">"Офлайн"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Сертификат жарамсыз"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Шифрланбаған"</string> <string name="printer_check" msgid="6428369671197132828">"Принтерді тексеру"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Жіберуді күтуде"</string> <string name="unreadable_input" msgid="2199948329556527912">"Құжат оқылмады"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Ұмыту"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct арқылы жалғанады"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> мекенжайындағы желі арқылы жалғанады"</string> + <string name="security" msgid="2279008326210305401">"Қауіпсіздік"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Бұл принтер жаңа қауіпсіздік сертификатын ұсынды немесе оның атынан басқа бір құрылғы жұмыс істеп тұр. Жаңа сертификатты қабылдайсыз ба?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Принтер енді шифрланған тапсырмаларды қабылдамайды. Басып шығару жалғассын ба?"</string> + <string name="accept" msgid="4426153292469698134">"Қабылдау"</string> + <string name="reject" msgid="24751635160440693">"Қабылдамау"</string> </resources> diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 4a20004..680aead 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"ទ្វារចំហ"</string> <string name="printer_jammed" msgid="5104099859384749499">"ស្ទះ"</string> <string name="printer_offline" msgid="9196864753298645066">"គ្មានអ៊ីនធឺណិត"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"វិញ្ញាបនបត្រមិនល្អ"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"មិនបានអ៊ីនគ្រីបទេ"</string> <string name="printer_check" msgid="6428369671197132828">"ពិនិត្យម៉ាស៊ីនបោះពុម្ព"</string> <string name="waiting_to_send" msgid="2022115199902822180">"កំពុងរង់ចាំផ្ញើ"</string> <string name="unreadable_input" msgid="2199948329556527912">"មិនអាចអានឯកសារបានទេ"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"បំភ្លេច"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"ភ្ជាប់តាមរយៈ Wi-Fi ផ្ទាល់"</string> <string name="connects_via_network" msgid="5990041581556733898">"ភ្ជាប់តាមរយៈបណ្តាញបច្ចុប្បន្ននៅ <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"សុវត្ថិភាព"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"ម៉ាស៊ីនបោះពុម្ពនេះបានផ្តល់វិញ្ញាបនបត្រសុវត្ថិភាពថ្មី ឬមានឧបករណ៍ផ្សេងកំពុងបន្លំខ្លួនជាម៉ាស៊ីនបោះពុម្ព។ ទទួលយកវិញ្ញាបនបត្រថ្មី?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"ម៉ាស៊ីនបោះពុម្ពនេះលែងទទួលកិច្ចការដែលមានការអ៊ីនគ្រីបទៀតហើយ។ បន្តបោះពុម្ព?"</string> + <string name="accept" msgid="4426153292469698134">"ទទួលយក"</string> + <string name="reject" msgid="24751635160440693">"បដិសេធ"</string> </resources> diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index cb11261..59768bf 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"ಬಾಗಿಲು ತೆರೆದಿದೆ"</string> <string name="printer_jammed" msgid="5104099859384749499">"ಜಾಮ್ ಆಗಿದೆ"</string> <string name="printer_offline" msgid="9196864753298645066">"ಆಫ್ಲೈನ್"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"ತಪ್ಪು ಪ್ರಮಾಣಪತ್ರ"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿಲ್ಲ"</string> <string name="printer_check" msgid="6428369671197132828">"ಪ್ರಿಂಟರ್ ಪರಿಶೀಲಿಸಿ"</string> <string name="waiting_to_send" msgid="2022115199902822180">"ಕಳುಹಿಸಲು ಕಾಯುತ್ತಿದೆ"</string> <string name="unreadable_input" msgid="2199948329556527912">"ಡಾಕ್ಯುಮೆಂಟ್ ಓದಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"ಮರೆಯಿರಿ"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"ವೈ-ಫೈ ಡೈರೆಕ್ಟ್ ಮೂಲಕ ಸಂಪರ್ಕಿಸುತ್ತದೆ"</string> <string name="connects_via_network" msgid="5990041581556733898">"ಪ್ರಸ್ತುತ ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ <xliff:g id="IP_ADDRESS">%1$s</xliff:g> ಮೂಲಕ ಸಂಪರ್ಕಿಸುತ್ತದೆ"</string> + <string name="security" msgid="2279008326210305401">"ಭದ್ರತೆ"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"ಈ ಪ್ರಿಂಟರ್ ಹೊಸ ಭದ್ರತೆ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಒದಗಿಸಿದೆ ಅಥವಾ ಇನ್ನೊಂದು ಸಾಧನ ಅದನ್ನು ಸೋಗು ಹಾಕುತ್ತಿದೆ. ಹೊಸ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಸ್ವೀಕರಿಸುವುದೇ?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"ಪ್ರಿಂಟರ್ ಇನ್ನು ಮುಂದೆ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಕೆಲಸಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ. ಪ್ರಿಂಟಿಂಗ್ ಮುಂದುವರಿಸುವುದೇ?"</string> + <string name="accept" msgid="4426153292469698134">"ಸ್ವೀಕರಿಸಿ"</string> + <string name="reject" msgid="24751635160440693">"ತಿರಸ್ಕರಿಸಿ"</string> </resources> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index e379682..a298fde 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"덮개 열림"</string> <string name="printer_jammed" msgid="5104099859384749499">"종이가 낌"</string> <string name="printer_offline" msgid="9196864753298645066">"오프라인"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"잘못된 인증서"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"암호화되지 않음"</string> <string name="printer_check" msgid="6428369671197132828">"프린터 확인"</string> <string name="waiting_to_send" msgid="2022115199902822180">"전송 대기 중"</string> <string name="unreadable_input" msgid="2199948329556527912">"문서를 읽을 수 없음"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"삭제"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct를 통해 연결"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g>에서 현재 네트워크를 통해 연결"</string> + <string name="security" msgid="2279008326210305401">"보안"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"이 프린터에서 새로운 보안 인증서를 제공했거나 다른 기기가 이 프린터로 위장하고 있습니다. 새 인증서를 수락할까요?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"프린터가 더 이상 암호화된 작업을 지원하지 않습니다. 인쇄를 계속하시겠습니까?"</string> + <string name="accept" msgid="4426153292469698134">"수락"</string> + <string name="reject" msgid="24751635160440693">"거부"</string> </resources> diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index cb6d4ab..d63f859 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Капкагы ачык"</string> <string name="printer_jammed" msgid="5104099859384749499">"Кагаз чайналды"</string> <string name="printer_offline" msgid="9196864753298645066">"Оффлайн"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Начар тастыктама"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Шифрленген эмес"</string> <string name="printer_check" msgid="6428369671197132828">"Принтерди текшерүү"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Жөнөтүлгөнү жатат"</string> <string name="unreadable_input" msgid="2199948329556527912">"Документ окулбай койду"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Унутулсун"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct аркылуу туташат"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> IP дарегиндеги учурдагы тармак аркылуу туташат"</string> + <string name="security" msgid="2279008326210305401">"Коопсуздук"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Бул принтердин жаңы коопсуздук тастыктамасы бар же анын ордуна башка түзмөк иштеп жатат. Жаңы тастыктама кабыл алынсынбы?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Бул принтер мындан ары шифрленген тапшырмаларды кабыл албайт. Бастыра бересизби?"</string> + <string name="accept" msgid="4426153292469698134">"Макул"</string> + <string name="reject" msgid="24751635160440693">"Четке кагуу"</string> </resources> diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index 36656c1..e378864 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"ປະຕູເປີດຢູ່"</string> <string name="printer_jammed" msgid="5104099859384749499">"ເຈ້ຍຕິດ"</string> <string name="printer_offline" msgid="9196864753298645066">"ອອບລາຍ"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"ໃບຮັບຮອງບໍ່ຖືກຕ້ອງ"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"ບໍ່ໄດ້ເຂົ້າລະຫັດ"</string> <string name="printer_check" msgid="6428369671197132828">"ກວດສອບເຄື່ອງພິມ"</string> <string name="waiting_to_send" msgid="2022115199902822180">"ກຳລັງລໍຖ້າສົ່ງ"</string> <string name="unreadable_input" msgid="2199948329556527912">"ບໍ່ສາມາດອ່ານເອກະສານໄດ້"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"ລືມ"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"ເຊື່ອມຕໍ່ຜ່ານ Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"ເຊື່ອມຕໍ່ຜ່ານເຄືອຂ່າຍປັດຈຸບັນທີ່ <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"ຄວາມປອດໄພ"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"ເຄື່ອງພິມນີ້ໃຫ້ໃບຮັບຮອງຄວາມປອດໄພໃໝ່ ຫຼື ອຸປະກອນອື່ນກຳລັງປອມເປັນມັນຢູ່. ຍອມຮັບໃບຮັບຮອງໃໝ່ບໍ?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"ເຄື່ອງພິມນີ້ບໍ່ຮັບໜ້າວຽກທີ່ເຂົ້າລະຫັດໄວ້. ສືບຕໍ່ການພິມບໍ?"</string> + <string name="accept" msgid="4426153292469698134">"ຍອມຮັບ"</string> + <string name="reject" msgid="24751635160440693">"ປະຕິເສດ"</string> </resources> diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index a11f257..6f1286f 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Atidarytos durelės"</string> <string name="printer_jammed" msgid="5104099859384749499">"Užstrigęs"</string> <string name="printer_offline" msgid="9196864753298645066">"Neprisijungęs"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Netinkamas sertifikatas"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nešifruota"</string> <string name="printer_check" msgid="6428369671197132828">"Tikrinti spausdintuvą"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Laukiama, kol bus išsiųsta"</string> <string name="unreadable_input" msgid="2199948329556527912">"Nepavyko nuskaityti dokumento"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Pamiršti"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Užmezgamas ryšys per „Wi-Fi Direct“"</string> <string name="connects_via_network" msgid="5990041581556733898">"Užmezgamas ryšys per dabartinį tinklą adresu <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Sauga"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Šis spausdintuvas pateikė naują saugos sertifikatą arba kitas įrenginys juo apsimetinėja. Priimti naują sertifikatą?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Šis spausdintuvas nebepriima šifruotų užduočių. Spausdinti toliau?"</string> + <string name="accept" msgid="4426153292469698134">"Sutikti"</string> + <string name="reject" msgid="24751635160440693">"Atmesti"</string> </resources> diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 5efc547..2a78f64 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Atvērtas piekļuves durvis"</string> <string name="printer_jammed" msgid="5104099859384749499">"Iestrēdzis papīrs"</string> <string name="printer_offline" msgid="9196864753298645066">"Bezsaistē"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Nederīgs sertifikāts"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nešifrēts"</string> <string name="printer_check" msgid="6428369671197132828">"Pārbaudīt printeri"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Gaida sūtīšanu"</string> <string name="unreadable_input" msgid="2199948329556527912">"Nevarēja nolasīt dokumentu"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Aizmirst"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Notiek savienojuma izveide, izmantojot Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Notiek savienojuma izveide, izmantojot pašreizējo tīklu ar šādu IP adresi: <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Drošība"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Šim printerim ir jauns drošības sertifikāts, vai arī cita ierīce uzdodas par to. Vai apstiprināt jauno sertifikātu?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Šis printeris vairs nepieņem šifrētus uzdevumus. Vai turpināt drukāšanu?"</string> + <string name="accept" msgid="4426153292469698134">"Apstiprināt"</string> + <string name="reject" msgid="24751635160440693">"Noraidīt"</string> </resources> diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 674d37c..7d42fbb 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Отворена врата"</string> <string name="printer_jammed" msgid="5104099859384749499">"Заглавен"</string> <string name="printer_offline" msgid="9196864753298645066">"Офлајн"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Лош сертификат"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Не е шифриран"</string> <string name="printer_check" msgid="6428369671197132828">"Проверете го печатачот"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Се чека за испраќање"</string> <string name="unreadable_input" msgid="2199948329556527912">"Не може да се прочита документот"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Избриши го"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Се поврзува преку Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Се поврзува преку моменталната мрежа на <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Безбедност"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Овој печатач обезбедил нов безбедносен сертификат или друг уред лажно се претставува како него. Да се прифати новиот сертификат?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Овој печатач веќе не прифаќа шифрирани задачи. Да се продолжи со печатење?"</string> + <string name="accept" msgid="4426153292469698134">"Прифати"</string> + <string name="reject" msgid="24751635160440693">"Одбиј"</string> </resources> diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index 7d331bc..8f42a0d 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"ഡോർ തുറന്നിരിക്കുന്നു"</string> <string name="printer_jammed" msgid="5104099859384749499">"അമര്ത്തുക"</string> <string name="printer_offline" msgid="9196864753298645066">"ഓഫ്ലൈന്"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"മോശം സർട്ടിഫിക്കറ്റ്"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"എൻക്രിപ്റ്റ് ചെയ്തിട്ടില്ല"</string> <string name="printer_check" msgid="6428369671197132828">"പ്രിന്റർ പരിശോധിക്കുക"</string> <string name="waiting_to_send" msgid="2022115199902822180">"അയയ്ക്കാൻ കാത്തിരിക്കുന്നു"</string> <string name="unreadable_input" msgid="2199948329556527912">"ഡോക്യുമെന്റ് റീഡുചെയ്യാനായില്ല"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"മറന്നു"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"വൈഫൈ ഡയറക്റ്റ് വഴി കണക്റ്റ് ചെയ്യുന്നു"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> വിലാസത്തിലെ നിലവിലെ നെറ്റ്വര്ക്ക് വഴി കണക്റ്റ് ചെയ്യുന്നു"</string> + <string name="security" msgid="2279008326210305401">"സുരക്ഷ"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"ഈ പ്രിന്റർ ഒരു പുതിയ സുരക്ഷാ സർട്ടിഫിക്കറ്റ് നൽകുകയോ മറ്റൊരു ഉപകരണം ഇതായി ആൾമാറാട്ടം നടത്തുകയോ ചെയ്യുന്നു. പുതിയ സർട്ടിഫിക്കറ്റ് സ്വീകരിക്കട്ടെ?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"ഈ പ്രിന്റർ ഇനി എൻക്രിപ്റ്റ് ചെയ്ത ജോലികൾ സ്വീകരിക്കില്ല. പ്രിന്റ് ചെയ്യൽ തുടരണോ?"</string> + <string name="accept" msgid="4426153292469698134">"അംഗീകരിക്കുക"</string> + <string name="reject" msgid="24751635160440693">"നിരസിക്കുക"</string> </resources> diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index 415a7a3..af8ecdd 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Хаалга нээлттэй"</string> <string name="printer_jammed" msgid="5104099859384749499">"Гацсан"</string> <string name="printer_offline" msgid="9196864753298645066">"Офлайн"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Муу сертификат"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Шифрлээгүй байна"</string> <string name="printer_check" msgid="6428369671197132828">"Хэвлэгчийг шалгах"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Илгээхээр хүлээж байна"</string> <string name="unreadable_input" msgid="2199948329556527912">"Документыг унших боломжгүй байна"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Мартах"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Шуудаар холбогддог"</string> <string name="connects_via_network" msgid="5990041581556733898">"Одоогийн сүлжээгээр <xliff:g id="IP_ADDRESS">%1$s</xliff:g>-д холбогддог"</string> + <string name="security" msgid="2279008326210305401">"Аюулгүй байдал"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Энэ хэвлэгч аюулгүй байдлын шинэ сертификат олгосон эсвэл үүнийг өөр төхөөрөмж хуурамчаар дуурайж байна. Шинэ сертификатыг зөвшөөрөх үү?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Энэ хэвлэгч шифрлэсэн ажлыг цаашид зөвшөөрөхөө больсон байна. Үргэлжлүүлэн хэвлэх үү?"</string> + <string name="accept" msgid="4426153292469698134">"Зөвшөөрөх"</string> + <string name="reject" msgid="24751635160440693">"Татгалзах"</string> </resources> diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index 5cfcb23..048094d 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"दार उघडे आहे"</string> <string name="printer_jammed" msgid="5104099859384749499">"अडकले"</string> <string name="printer_offline" msgid="9196864753298645066">"ऑफलाइन"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"खराब सर्टिफिकेट"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"एंक्रिप्ट केलेले नाही"</string> <string name="printer_check" msgid="6428369671197132828">"प्रिंटर तपासा"</string> <string name="waiting_to_send" msgid="2022115199902822180">"पाठवण्याची प्रतीक्षा करत आहे"</string> <string name="unreadable_input" msgid="2199948329556527912">"दस्तऐवज वाचता आला नाही"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"विसरा"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"वाय-फाय थेट मार्फत कनेक्ट होते"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> वर सध्याच्या नेटवर्कमार्फत कनेक्ट होते"</string> + <string name="security" msgid="2279008326210305401">"सुरक्षितता"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"हा प्रिंटर नवीन सुरक्षा सर्टिफिकेट प्रदान करतो किंवा दुसरे एखादे डिव्हाइस तोतयागिरी करत असेल. नवीन सर्टिफिकेट स्वीकारायचे का?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"यापुढे हा प्रिंटर एंक्रिप्ट केलेली कामे स्वीकारणार नाही. प्रिंट करणे सुरू ठेवायचे आहे का?"</string> + <string name="accept" msgid="4426153292469698134">"स्वीकारा"</string> + <string name="reject" msgid="24751635160440693">"नकार द्या"</string> </resources> diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index fc968e3..89546f2 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Pintu terbuka"</string> <string name="printer_jammed" msgid="5104099859384749499">"Tersekat"</string> <string name="printer_offline" msgid="9196864753298645066">"Luar talian"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Sijil tidak sah"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Tidak disulitkan"</string> <string name="printer_check" msgid="6428369671197132828">"Semak pencetak"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Menunggu untuk dihantar"</string> <string name="unreadable_input" msgid="2199948329556527912">"Tidak dapat membaca dokumen"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Lupakan"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Bersambung melalui Wi-Fi Langsung"</string> <string name="connects_via_network" msgid="5990041581556733898">"Bersambung melalui rangkaian semasa di <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Keselamatan"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Pencetak ini memberikan sijil keselamatan baharu atau peranti lain sedang menyamar menjadi pencetak tersebut. Terima sijil baharu?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Pencetak ini tidak lagi menerima kerja yang disulitkan. Teruskan mencetak?"</string> + <string name="accept" msgid="4426153292469698134">"Terima"</string> + <string name="reject" msgid="24751635160440693">"Tolak"</string> </resources> diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index 5d90879..136cfd0 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"တံခါးပွင့်နေသည်"</string> <string name="printer_jammed" msgid="5104099859384749499">"စာရွက်ညှပ်နေသည်"</string> <string name="printer_offline" msgid="9196864753298645066">"အော့ဖ်လိုင်းဖြစ်နေသည်"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"အသိအမှတ်ပြုလက်မှတ် မမှန်ကန်ပါ"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"အသွင်ဝှက် မထားပါ"</string> <string name="printer_check" msgid="6428369671197132828">"ပုံနှိပ်စက်ကို စစ်ဆေးရန်"</string> <string name="waiting_to_send" msgid="2022115199902822180">"ပို့ရန် စောင့်နေသည်"</string> <string name="unreadable_input" msgid="2199948329556527912">"စာရွက်စာတမ်းကို ဖတ်၍မရပါ"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"မေ့ပစ်ရန်"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct ဖြင့် ချိတ်ဆက်သည်"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> ရှိ လက်ရှိကွန်ရက် မှတစ်ဆင့် ချိတ်ဆက်သည်"</string> + <string name="security" msgid="2279008326210305401">"လုံခြုံရေး"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"ဤပုံနှိပ်ထုတ်စက်က လုံခြုံရေး အသိအမှတ်ပြုလက်မှတ်အသစ်ကို ထုတ်ပေးလိုက်သည် သို့မဟုတ် အခြားစက်ပစ္စည်းတစ်ခုက ၎င်းအဖြစ် အယောင်ဆောင်နေခြင်းဖြစ်သည်။ အသိအမှတ်ပြုလက်မှတ်အသစ်ကို လက်ခံမလား။"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"ဤပုံနှိပ်ထုတ်စက်က အသွင်ဝှက်ထားသော အလုပ်များကို လက်ခံတော့မည် မဟုတ်ပါ။ ဆက်လက် ပုံနှိပ်ထုတ်လိုသလား။"</string> + <string name="accept" msgid="4426153292469698134">"လက်ခံရန်"</string> + <string name="reject" msgid="24751635160440693">"ပယ်ရန်"</string> </resources> diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 82c481c..3114ee0 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Døren er åpen"</string> <string name="printer_jammed" msgid="5104099859384749499">"Fastkjørt papir"</string> <string name="printer_offline" msgid="9196864753298645066">"Uten nett"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Ugyldig sertifikat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Ikke kryptert"</string> <string name="printer_check" msgid="6428369671197132828">"Sjekk skriveren"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Venter på å sende"</string> <string name="unreadable_input" msgid="2199948329556527912">"Kunne ikke lese dokumentet"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Glem"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Kobler til via Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Kobler til via nåværende nettverk på <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Sikkerhet"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Denne skriveren har oppgitt et nytt sikkerhetssertifikat, eller en annen enhet utgir seg for å være den. Vil du akseptere det nye sertifikatet?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Denne skriveren aksepterer ikke krypterte jobber lenger. Vil du fortsette utskriften?"</string> + <string name="accept" msgid="4426153292469698134">"Godta"</string> + <string name="reject" msgid="24751635160440693">"Avvis"</string> </resources> diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 29ea9d0..1ff84f5 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"प्रिन्टरको ढोका खुला छ"</string> <string name="printer_jammed" msgid="5104099859384749499">"प्रिन्टर जाम भयो"</string> <string name="printer_offline" msgid="9196864753298645066">"अफलाइन"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"खराब प्रमाणपत्र"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"इन्क्रिप्ट गरिएको छैन"</string> <string name="printer_check" msgid="6428369671197132828">"प्रिन्टर जाँच्नुहोस्"</string> <string name="waiting_to_send" msgid="2022115199902822180">"पठाउन कुर्दै"</string> <string name="unreadable_input" msgid="2199948329556527912">"कागजात पढ्न सकिएन"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"बिर्सनुहोस्"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi प्रत्यक्षमार्फत जडान गर्छ"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> को हालको नेटवर्कमार्फत जडान गर्छ"</string> + <string name="security" msgid="2279008326210305401">"सुरक्षा"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"यो प्रिन्टरले सुरक्षासम्बन्धी कुनै नयाँ प्रमाणपत्र प्रदान गर्यो नयाँ प्रमाणपत्र स्वीकार गर्ने हो?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"यो प्रिन्टरले अब उप्रान्त इन्क्रिप्ट गरिएका कार्यहरू स्वीकार गर्दैन। छाप्ने कार्य जारी राख्ने हो?"</string> + <string name="accept" msgid="4426153292469698134">"स्वीकार गर्नुहोस्"</string> + <string name="reject" msgid="24751635160440693">"अस्वीकार गर्नुहोस्"</string> </resources> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index a9505f0..02f5c4b 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Klep geopend"</string> <string name="printer_jammed" msgid="5104099859384749499">"Vastgelopen"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Verkeerd certificaat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Niet versleuteld"</string> <string name="printer_check" msgid="6428369671197132828">"Printer controleren"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Wachten om te verzenden"</string> <string name="unreadable_input" msgid="2199948329556527912">"Kan document niet lezen"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Vergeten"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Maakt verbinding via Wifi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Maakt verbinding via huidige netwerk op <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Beveiliging"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Deze printer biedt een nieuw beveiligingscertificaat aan, of een ander apparaat imiteert deze printer. Wil je het nieuwe certificaat accepteren?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Deze printer accepteert geen versleutelde taken meer. Doorgaan met afdrukken?"</string> + <string name="accept" msgid="4426153292469698134">"Accepteren"</string> + <string name="reject" msgid="24751635160440693">"Weigeren"</string> </resources> diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index ce2f9d1..284bede 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"ਢੱਕਣ ਖੁੱਲ੍ਹਾ ਹੈ"</string> <string name="printer_jammed" msgid="5104099859384749499">"ਜਾਮ ਹੋ ਗਿਆ ਹੈ"</string> <string name="printer_offline" msgid="9196864753298645066">"ਆਫ਼ਲਾਈਨ"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"ਖ਼ਰਾਬ ਪ੍ਰਮਾਣ-ਪੱਤਰ"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"ਇਨਕ੍ਰਿਪਟਡ ਨਹੀਂ ਹੈ"</string> <string name="printer_check" msgid="6428369671197132828">"ਪ੍ਰਿੰਟਰ ਚੈੱਕ ਕਰੋ"</string> <string name="waiting_to_send" msgid="2022115199902822180">"ਭੇਜਣ ਲਈ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string> <string name="unreadable_input" msgid="2199948329556527912">"ਦਸਤਾਵੇਜ਼ ਨੂੰ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"ਛੱਡੋ"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"ਵਾਈ-ਫਾਈ ਡਾਇਰੈਕਟ ਰਾਹੀਂ ਕਨੈਕਟ ਕਰਦਾ ਹੈ"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> \'ਤੇ ਵਰਤਮਾਨ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਕਨੈਕਟ ਕਰਦਾ ਹੈ"</string> + <string name="security" msgid="2279008326210305401">"ਸੁਰੱਖਿਆ"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"ਇਸ ਪ੍ਰਿੰਟਰ ਨੇ ਇੱਕ ਨਵਾਂ ਸੁਰ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਮੁਹੱਈਆ ਕਰਵਾਇਆ ਹੈ, ਜਾਂ ਕਿਸੇ ਹੋਰ ਡੀਵਾਈਸ ਨੇ ਇਸਦਾ ਪਰਰੂਪਣ ਕੀਤਾ ਹੈ। ਨਵਾਂ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਸਵੀਕਾਰ ਕਰੋ?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"ਇਹ ਪ੍ਰਿੰਟਰ ਹੁਣ ਇਨਕ੍ਰਿਪਟਡ ਜੌਬਾਂ ਸਵੀਕਾਰ ਨਹੀਂ ਕਰਦਾ ਹੈ। ਕੀ ਪ੍ਰਿੰਟਿੰਗ ਜਾਰੀ ਰੱਖਣੀ ਹੈ?"</string> + <string name="accept" msgid="4426153292469698134">"ਸਵੀਕਾਰ ਕਰੋ"</string> + <string name="reject" msgid="24751635160440693">"ਅਸਵੀਕਾਰ ਕਰੋ"</string> </resources> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 5d72cb7..d746996 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Pokrywa otwarta"</string> <string name="printer_jammed" msgid="5104099859384749499">"Zakleszczenie"</string> <string name="printer_offline" msgid="9196864753298645066">"Tryb offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Zły certyfikat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Niezaszyfrowana"</string> <string name="printer_check" msgid="6428369671197132828">"Sprawdź drukarkę"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Czeka na wysłanie"</string> <string name="unreadable_input" msgid="2199948329556527912">"Nie można odczytać dokumentu"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Zapomnij"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Łączenie przez Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Łączenie przez bieżącą sieć, adres: <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Zabezpieczenia"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Ta drukarka przekazała nowy certyfikat bezpieczeństwa lub inne urządzenie podszywa się pod nią. Zaakceptować nowy certyfikat?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Ta drukarka nie przyjmuje już zaszyfrowanych zadań. Kontynuować drukowanie?"</string> + <string name="accept" msgid="4426153292469698134">"Zaakceptuj"</string> + <string name="reject" msgid="24751635160440693">"Odrzuć"</string> </resources> diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index ae2f913..19b4fe9 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Porta aberta"</string> <string name="printer_jammed" msgid="5104099859384749499">"Atolamento"</string> <string name="printer_offline" msgid="9196864753298645066">"Off-line"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificado inválido"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Não criptografado"</string> <string name="printer_check" msgid="6428369671197132828">"Verificar impressora"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Aguardando para enviar"</string> <string name="unreadable_input" msgid="2199948329556527912">"Não foi possível ler o documento"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Ignorar"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Conecta via Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Conecta via rede atual em <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Segurança"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Um novo certificado de segurança foi emitido pela impressora ou a identidade dela foi falsificada por outro dispositivo. Aceitar o novo certificado?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Esta impressora não aceita mais trabalhos criptografados. Continuar imprimindo?"</string> + <string name="accept" msgid="4426153292469698134">"Aceitar"</string> + <string name="reject" msgid="24751635160440693">"Recusar"</string> </resources> diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 625b5a4..d57e9c6 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Porta aberta"</string> <string name="printer_jammed" msgid="5104099859384749499">"Encravada"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificado incorreto"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Não encriptada."</string> <string name="printer_check" msgid="6428369671197132828">"Verificar impressora"</string> <string name="waiting_to_send" msgid="2022115199902822180">"A aguardar para enviar…"</string> <string name="unreadable_input" msgid="2199948329556527912">"Não foi possível ler o documento"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Esquecer"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"A ligação é efetuada através de Wi-Fi Direct."</string> <string name="connects_via_network" msgid="5990041581556733898">"A ligação é efetuada através da rede atual em <xliff:g id="IP_ADDRESS">%1$s</xliff:g>."</string> + <string name="security" msgid="2279008326210305401">"Segurança"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Esta impressora forneceu um novo certificado de segurança ou outro dispositivo está a roubar a respetiva identidade. Pretende aceitar o novo certificado?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Esta impressora já não aceita tarefas encriptadas. Pretende continuar com a impressão?"</string> + <string name="accept" msgid="4426153292469698134">"Aceitar"</string> + <string name="reject" msgid="24751635160440693">"Rejeitar"</string> </resources> diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index ae2f913..19b4fe9 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Porta aberta"</string> <string name="printer_jammed" msgid="5104099859384749499">"Atolamento"</string> <string name="printer_offline" msgid="9196864753298645066">"Off-line"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificado inválido"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Não criptografado"</string> <string name="printer_check" msgid="6428369671197132828">"Verificar impressora"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Aguardando para enviar"</string> <string name="unreadable_input" msgid="2199948329556527912">"Não foi possível ler o documento"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Ignorar"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Conecta via Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Conecta via rede atual em <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Segurança"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Um novo certificado de segurança foi emitido pela impressora ou a identidade dela foi falsificada por outro dispositivo. Aceitar o novo certificado?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Esta impressora não aceita mais trabalhos criptografados. Continuar imprimindo?"</string> + <string name="accept" msgid="4426153292469698134">"Aceitar"</string> + <string name="reject" msgid="24751635160440693">"Recusar"</string> </resources> diff --git a/res/values-ro/lineage_strings.xml b/res/values-ro/lineage_strings.xml new file mode 100644 index 0000000..1f87ec5 --- /dev/null +++ b/res/values-ro/lineage_strings.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">Printare prin Wi-Fi Direct</string> + <string name="recommendation_summary">Serviciul de Printare Prestabilit oferă opțiuni de bază. Alte opțiuni pentru această imprimantă ar putea fi disponibile din cadrul unui alt serviciu de printare.</string> + <string name="recommendations_heading">Servicii recomandate</string> + <string name="recommendation_install_summary">Selectați pentru a instala</string> + <string name="recommendation_enable_summary">Selectați pentru a activa</string> + <string name="recommendation_manage">Gestionați servicii</string> + <string name="connections">Conexiuni</string> + <string name="wifi_direct_permission_rationale">Serviciul de Printare Prestabilit necesită permisiunea la locație pentru a accesa imprimantele Wi-Fi Direct pentru că locația dvs. poate fi dedusă de la dispozitivele din apropiere.</string> + <string name="fix">Fixați</string> +</resources> diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 3b56dda..2607277 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Ușă deschisă"</string> <string name="printer_jammed" msgid="5104099859384749499">"Blocat"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certificat necorespunzător"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nu este criptată"</string> <string name="printer_check" msgid="6428369671197132828">"Bifați imprimanta"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Se așteaptă trimiterea"</string> <string name="unreadable_input" msgid="2199948329556527912">"Nu s-a putut citi documentul"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Eliminați"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Se conectează prin Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Se conectează prin rețeaua curentă la <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Securitate"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Imprimanta a oferit un nou certificat de securitate sau un alt dispozitiv îi folosește identitatea. Acceptați noul certificat?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Această imprimantă nu mai acceptă sarcini criptate. Continuați printarea?"</string> + <string name="accept" msgid="4426153292469698134">"Acceptați"</string> + <string name="reject" msgid="24751635160440693">"Respingeți"</string> </resources> diff --git a/res/values-ru/lineage_strings.xml b/res/values-ru/lineage_strings.xml new file mode 100644 index 0000000..9c439c8 --- /dev/null +++ b/res/values-ru/lineage_strings.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="fix">Исправить</string> +</resources> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 13b8040..8326e5d 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Дверца открыта"</string> <string name="printer_jammed" msgid="5104099859384749499">"Застряла бумага"</string> <string name="printer_offline" msgid="9196864753298645066">"Нет подключения к Интернету"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Недопустимый сертификат"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Не зашифровано"</string> <string name="printer_check" msgid="6428369671197132828">"Проверить принтер"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Ожидание отправки…"</string> <string name="unreadable_input" msgid="2199948329556527912">"Не удалось прочитать документ"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Удалить"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Подключено через Wi-Fi Direct."</string> <string name="connects_via_network" msgid="5990041581556733898">"Подключено к текущей сети с IP-адресом <xliff:g id="IP_ADDRESS">%1$s</xliff:g>."</string> + <string name="security" msgid="2279008326210305401">"Безопасность"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Для принтера предоставлен новый сертификат безопасности. Возможно, под видом принтера работает другое устройство. Принять новый сертификат?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Принтер больше не принимает зашифрованные задания. Продолжить печать?"</string> + <string name="accept" msgid="4426153292469698134">"Принять"</string> + <string name="reject" msgid="24751635160440693">"Отклонить"</string> </resources> diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index 85a99e1..987e681 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"දොර විවෘතයි"</string> <string name="printer_jammed" msgid="5104099859384749499">"තදබදය"</string> <string name="printer_offline" msgid="9196864753298645066">"නොබැඳි"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"නරක සහතිකය"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"සංකේතනය කර නැත"</string> <string name="printer_check" msgid="6428369671197132828">"මුද්රණ යන්ත්රය පරීක්ෂා කරන්න"</string> <string name="waiting_to_send" msgid="2022115199902822180">"යැවීමට රැඳී සිටිමින්"</string> <string name="unreadable_input" msgid="2199948329556527912">"ලේඛනය කියවීමට නොහැකිය"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"අමතක කරන්න"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct හරහා සම්බන්ධ වෙමින්"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> හි වත්මන් ජාලය හරහා සම්බන්ධ වෙමින්"</string> + <string name="security" msgid="2279008326210305401">"ආරක්ෂාව"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"මෙම මුද්රකය නව ආරක්ෂණ සහතිතකයක් සැපයුවේය, නැති නම් වෙනත් උපාංගයක් එය මූර්තිමත් කරයි. නව සහතිකය පිළිගන්නේද?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"මෙම මුද්රණ යන්ත්රය සංකේතනය කළ කාර්යයන් තවදුරටත් පිළිනොගනී. මුද්රණය කිරිම දිගටම කර ගෙන යන්නද?"</string> + <string name="accept" msgid="4426153292469698134">"පිළිගන්න"</string> + <string name="reject" msgid="24751635160440693">"ප්රතික්ෂේප කරන්න"</string> </resources> diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 2043512..bb42702 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Otvorené dvierka"</string> <string name="printer_jammed" msgid="5104099859384749499">"Zablokované"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Nesprávny certifikát"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nešifrované"</string> <string name="printer_check" msgid="6428369671197132828">"Skontrolovať tlačiareň"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Čaká sa na odoslanie"</string> <string name="unreadable_input" msgid="2199948329556527912">"Dokument sa nepodarilo prečítať"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Odstrániť"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Pripája sa prostredníctvom rozhrania Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Pripája sa prostredníctvom aktuálnej siete na adrese IP – <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Zabezpečenie"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Táto tlačiareň poskytla nový bezpečnostný certifikát alebo ju napodobňuje iné zariadenie. Chcete nový certifikát prijať?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Tlačiareň už neprijíma šifrované úlohy. Chcete pokračovať v tlačení?"</string> + <string name="accept" msgid="4426153292469698134">"Prijať"</string> + <string name="reject" msgid="24751635160440693">"Odmietnuť"</string> </resources> diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 6b98ae2..0cb97c3 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Odprta vratca"</string> <string name="printer_jammed" msgid="5104099859384749499">"Zagozden"</string> <string name="printer_offline" msgid="9196864753298645066">"Brez povezave"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Neustrezno potrdilo"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Ni šifrirano"</string> <string name="printer_check" msgid="6428369671197132828">"Preveri tiskalnik"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Čakanje na pošiljanje"</string> <string name="unreadable_input" msgid="2199948329556527912">"Dokumenta ni bilo mogoče prebrati"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Pozabi"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Vzpostavitev povezave prek povezave Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Vzpostavitev povezave prek trenutnega omrežja z naslovom <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Varnost"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Ta tiskalnik je posredoval novo varnostno potrdilo ali pa se zanj lažno predstavlja druga naprava. Želite sprejeti novo potrdilo?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Ta tiskalnik ne sprejema več šifriranih opravil. Želite nadaljevati tiskanje?"</string> + <string name="accept" msgid="4426153292469698134">"Sprejmi"</string> + <string name="reject" msgid="24751635160440693">"Zavrni"</string> </resources> diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index 1874fd1..acca0c9 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Dera e hapur"</string> <string name="printer_jammed" msgid="5104099859384749499">"I bllokuar"</string> <string name="printer_offline" msgid="9196864753298645066">"Jashtë linje"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Certifikatë me probleme"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Nuk është enkriptuar"</string> <string name="printer_check" msgid="6428369671197132828">"Kontrollo printerin"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Në pritje për të dërguar"</string> <string name="unreadable_input" msgid="2199948329556527912">"Dokumenti nuk mund të lexohej"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Harro"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Lidhet përmes Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Lidhet përmes rrjetit aktual në <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Siguria"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Ky printer ka dhënë një certifikatë të re sigurie ose një pajisje tjetër po e imiton atë. Do ta pranosh certifikatën e re?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Ky printer nuk pranon më punë të enkriptuara. Të vazhdohet printimi?"</string> + <string name="accept" msgid="4426153292469698134">"Prano"</string> + <string name="reject" msgid="24751635160440693">"Refuzo"</string> </resources> diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 186202d..d79b9a2 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Врата су отворена"</string> <string name="printer_jammed" msgid="5104099859384749499">"Папир је заглављен"</string> <string name="printer_offline" msgid="9196864753298645066">"Офлајн"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Неисправан сертификат"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Није шифровано"</string> <string name="printer_check" msgid="6428369671197132828">"Проверите штампач"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Чека се на слање"</string> <string name="unreadable_input" msgid="2199948329556527912">"Читање документа није успело"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Заборави"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Повезује се преко Wi-Fi Direct-а"</string> <string name="connects_via_network" msgid="5990041581556733898">"Повезује се преко тренутне мреже помоћу IP адресе <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Безбедност"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Овај штампач пружа нови безбедносни сертификат или се неки други уређај лажно представља као он. Желите ли да прихватите нови сертификат?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Овај штампач више не прихвата шифроване задатке. Желите ли да наставите са штампањем?"</string> + <string name="accept" msgid="4426153292469698134">"Прихвати"</string> + <string name="reject" msgid="24751635160440693">"Одбиј"</string> </resources> diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 839e86e..d306af7 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Luckan är öppen"</string> <string name="printer_jammed" msgid="5104099859384749499">"Blockerad"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Felaktigt certifikat"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Inte krypterad"</string> <string name="printer_check" msgid="6428369671197132828">"Kontrollera skrivare"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Väntar på att skicka"</string> <string name="unreadable_input" msgid="2199948329556527912">"Det gick inte att läsa dokumentet"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Glöm"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Ansluter via Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Ansluter via det nuvarande nätverket på <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Säkerhet"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Skrivaren har ett nytt säkerhetscertifikat, om inte en annan enhet har övertagit dess identitet. Godkänner du det nya certifikatet?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Krypterade jobb godkänns inte längre på denna skrivare. Vill du fortsätta att skriva ut?"</string> + <string name="accept" msgid="4426153292469698134">"Godkänn"</string> + <string name="reject" msgid="24751635160440693">"Godkänn inte"</string> </resources> diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 186a561..8177ae5 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="3551052199033657984">"Huduma Chaguo msingi ya Kuchapisha"</string> + <string name="app_name" msgid="3551052199033657984">"Huduma Chaguomsingi ya Kuchapisha"</string> <string name="printer_busy" msgid="8604311528104955859">"Inatumika"</string> <string name="printer_out_of_paper" msgid="4882186432807703877">"Karatasi zimeisha"</string> <string name="printer_out_of_ink" msgid="7361897651097675464">"Wino umeisha"</string> @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Mlango umefunguliwa"</string> <string name="printer_jammed" msgid="5104099859384749499">"Karatasi imekwama ndani"</string> <string name="printer_offline" msgid="9196864753298645066">"Nje ya mtandao"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Cheti kina tatizo"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Haijasimbwa kwa njia fiche"</string> <string name="printer_check" msgid="6428369671197132828">"Angalia printa"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Inasubiri kutuma"</string> <string name="unreadable_input" msgid="2199948329556527912">"Haikuweza kusoma hati"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Sahau"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Huunganisha kupitia Wi-Fi moja kwa moja"</string> <string name="connects_via_network" msgid="5990041581556733898">"Huunganisha kupitia mtandao wa sasa kwenye <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Usalama"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Printa hii imetoa cheti kipya cha usalama au kifaa kingine kinaiiga. Je, ungependa kukubali cheti kipya?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Printa hii haichapishi tena kazi zilizosimbwa kwa njia fiche. Ungependa kuendelea kuchapisha?"</string> + <string name="accept" msgid="4426153292469698134">"Kubali"</string> + <string name="reject" msgid="24751635160440693">"Kataa"</string> </resources> diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index 5ab7d7f..69bc30c 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"டோர் திறந்துள்ளது"</string> <string name="printer_jammed" msgid="5104099859384749499">"காகிதம் சிக்கிக்கொண்டது"</string> <string name="printer_offline" msgid="9196864753298645066">"ஆஃப்லைன்"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"தவறான சான்றிதழ்"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"என்க்ரிப்ஷன் செய்யப்படவில்லை"</string> <string name="printer_check" msgid="6428369671197132828">"பிரிண்டரைச் சரிபார்"</string> <string name="waiting_to_send" msgid="2022115199902822180">"அனுப்பக் காத்திருக்கிறது"</string> <string name="unreadable_input" msgid="2199948329556527912">"ஆவணத்தைப் படிக்க முடியவில்லை"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"அகற்று"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"வைஃபை டைரக்ட் மூலமாக இணைக்கிறது"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> இல் தற்போதைய நெட்வொர்க் மூலம் இணைக்கிறது"</string> + <string name="security" msgid="2279008326210305401">"பாதுகாப்பு"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"இந்தப் பிரிண்டரோ இதன் பெயரில் வேறொரு சாதனமோ புதிய பாதுகாப்பு சான்றிதழை வழங்கியுள்ளது. புதிய சான்றிதழை ஏற்கவா?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"இந்தப் பிரிண்ட்டரானது என்க்ரிப்ஷன் செய்தவற்றை அச்சிடாது. அச்சிடுவதைத் தொடரவா?"</string> + <string name="accept" msgid="4426153292469698134">"ஏற்கிறேன்"</string> + <string name="reject" msgid="24751635160440693">"நிராகரி"</string> </resources> diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 494c5db..8870a02 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"తలుపు తెరుచుకుని ఉంది"</string> <string name="printer_jammed" msgid="5104099859384749499">"ఇరుక్కుపోయింది"</string> <string name="printer_offline" msgid="9196864753298645066">"ఆఫ్లైన్"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"సర్టిఫికెట్ చెల్లదు"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"ఎన్క్రిప్ట్ చేయబడలేదు"</string> <string name="printer_check" msgid="6428369671197132828">"ప్రింటర్ని తనిఖీ చేయి"</string> <string name="waiting_to_send" msgid="2022115199902822180">"పంపడానికి వేచి ఉంది"</string> <string name="unreadable_input" msgid="2199948329556527912">"పత్రాన్ని చదవడం సాధ్యం కాలేదు"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"విస్మరించండి"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct ద్వారా కనెక్ట్ చేస్తోంది"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> వద్ద ప్రస్తుత నెట్వర్క్ ద్వారా కనెక్ట్ చేస్తోంది"</string> + <string name="security" msgid="2279008326210305401">"భద్రత"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"ఈ ప్రింటర్కి కొత్త భద్రతా సర్టిఫికెట్ అందించి ఉండవచ్చు లేదా వేరే పరికరం ఏదైనా దీన్ని అనుకరిస్తూ ఉండవచ్చు. కొత్త సర్టిఫికెట్ని ఆమోదిస్తారా?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"ఈ ప్రింటర్ ఇకపై ఎన్క్రిప్ట్ చేసిన ఫైల్లను తీసుకోదు అయినా ప్రింట్ చేయడాన్ని కొనసాగిస్తారా?"</string> + <string name="accept" msgid="4426153292469698134">"ఆమోదించు"</string> + <string name="reject" msgid="24751635160440693">"తిరస్కరించు"</string> </resources> diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index cf6f148..e73d8b9 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"ประตูเปิดอยู่"</string> <string name="printer_jammed" msgid="5104099859384749499">"กระดาษติด"</string> <string name="printer_offline" msgid="9196864753298645066">"ออฟไลน์"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"ใบรับรองไม่ถูกต้อง"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"ไม่ได้เข้ารหัส"</string> <string name="printer_check" msgid="6428369671197132828">"ตรวจสอบเครื่องพิมพ์"</string> <string name="waiting_to_send" msgid="2022115199902822180">"กำลังรอส่ง"</string> <string name="unreadable_input" msgid="2199948329556527912">"ไม่สามารถอ่านเอกสาร"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"ไม่ต้องจำ"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"เชื่อมต่อผ่าน Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"เชื่อมต่อผ่านเครือข่ายปัจจุบันที่ <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"ความปลอดภัย"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"เครื่องพิมพ์นี้ให้ใบรับรองความปลอดภัยใหม่ หรืออุปกรณ์อื่นแอบอ้างว่าเป็นเครื่องพิมพ์นี้ ยอมรับใบรับรองใหม่ไหม"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"เครื่องพิมพ์นี้ไม่ยอมรับงานที่เข้ารหัสอีกต่อไป พิมพ์ต่อไหม"</string> + <string name="accept" msgid="4426153292469698134">"ยอมรับ"</string> + <string name="reject" msgid="24751635160440693">"ปฏิเสธ"</string> </resources> diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 3419bea..390789e 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Bukas ang takip"</string> <string name="printer_jammed" msgid="5104099859384749499">"Na-stuck"</string> <string name="printer_offline" msgid="9196864753298645066">"Offline"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Invalid ang certificate"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Hindi naka-encrypt"</string> <string name="printer_check" msgid="6428369671197132828">"Suriin ang printer"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Naghihintay upang ipadala"</string> <string name="unreadable_input" msgid="2199948329556527912">"Hindi mabasa ang dokumento"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Kalimutan"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Kumokonekta sa pamamagitan ng Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Kumokonekta sa pamamagitan ng kasalukuyang network sa <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Seguridad"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Nagbigay ang printer na ito ng bagong certificate ng seguridad, o may ibang device na nagpapanggap bilang ito. Tanggapin ang bagong certificate?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Hindi na tumatanggap ng mga naka-encrypt na gawa ang printer na ito. Ipagpatuloy ang pag-print?"</string> + <string name="accept" msgid="4426153292469698134">"Tanggapin"</string> + <string name="reject" msgid="24751635160440693">"Tanggihan"</string> </resources> diff --git a/res/values-tr/lineage_strings.xml b/res/values-tr/lineage_strings.xml new file mode 100644 index 0000000..ca114b3 --- /dev/null +++ b/res/values-tr/lineage_strings.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">Wi-Fi Doğrudan baskı</string> + <string name="recommendation_summary">Varsayılan Baskı Hizmeti temel seçenekler sunar. Bu yazıcının diğer seçenekleri başka bir baskı servisinden edinilebilir.</string> + <string name="recommendations_heading">Önerilen servisler</string> + <string name="recommendation_install_summary">Yüklemek için seçin</string> + <string name="recommendation_enable_summary">Etkinleştirmek için seçin</string> + <string name="recommendation_manage">Servisleri yönet</string> + <string name="connections">Bağlantılar</string> + <string name="fix">Düzelt</string> +</resources> diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 6b3e43d..af02375 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Kapı açık"</string> <string name="printer_jammed" msgid="5104099859384749499">"Kağıt sıkıştı"</string> <string name="printer_offline" msgid="9196864753298645066">"Çevrimdışı"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Bozuk sertifika"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Şifrelenmedi"</string> <string name="printer_check" msgid="6428369671197132828">"Yazıcıyı kontrol et"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Gönderilmeyi bekliyor"</string> <string name="unreadable_input" msgid="2199948329556527912">"Doküman okunamadı"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Unut"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Kablosuz Doğrudan Bağlantı ile bağlanıyor"</string> <string name="connects_via_network" msgid="5990041581556733898">"Geçerli ağ ile <xliff:g id="IP_ADDRESS">%1$s</xliff:g> adresinden bağlanıyor"</string> + <string name="security" msgid="2279008326210305401">"Güvenlik"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Bu yazıcı yeni bir güvenlik sertifikası sağladı veya başka bir cihaz bu yazıcının kimliğine bürünüyor. Yeni sertifikayı kabul ediyor musunuz?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Bu yazıcı artık şifrelenmiş işleri kabul etmiyor. Yazdırmaya devam etmek istiyor musunuz?"</string> + <string name="accept" msgid="4426153292469698134">"Kabul et"</string> + <string name="reject" msgid="24751635160440693">"Reddet"</string> </resources> diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 5587f34..c3ed2e0 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Дверцята відчинені"</string> <string name="printer_jammed" msgid="5104099859384749499">"Застряг папір"</string> <string name="printer_offline" msgid="9196864753298645066">"Офлайн"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Недійсний сертифікат"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Не зашифровано"</string> <string name="printer_check" msgid="6428369671197132828">"Вибрати принтер"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Очікує надсилання"</string> <string name="unreadable_input" msgid="2199948329556527912">"Не вдалося прочитати документ"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Забути"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Під’єднується через Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Під’єднується через поточну мережу за IP-адресою <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Безпека"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Цей принтер надав новий сертифікат безпеки або інший пристрій видає себе за нього. Прийняти новий сертифікат?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Цей принтер більше не підтримує зашифровані завдання. Продовжити друк?"</string> + <string name="accept" msgid="4426153292469698134">"Прийняти"</string> + <string name="reject" msgid="24751635160440693">"Відхилити"</string> </resources> diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index c47aa86..ca193e8 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"پرنٹر کا دروازہ کھلا ہے"</string> <string name="printer_jammed" msgid="5104099859384749499">"پرنٹر میں رکاوٹ ہے"</string> <string name="printer_offline" msgid="9196864753298645066">"آف لائن"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"بُرا سرٹیفیکیٹ"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"مرموز کردہ نہیں ہے"</string> <string name="printer_check" msgid="6428369671197132828">"پرنٹر چیک کریں"</string> <string name="waiting_to_send" msgid="2022115199902822180">"بھیجنے کیلئے منتظر ہے"</string> <string name="unreadable_input" msgid="2199948329556527912">"دستاویز پڑھا نہیں جا سکا"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"بھول جائیں"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"بذریعہ Wi-Fi ڈائریکٹ منسلک کرتا ہے"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> پر موجودہ نیٹ ورک کے ذریعہ منسلک کرتا ہے"</string> + <string name="security" msgid="2279008326210305401">"سیکیورٹی"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"اس پرنٹر نے سیکیورٹی کا ایک نیا سرٹیفیکیٹ فراہم کیا ہے یا کوئی دوسرا آلہ اس کی شخصیت گیری کر رہا ہے۔ نیا سرٹیفیکیٹ قبول کریں؟"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"یہ پرنٹر اب مرموز کردہ جابز کو قبول نہیں کرتا ہے۔ پرنٹ کرنا جاری رکھیں؟"</string> + <string name="accept" msgid="4426153292469698134">"قبول کریں"</string> + <string name="reject" msgid="24751635160440693">"مسترد کریں"</string> </resources> diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 75de110..a1bc61d 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Eshikchasi ochiq"</string> <string name="printer_jammed" msgid="5104099859384749499">"Tiqilib qolgan"</string> <string name="printer_offline" msgid="9196864753298645066">"Oflayn"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Sertifikat buzilgan"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Shifrlanmagan"</string> <string name="printer_check" msgid="6428369671197132828">"Printerni tekshirish"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Yuborilishi kutilmoqda"</string> <string name="unreadable_input" msgid="2199948329556527912">"Hujjatni o‘qib bo‘lmadi"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Olib tashlash"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Wi-Fi Direct orqali ulanadi"</string> <string name="connects_via_network" msgid="5990041581556733898">"<xliff:g id="IP_ADDRESS">%1$s</xliff:g> manzilida joriy tarmoq orqali ulanadi"</string> + <string name="security" msgid="2279008326210305401">"Xavfsizlik"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Bu printerga yangi xavfsizlik sertifikati berilgan. Bu printer nomi ostida boshqa printer ishlayotganga oʻxshaydi. Yangi sertifikatni qabul qilasizmi?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Bu printer endi shifrlangan vazifalarni qabul qilmaydi. Bosmaga chiqarilsinmi?"</string> + <string name="accept" msgid="4426153292469698134">"Roziman"</string> + <string name="reject" msgid="24751635160440693">"Rad etaman"</string> </resources> diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 765f492..2687ffb 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Cửa mở"</string> <string name="printer_jammed" msgid="5104099859384749499">"Kẹt giấy"</string> <string name="printer_offline" msgid="9196864753298645066">"Ngoại tuyến"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Chứng chỉ không hợp lệ"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Không được mã hóa"</string> <string name="printer_check" msgid="6428369671197132828">"Kiểm tra máy in"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Đang đợi gửi"</string> <string name="unreadable_input" msgid="2199948329556527912">"Không thể đọc tài liệu"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Xóa"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Kết nối qua Wi-Fi Direct"</string> <string name="connects_via_network" msgid="5990041581556733898">"Kết nối qua mạng hiện tại tại <xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Bảo mật"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Máy in này đã cung cấp một chứng chỉ bảo mật mới hoặc một thiết bị khác đang mạo danh máy in này. Chấp nhận chứng chỉ mới?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Máy in này không còn chấp nhận các lệnh in đã mã hóa. Bạn muốn tiếp tục in?"</string> + <string name="accept" msgid="4426153292469698134">"Chấp nhận"</string> + <string name="reject" msgid="24751635160440693">"Từ chối"</string> </resources> diff --git a/res/values-zh-rCN/lineage_strings.xml b/res/values-zh-rCN/lineage_strings.xml new file mode 100644 index 0000000..04103f8 --- /dev/null +++ b/res/values-zh-rCN/lineage_strings.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="wifi_direct_printing">Wi-Fi 直连打印</string> + <string name="recommendation_summary">默认的打印服务提供基本选项。此打印机的其他选项可以从另一个打印服务中找到。</string> + <string name="recommendations_heading">建议的服务</string> + <string name="recommendation_install_summary">选择以安装</string> + <string name="recommendation_enable_summary">选择以启用</string> + <string name="recommendation_manage">管理服务</string> + <string name="connections">连接</string> + <string name="wifi_direct_permission_rationale">默认打印服务需要位置权限 + 以访问 Wi-Fi 直连打印机,因为您的位置可以从附近的设备中推断出。</string> + <string name="fix">修复</string> +</resources> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 0770ab7..0426d09 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"机盖未关"</string> <string name="printer_jammed" msgid="5104099859384749499">"卡纸"</string> <string name="printer_offline" msgid="9196864753298645066">"离线"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"证书有误"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"未加密"</string> <string name="printer_check" msgid="6428369671197132828">"检查打印机"</string> <string name="waiting_to_send" msgid="2022115199902822180">"正在等待发送"</string> <string name="unreadable_input" msgid="2199948329556527912">"无法读取文档"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"忽略"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"通过 WLAN 直连连接"</string> <string name="connects_via_network" msgid="5990041581556733898">"在 <xliff:g id="IP_ADDRESS">%1$s</xliff:g> 通过当前网络连接"</string> + <string name="security" msgid="2279008326210305401">"安全"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"此打印机提供了新的安全证书,或其他设备正在冒充此打印机。要接受新证书吗?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"此打印机不再接受加密的作业。要继续打印吗?"</string> + <string name="accept" msgid="4426153292469698134">"接受"</string> + <string name="reject" msgid="24751635160440693">"拒绝"</string> </resources> diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index c577b9c..9144528 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"機門未關"</string> <string name="printer_jammed" msgid="5104099859384749499">"卡紙"</string> <string name="printer_offline" msgid="9196864753298645066">"離線"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"無效的憑證"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"未經加密"</string> <string name="printer_check" msgid="6428369671197132828">"檢查打印機"</string> <string name="waiting_to_send" msgid="2022115199902822180">"正在等待傳送"</string> <string name="unreadable_input" msgid="2199948329556527912">"無法讀取文件"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"清除"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"透過 Wi-Fi Direct 連線"</string> <string name="connects_via_network" msgid="5990041581556733898">"透過目前的網絡 (<xliff:g id="IP_ADDRESS">%1$s</xliff:g>) 連線"</string> + <string name="security" msgid="2279008326210305401">"安全性"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"此打印機提供了新的安全憑證,或者另一部裝置正在冒用其身分。要接受新的憑證嗎?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"此打印機不再接受加密工作。要繼續列印嗎?"</string> + <string name="accept" msgid="4426153292469698134">"接受"</string> + <string name="reject" msgid="24751635160440693">"拒絕"</string> </resources> diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index e46c7bf..ff5643b 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"擋門處於開啟狀態"</string> <string name="printer_jammed" msgid="5104099859384749499">"卡紙"</string> <string name="printer_offline" msgid="9196864753298645066">"離線"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"錯誤的憑證"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"未加密"</string> <string name="printer_check" msgid="6428369671197132828">"請檢查印表機"</string> <string name="waiting_to_send" msgid="2022115199902822180">"正在等待傳送"</string> <string name="unreadable_input" msgid="2199948329556527912">"無法讀取文件"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"清除"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"透過 Wi-Fi Direct 連線"</string> <string name="connects_via_network" msgid="5990041581556733898">"透過目前的網路 (<xliff:g id="IP_ADDRESS">%1$s</xliff:g>) 連線"</string> + <string name="security" msgid="2279008326210305401">"安全性"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"這台印表機提供新的安全性憑證,或有其他裝置冒用該印表機的身分。要接受新的憑證嗎?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"這台印表機不再支援已加密的工作。要繼續列印嗎?"</string> + <string name="accept" msgid="4426153292469698134">"接受"</string> + <string name="reject" msgid="24751635160440693">"拒絕"</string> </resources> diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index b8433f0..3904068 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -27,6 +27,8 @@ <string name="printer_door_open" msgid="2446302931916940874">"Umnyango uvulekile"</string> <string name="printer_jammed" msgid="5104099859384749499">"Ijemile"</string> <string name="printer_offline" msgid="9196864753298645066">"Okungaxhunyiwe kwi-inthanethi"</string> + <string name="printer_bad_certificate" msgid="1366180387095466268">"Isitifiketi esingalungile"</string> + <string name="printer_not_encrypted" msgid="1913051469275483673">"Akubetheliwe"</string> <string name="printer_check" msgid="6428369671197132828">"Hlola iphrinta"</string> <string name="waiting_to_send" msgid="2022115199902822180">"Ilindele ukuthumela"</string> <string name="unreadable_input" msgid="2199948329556527912">"Ayikwazanga ukufunda idokhumenti"</string> @@ -57,4 +59,9 @@ <string name="forget" msgid="892068061425802502">"Khohlwa"</string> <string name="connects_via_wifi_direct" msgid="652300632780158437">"Ixhuma nge-Wi-Fi eqondile"</string> <string name="connects_via_network" msgid="5990041581556733898">"Ixhuma ngenethiwekhi ku-<xliff:g id="IP_ADDRESS">%1$s</xliff:g>"</string> + <string name="security" msgid="2279008326210305401">"Ukuvikela"</string> + <string name="certificate_update_request" msgid="1314796413107139475">"Le phrinta inikeze isitifiketi esisha sokuvikela, noma enye idivayisi izenza yona. Yamukela isitifiketi esisha?"</string> + <string name="not_encrypted_request" msgid="4871472176807381642">"Le phrinta ayisamukeli imisebenzi ebetheliwe. Qhubeka uphrinte?"</string> + <string name="accept" msgid="4426153292469698134">"Yamukela"</string> + <string name="reject" msgid="24751635160440693">"Nqaba"</string> </resources> diff --git a/res/values/lineage_strings.xml b/res/values/lineage_strings.xml new file mode 100644 index 0000000..eb1d246 --- /dev/null +++ b/res/values/lineage_strings.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Preference name for enable/disable of Wi-Fi Direct printing [CHAR LIMIT=UNLIMITED] --> + <string name="wifi_direct_printing">Wi-Fi Direct printing</string> + + <!-- Explain purpose of recommendation fragment [CHAR LIMIT=UNLIMITED] --> + <string name="recommendation_summary">The Default Print Service provides basic options. Other options for this printer may be available from another print service.</string> + <!-- Heading for services that are not currently installed, but recommended [CHAR LIMIT=UNLIMITED] --> + <string name="recommendations_heading">Recommended services</string> + <!-- Summary for recommended services that are not installed [CHAR LIMIT=UNLIMITED] --> + <string name="recommendation_install_summary">Select to install</string> + <!-- Summary for recommended services that are installed [CHAR LIMIT=UNLIMITED] --> + <string name="recommendation_enable_summary">Select to enable</string> + <!-- Button to allow user to enable/disable installed print services. [CHAR LIMIT=UNLIMITED] --> + <string name="recommendation_manage">Manage services</string> + + <!-- Channel name for connection-related notifications [CHAR LIMIT=40] --> + <string name="connections">Connections</string> + <!-- Message shown in dialog, toast, or notification if the service cannot get Wi-Fi Direct permissions [CHAR LIMIT=UNLIMITED] --> + <string name="wifi_direct_permission_rationale">Default Print Service needs location permissions + to access Wi-Fi Direct printers because your location can be inferred from nearby devices.</string> + <!-- Button label in a notification or dialog. This button leads to a request to grant permissions [CHAR LIMIT=20] --> + <string name="fix">Fix</string> +</resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index eac63ce..54cc5b9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -29,6 +29,8 @@ <string name="printer_door_open">Door open</string> <string name="printer_jammed">Jammed</string> <string name="printer_offline">Offline</string> + <string name="printer_bad_certificate">Bad certificate</string> + <string name="printer_not_encrypted">Not encrypted</string> <string name="printer_check">Check printer</string> <string name="waiting_to_send">Waiting to send</string> @@ -82,4 +84,15 @@ <xliff:g example="192.168.0.101" id="ip_address">%1$s</xliff:g> </string> + <!-- Channel name for security-related notifications [CHAR LIMIT=40] --> + <string name="security">Security</string> + <!-- Message shown in notification if a printer presented a changes security certificate [CHAR LIMIT=UNLIMITED] --> + <string name="certificate_update_request">This printer provided a new security certificate, or another + device is impersonating it. Accept the new certificate?</string> + <!-- Message shown in notification if a printer no longer supports encryption [CHAR LIMIT=UNLIMITED] --> + <string name="not_encrypted_request">This printer no longer accepts encrypted jobs. Continue printing?</string> + <!-- Button label in a notification. This button accepts a printer security change [CHAR LIMIT=20] --> + <string name="accept">Accept</string> + <!-- Button label in a notification. This button rejects a printer security change [CHAR LIMIT=20] --> + <string name="reject">Reject</string> </resources> diff --git a/res/xml/add_printers_prefs.xml b/res/xml/add_printers_prefs.xml index ce44052..2f6d981 100644 --- a/res/xml/add_printers_prefs.xml +++ b/res/xml/add_printers_prefs.xml @@ -25,17 +25,24 @@ android:persistent="false" android:order="1" /> + <SwitchPreference + android:key="wifi_direct_printing" + android:title="@string/wifi_direct_printing" + android:iconSpaceReserved="true" + android:persistent="false" + android:order="2" /> + <Preference android:key="find_wifi_direct" android:title="@string/find_wifi_direct" android:icon="@drawable/ic_menu_search" android:persistent="false" - android:order="2" /> + android:order="3" /> <PreferenceCategory android:key="saved_printers" android:title="@string/saved_printers" android:persistent="false" - android:order="3" /> + android:order="4" /> </PreferenceScreen> diff --git a/res/xml/more_options_prefs.xml b/res/xml/more_options_prefs.xml new file mode 100644 index 0000000..b491a74 --- /dev/null +++ b/res/xml/more_options_prefs.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<PreferenceScreen + xmlns:android="http://schemas.android.com/apk/res/android"> + <Preference + android:key="pref_static_explanation" + android:selectable="false" + android:summary="@string/recommendation_summary" + android:order="0" /> + + <PreferenceCategory + android:key="recommendation_category" + android:title="@string/recommendations_heading" + android:persistent="false" + android:order="1"/> + + <Preference + android:key="manage" + android:title="@string/recommendation_manage" + android:icon="@drawable/ic_settings_gear" + android:persistent="false" + android:order="2" /> +</PreferenceScreen> diff --git a/res/xml/printservice.xml b/res/xml/printservice.xml index 141e246..bcc7b97 100644 --- a/res/xml/printservice.xml +++ b/res/xml/printservice.xml @@ -17,4 +17,5 @@ <print-service xmlns:android="http://schemas.android.com/apk/res/android" android:addPrintersActivity="com.android.bips.ui.AddPrintersActivity" + android:advancedPrintOptionsActivity="com.android.bips.ui.MoreOptionsActivity" />
\ No newline at end of file diff --git a/src/com/android/bips/BuiltInPrintService.java b/src/com/android/bips/BuiltInPrintService.java index 2bb73ef..f9931a5 100644 --- a/src/com/android/bips/BuiltInPrintService.java +++ b/src/com/android/bips/BuiltInPrintService.java @@ -17,13 +17,20 @@ package com.android.bips; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.graphics.drawable.Icon; import android.net.nsd.NsdManager; import android.net.wifi.WifiManager; import android.os.Handler; +import android.print.PrinterId; import android.printservice.PrintJob; import android.printservice.PrintService; import android.printservice.PrinterDiscoverySession; @@ -40,6 +47,7 @@ import com.android.bips.discovery.NsdResolveQueue; import com.android.bips.discovery.P2pDiscovery; import com.android.bips.ipp.Backend; import com.android.bips.ipp.CapabilitiesCache; +import com.android.bips.ipp.CertificateStore; import com.android.bips.p2p.P2pMonitor; import com.android.bips.p2p.P2pUtils; import com.android.bips.util.BroadcastMonitor; @@ -51,6 +59,20 @@ public class BuiltInPrintService extends PrintService { private static final boolean DEBUG = false; private static final int IPPS_PRINTER_DELAY = 150; private static final int P2P_DISCOVERY_DELAY = 1000; + private static final String CHANNEL_ID_SECURITY = "security"; + private static final String TAG_CERTIFICATE_REQUEST = + BuiltInPrintService.class.getCanonicalName() + ".CERTIFICATE_REQUEST"; + private static final String ACTION_CERTIFICATE_ACCEPT = + BuiltInPrintService.class.getCanonicalName() + ".CERTIFICATE_ACCEPT"; + private static final String ACTION_CERTIFICATE_REJECT = + BuiltInPrintService.class.getCanonicalName() + ".CERTIFICATE_REJECT"; + public static final String ACTION_P2P_PERMISSION_CANCEL = + BuiltInPrintService.class.getCanonicalName() + ".P2P_PERMISSION_CANCEL"; + private static final String EXTRA_CERTIFICATE = "certificate"; + private static final String EXTRA_PRINTER_ID = "printer-id"; + private static final String EXTRA_PRINTER_UUID = "printer-uuid"; + private static final int CERTIFICATE_REQUEST_ID = 1000; + public static final int P2P_PERMISSION_REQUEST_ID = 1001; // Present because local activities can bind, but cannot access this object directly private static WeakReference<BuiltInPrintService> sInstance; @@ -60,12 +82,14 @@ public class BuiltInPrintService extends PrintService { private Discovery mMdnsDiscovery; private ManualDiscovery mManualDiscovery; private CapabilitiesCache mCapabilitiesCache; + private CertificateStore mCertificateStore; private JobQueue mJobQueue; private Handler mMainHandler; private Backend mBackend; private WifiManager.WifiLock mWifiLock; private P2pMonitor mP2pMonitor; private NsdResolveQueue mNsdResolveQueue; + private P2pPermissionManager mP2pPermissionManager; /** * Return the current print service instance, if running @@ -85,9 +109,13 @@ public class BuiltInPrintService extends PrintService { } } super.onCreate(); + createNotificationChannel(); + mP2pPermissionManager = new P2pPermissionManager(this); + mP2pPermissionManager.reset(); sInstance = new WeakReference<>(this); mBackend = new Backend(this); + mCertificateStore = new CertificateStore(this); mCapabilitiesCache = new CapabilitiesCache(this, mBackend, CapabilitiesCache.DEFAULT_MAX_CONCURRENT); mP2pMonitor = new P2pMonitor(this); @@ -116,6 +144,7 @@ public class BuiltInPrintService extends PrintService { @Override public void onDestroy() { if (DEBUG) Log.d(TAG, "onDestroy()"); + mP2pPermissionManager.closeNotification(); mCapabilitiesCache.close(); mP2pMonitor.stopAll(); mBackend.close(); @@ -186,6 +215,13 @@ public class BuiltInPrintService extends PrintService { } /** + * Return a general {@link P2pPermissionManager} + */ + public P2pPermissionManager getP2pPermissionManager() { + return mP2pPermissionManager; + } + + /** * Listen for a set of broadcast messages until stopped */ public BroadcastMonitor receiveBroadcasts(BroadcastReceiver receiver, String... actions) { @@ -200,6 +236,13 @@ public class BuiltInPrintService extends PrintService { } /** + * Return a store of certificate public keys for supporting trust-on-first-use. + */ + public CertificateStore getCertificateStore() { + return mCertificateStore; + } + + /** * Return the main handler for posting {@link Runnable} objects to the main UI */ public Handler getMainHandler() { @@ -241,4 +284,100 @@ public class BuiltInPrintService extends PrintService { mWifiLock.release(); } } + + /** + * Set up a channel for notifications. + */ + private void createNotificationChannel() { + NotificationChannel channel = new NotificationChannel(CHANNEL_ID_SECURITY, + getString(R.string.security), NotificationManager.IMPORTANCE_HIGH); + + NotificationManager manager = (NotificationManager) getSystemService( + Context.NOTIFICATION_SERVICE); + manager.createNotificationChannel(channel); + } + + /** + * Notify the user of a certificate change (could be a MITM attack) and allow response. + * + * When certificate is null, the printer is being downgraded to no-encryption. + */ + void notifyCertificateChange(String printerName, PrinterId printerId, String printerUuid, + byte[] certificate) { + String message; + if (certificate == null) { + message = getString(R.string.not_encrypted_request); + } else { + message = getString(R.string.certificate_update_request); + } + + Intent rejectIntent = new Intent(this, BuiltInPrintService.class) + .setAction(ACTION_CERTIFICATE_REJECT) + .putExtra(EXTRA_PRINTER_ID, printerId); + PendingIntent pendingRejectIntent = PendingIntent.getService(this, CERTIFICATE_REQUEST_ID, + rejectIntent, PendingIntent.FLAG_UPDATE_CURRENT); + Notification.Action rejectAction = new Notification.Action.Builder( + Icon.createWithResource(this, R.drawable.ic_printservice), + getString(R.string.reject), pendingRejectIntent).build(); + + PendingIntent deleteIntent = PendingIntent.getService(this, CERTIFICATE_REQUEST_ID, + rejectIntent, 0); + + Intent acceptIntent = new Intent(this, BuiltInPrintService.class) + .setAction(ACTION_CERTIFICATE_ACCEPT) + .putExtra(EXTRA_PRINTER_UUID, printerUuid) + .putExtra(EXTRA_PRINTER_ID, printerId); + if (certificate != null) { + acceptIntent.putExtra(EXTRA_CERTIFICATE, certificate); + } + PendingIntent pendingAcceptIntent = PendingIntent.getService(this, CERTIFICATE_REQUEST_ID, + acceptIntent, PendingIntent.FLAG_UPDATE_CURRENT); + Notification.Action acceptAction = new Notification.Action.Builder( + Icon.createWithResource(this, R.drawable.ic_printservice), + getString(R.string.accept), pendingAcceptIntent).build(); + + Notification notification = new Notification.Builder(this, CHANNEL_ID_SECURITY) + .setContentTitle(printerName) + .setSmallIcon(R.drawable.ic_printservice) + .setStyle(new Notification.BigTextStyle().bigText(message)) + .setContentText(message) + .setAutoCancel(true) + .addAction(rejectAction) + .addAction(acceptAction) + .setDeleteIntent(deleteIntent) + .build(); + + NotificationManager manager = (NotificationManager) getSystemService( + Context.NOTIFICATION_SERVICE); + manager.notify(TAG_CERTIFICATE_REQUEST, CERTIFICATE_REQUEST_ID, notification); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + if (DEBUG) Log.d(TAG, "Received action=" + intent.getAction()); + NotificationManager manager = (NotificationManager) getSystemService( + Context.NOTIFICATION_SERVICE); + if (ACTION_CERTIFICATE_ACCEPT.equals(intent.getAction())) { + byte[] certificate = intent.getByteArrayExtra(EXTRA_CERTIFICATE); + PrinterId printerId = intent.getParcelableExtra(EXTRA_PRINTER_ID); + String printerUuid = intent.getStringExtra(EXTRA_PRINTER_UUID); + if (certificate != null) { + mCertificateStore.put(printerUuid, certificate); + } else { + mCertificateStore.remove(printerUuid); + } + // Restart the job with the updated certificate in place + mJobQueue.restart(printerId); + manager.cancel(TAG_CERTIFICATE_REQUEST, CERTIFICATE_REQUEST_ID); + } else if (ACTION_CERTIFICATE_REJECT.equals(intent.getAction())) { + // Cancel any job in certificate state for this uuid + PrinterId printerId = intent.getParcelableExtra(EXTRA_PRINTER_ID); + mJobQueue.cancel(printerId); + manager.cancel(TAG_CERTIFICATE_REQUEST, CERTIFICATE_REQUEST_ID); + } else if (ACTION_P2P_PERMISSION_CANCEL.equals(intent.getAction())) { + // Inform p2pPermissionManager the user canceled the notification (non-permanent) + mP2pPermissionManager.applyPermissionChange(false); + } + return START_NOT_STICKY; + } } diff --git a/src/com/android/bips/JobQueue.java b/src/com/android/bips/JobQueue.java index 6b64b41..f34dcdf 100644 --- a/src/com/android/bips/JobQueue.java +++ b/src/com/android/bips/JobQueue.java @@ -18,13 +18,16 @@ package com.android.bips; import android.print.PrintJobId; +import android.print.PrinterId; import java.util.ArrayList; import java.util.List; +import java.util.UUID; +import java.util.concurrent.CopyOnWriteArrayList; /** Manages a job queue, ensuring only one job is printed at a time */ class JobQueue { - private final List<LocalPrintJob> mJobs = new ArrayList<>(); + private final List<LocalPrintJob> mJobs = new CopyOnWriteArrayList<>(); private LocalPrintJob mCurrent; /** Queue a print job for printing at the next available opportunity */ @@ -33,6 +36,26 @@ class JobQueue { startNextJob(); } + /** Cancel any previously queued job for a printer with the supplied ID. */ + void cancel(PrinterId printerId) { + for (LocalPrintJob job : mJobs) { + if (printerId.equals(job.getPrintJob().getInfo().getPrinterId())) { + cancel(job.getPrintJobId()); + } + } + + if (mCurrent != null && printerId.equals(mCurrent.getPrintJob().getInfo().getPrinterId())) { + cancel(mCurrent.getPrintJobId()); + } + } + + /** Restart any blocked job for a printer with this ID. */ + void restart(PrinterId printerId) { + if (mCurrent != null && printerId.equals(mCurrent.getPrintJob().getInfo().getPrinterId())) { + mCurrent.restart(); + } + } + /** Cancel a previously queued job */ void cancel(PrintJobId id) { // If a job hasn't started, kill it instantly. @@ -44,7 +67,7 @@ class JobQueue { } } - if (mCurrent.getPrintJobId().equals(id)) { + if (mCurrent != null && mCurrent.getPrintJobId().equals(id)) { mCurrent.cancel(); } } diff --git a/src/com/android/bips/LocalPrintJob.java b/src/com/android/bips/LocalPrintJob.java index ba0776c..adadd14 100644 --- a/src/com/android/bips/LocalPrintJob.java +++ b/src/com/android/bips/LocalPrintJob.java @@ -27,6 +27,7 @@ import com.android.bips.discovery.DiscoveredPrinter; import com.android.bips.discovery.MdnsDiscovery; import com.android.bips.ipp.Backend; import com.android.bips.ipp.CapabilitiesCache; +import com.android.bips.ipp.CertificateStore; import com.android.bips.ipp.JobStatus; import com.android.bips.jni.BackendConstants; import com.android.bips.jni.LocalPrinterCapabilities; @@ -42,6 +43,7 @@ class LocalPrintJob implements MdnsDiscovery.Listener, ConnectionListener, CapabilitiesCache.OnLocalPrinterCapabilities { private static final String TAG = LocalPrintJob.class.getSimpleName(); private static final boolean DEBUG = false; + private static final String IPPS_SCHEME = "ipps"; /** Maximum time to wait to find a printer before failing the job */ private static final int DISCOVERY_TIMEOUT = 2 * 60 * 1000; @@ -51,8 +53,9 @@ class LocalPrintJob implements MdnsDiscovery.Listener, ConnectionListener, private static final int STATE_DISCOVERY = 1; private static final int STATE_CAPABILITIES = 2; private static final int STATE_DELIVERING = 3; - private static final int STATE_CANCEL = 4; - private static final int STATE_DONE = 5; + private static final int STATE_SECURITY = 4; + private static final int STATE_CANCEL = 5; + private static final int STATE_DONE = 6; private final BuiltInPrintService mPrintService; private final PrintJob mPrintJob; @@ -63,6 +66,8 @@ class LocalPrintJob implements MdnsDiscovery.Listener, ConnectionListener, private Uri mPath; private DelayedAction mDiscoveryTimeout; private P2pPrinterConnection mConnection; + private LocalPrinterCapabilities mCapabilities; + private CertificateStore mCertificateStore; /** * Construct the object; use {@link #start(Consumer)} to begin job processing. @@ -71,6 +76,7 @@ class LocalPrintJob implements MdnsDiscovery.Listener, ConnectionListener, mPrintService = printService; mBackend = backend; mPrintJob = printJob; + mCertificateStore = mPrintService.getCertificateStore(); mState = STATE_INIT; // Tell the job it is blocked (until start()) @@ -107,12 +113,24 @@ class LocalPrintJob implements MdnsDiscovery.Listener, ConnectionListener, mPrintService.getDiscovery().start(this); } + /** + * Restart the job if possible. + */ + void restart() { + if (DEBUG) Log.d(TAG, "restart() " + mPrintJob + " in state " + mState); + if (mState == STATE_SECURITY) { + mCapabilities.certificate = mCertificateStore.get(mCapabilities.uuid); + deliver(); + } + } + void cancel() { if (DEBUG) Log.d(TAG, "cancel() " + mPrintJob + " in state " + mState); switch (mState) { case STATE_DISCOVERY: case STATE_CAPABILITIES: + case STATE_SECURITY: // Cancel immediately mState = STATE_CANCEL; finish(false, null); @@ -156,6 +174,14 @@ class LocalPrintJob implements MdnsDiscovery.Listener, ConnectionListener, mPrintService.getDiscovery().stop(this); mState = STATE_CAPABILITIES; mPath = printer.path; + // Upgrade to IPPS path if present + for (Uri path : printer.paths) { + if (IPPS_SCHEME.equals(path.getScheme())) { + mPath = path; + break; + } + } + mPrintService.getCapabilitiesCache().request(printer, true, this); } @@ -213,14 +239,36 @@ class LocalPrintJob implements MdnsDiscovery.Listener, ConnectionListener, if (mDiscoveryTimeout != null) { mDiscoveryTimeout.cancel(); } + mCapabilities = capabilities; + deliver(); + } + } + + private void deliver() { + if (mCapabilities.certificate != null && !IPPS_SCHEME.equals(mPath.getScheme())) { + mState = STATE_SECURITY; + mPrintJob.block(mPrintService.getString(R.string.printer_not_encrypted)); + mPrintService.notifyCertificateChange(mCapabilities.name, + mPrintJob.getInfo().getPrinterId(), mCapabilities.uuid, null); + } else { mState = STATE_DELIVERING; mPrintJob.start(); - mBackend.print(mPath, mPrintJob, capabilities, this::handleJobStatus); + mBackend.print(mPath, mPrintJob, mCapabilities, this::handleJobStatus); } } private void handleJobStatus(JobStatus jobStatus) { if (DEBUG) Log.d(TAG, "onJobStatus() " + jobStatus); + + byte[] certificate = jobStatus.getCertificate(); + if (certificate != null && mCapabilities != null) { + // If there is no certificate, record this one + if (mCertificateStore.get(mCapabilities.uuid) == null) { + if (DEBUG) Log.d(TAG, "Recording new certificate"); + mCertificateStore.put(mCapabilities.uuid, certificate); + } + } + switch (jobStatus.getJobState()) { case BackendConstants.JOB_STATE_DONE: switch (jobStatus.getJobResult()) { @@ -236,7 +284,11 @@ class LocalPrintJob implements MdnsDiscovery.Listener, ConnectionListener, break; default: // Job failed - finish(false, null); + if (jobStatus.getBlockedReasonId() == R.string.printer_bad_certificate) { + handleBadCertificate(jobStatus); + } else { + finish(false, null); + } break; } break; @@ -260,6 +312,20 @@ class LocalPrintJob implements MdnsDiscovery.Listener, ConnectionListener, } } + private void handleBadCertificate(JobStatus jobStatus) { + byte[] certificate = jobStatus.getCertificate(); + + if (certificate == null) { + mPrintJob.fail(mPrintService.getString(R.string.printer_bad_certificate)); + } else { + if (DEBUG) Log.d(TAG, "Certificate change detected."); + mState = STATE_SECURITY; + mPrintJob.block(mPrintService.getString(R.string.printer_bad_certificate)); + mPrintService.notifyCertificateChange(mCapabilities.name, + mPrintJob.getInfo().getPrinterId(), mCapabilities.uuid, certificate); + } + } + /** * Terminate the job, issuing appropriate notifications. * diff --git a/src/com/android/bips/P2pPermissionManager.java b/src/com/android/bips/P2pPermissionManager.java new file mode 100644 index 0000000..4773818 --- /dev/null +++ b/src/com/android/bips/P2pPermissionManager.java @@ -0,0 +1,303 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.bips; + +import static android.Manifest.permission.ACCESS_FINE_LOCATION; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.graphics.drawable.Icon; +import android.util.Log; +import android.view.ContextThemeWrapper; +import android.widget.Toast; + +import com.android.bips.ui.AddPrintersActivity; +import com.android.bips.ui.AddPrintersFragment; + +/** + * Manage Wi-Fi Direct permission requirements and state. + */ +public class P2pPermissionManager { + private static final String TAG = P2pPermissionManager.class.getCanonicalName(); + private static final boolean DEBUG = false; + + private static final String CHANNEL_ID_CONNECTIONS = "connections"; + public static final int REQUEST_P2P_PERMISSION_CODE = 1000; + + private static final String STATE_KEY = "state"; + + private static final P2pPermissionRequest sFinishedRequest = () -> { }; + + private final Context mContext; + private final SharedPreferences mPrefs; + private final NotificationManager mNotificationManager; + + public P2pPermissionManager(Context context) { + mContext = context; + mPrefs = mContext.getSharedPreferences(TAG, 0); + mNotificationManager = mContext.getSystemService(NotificationManager.class); + } + + /** + * Reset any temporary modes. + */ + public void reset() { + if (getState() == State.TEMPORARILY_DISABLED) { + setState(State.DENIED); + } + } + + /** + * Update the current P2P permissions request state. + */ + public void setState(State state) { + if (DEBUG) Log.d(TAG, "Setting state=" + state); + mPrefs.edit().putString(STATE_KEY, state.name()).apply(); + } + + /** + * Return true if P2P features are enabled. + */ + public boolean isP2pEnabled() { + return getState() == State.ALLOWED; + } + + /** + * The user has made a permissions-related choice. + */ + public void applyPermissionChange(boolean permanent) { + closeNotification(); + if (hasP2pPermission()) { + setState(State.ALLOWED); + } else { + // Inform the user and don't try again for the rest of this session. + setState(permanent ? State.DISABLED : State.TEMPORARILY_DISABLED); + Toast.makeText(mContext, R.string.wifi_direct_permission_rationale, Toast.LENGTH_LONG) + .show(); + } + } + + /** + * Return true if the user has granted P2P-related permission. + */ + private boolean hasP2pPermission() { + return mContext.checkSelfPermission(ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED; + } + + /** + * Request P2P permission from the user, until the user makes a selection or the returned + * {@link P2pPermissionRequest} is closed. + * + * Note: if requested on behalf of an Activity, the Activity MUST call + * {@link P2pPermissionManager#applyPermissionChange(boolean)} whenever + * {@link Activity#onRequestPermissionsResult(int, String[], int[])} is called with code + * {@link P2pPermissionManager#REQUEST_P2P_PERMISSION_CODE}. + */ + public P2pPermissionRequest request(boolean explain, P2pPermissionListener listener) { + // Check current permission level + State state = getState(); + + if (DEBUG) Log.d(TAG, "request() state=" + state); + + if (state.isTerminal()) { + listener.onP2pPermissionComplete(state == State.ALLOWED); + // Nothing to close because no listener registered. + return sFinishedRequest; + } + + SharedPreferences.OnSharedPreferenceChangeListener preferenceListener = + listenForPreferenceChanges(listener); + + if (mContext instanceof Activity) { + Activity activity = (Activity) mContext; + if (explain && activity.shouldShowRequestPermissionRationale(ACCESS_FINE_LOCATION)) { + explain(activity); + } else { + request(activity); + } + } else { + showNotification(); + } + + return () -> { + // Allow the caller to close this request if it no longer cares about the result + closeNotification(); + mPrefs.unregisterOnSharedPreferenceChangeListener(preferenceListener); + }; + } + + /** + * Use the activity to request permissions if possible. + */ + private void request(Activity activity) { + activity.requestPermissions(new String[]{ACCESS_FINE_LOCATION}, + REQUEST_P2P_PERMISSION_CODE); + } + + private void explain(Activity activity) { + // User denied, but asked us to use P2P, so explain and redirect to settings + DialogInterface.OnClickListener clickListener = (dialog, which) -> { + if (which == DialogInterface.BUTTON_POSITIVE) { + request(activity); + } + }; + + new AlertDialog.Builder(new ContextThemeWrapper(activity, + android.R.style.Theme_Material_Settings)) + .setMessage(mContext.getString(R.string.wifi_direct_permission_rationale)) + .setPositiveButton(R.string.fix, clickListener) + .show(); + } + + private SharedPreferences.OnSharedPreferenceChangeListener listenForPreferenceChanges( + P2pPermissionListener listener) { + SharedPreferences.OnSharedPreferenceChangeListener preferenceListener = + new SharedPreferences.OnSharedPreferenceChangeListener() { + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, + String key) { + State state = getState(); + if (state.isTerminal() || state == State.DENIED) { + listener.onP2pPermissionComplete(state == State.ALLOWED); + mPrefs.unregisterOnSharedPreferenceChangeListener(this); + } + } + }; + mPrefs.registerOnSharedPreferenceChangeListener(preferenceListener); + return preferenceListener; + } + + /** + * Deliver a notification to the user. + */ + private void showNotification() { + // Because we are not in an activity create a notification to do the work + mNotificationManager.createNotificationChannel(new NotificationChannel( + CHANNEL_ID_CONNECTIONS, mContext.getString(R.string.connections), + NotificationManager.IMPORTANCE_HIGH)); + + Intent proceedIntent = new Intent(mContext, AddPrintersActivity.class); + proceedIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + proceedIntent.putExtra(AddPrintersFragment.EXTRA_FIX_P2P_PERMISSION, true); + PendingIntent proceedPendingIntent = PendingIntent.getActivity(mContext, 0, + proceedIntent, PendingIntent.FLAG_UPDATE_CURRENT); + Notification.Action fixAction = new Notification.Action.Builder( + Icon.createWithResource(mContext, R.drawable.ic_printservice), + mContext.getString(R.string.fix), proceedPendingIntent).build(); + + Intent cancelIntent = new Intent(mContext, BuiltInPrintService.class) + .setAction(BuiltInPrintService.ACTION_P2P_PERMISSION_CANCEL); + PendingIntent cancelPendingIndent = PendingIntent.getService(mContext, + BuiltInPrintService.P2P_PERMISSION_REQUEST_ID, cancelIntent, + PendingIntent.FLAG_UPDATE_CURRENT); + Notification.Action cancelAction = new Notification.Action.Builder( + Icon.createWithResource(mContext, R.drawable.ic_printservice), + mContext.getString(android.R.string.cancel), cancelPendingIndent).build(); + + Notification notification = new Notification.Builder(mContext, CHANNEL_ID_CONNECTIONS) + .setSmallIcon(R.drawable.ic_printservice) + .setStyle(new Notification.BigTextStyle().bigText( + mContext.getString(R.string.wifi_direct_permission_rationale))) + .setAutoCancel(true) + .setContentIntent(proceedPendingIntent) + .setDeleteIntent(cancelPendingIndent) + .addAction(fixAction) + .addAction(cancelAction) + .build(); + + mNotificationManager.notify(BuiltInPrintService.P2P_PERMISSION_REQUEST_ID, notification); + } + + /** + * Return the current {@link State}. + */ + public State getState() { + // Look up stored state + String stateString = mPrefs.getString(STATE_KEY, State.DENIED.name()); + State state = State.valueOf(stateString); + + if (state == State.DISABLED) { + // If disabled do no further checking + return state; + } + + boolean hasPermission = hasP2pPermission(); + if (hasPermission && state != State.ALLOWED) { + // Upgrade state if now allowed + state = State.ALLOWED; + setState(state); + } else if (!hasPermission && state == State.ALLOWED) { + state = State.DENIED; + setState(state); + } + return state; + } + + /** + * Close any outstanding notification. + */ + void closeNotification() { + mNotificationManager.cancel(BuiltInPrintService.P2P_PERMISSION_REQUEST_ID); + } + + /** + * The current P2P permission request state. + */ + public enum State { + // The user has not granted permissions. + DENIED, + // The user did not grant permissions this time but try again next time. + TEMPORARILY_DISABLED, + // The user explicitly disabled or chose not to enable P2P. + DISABLED, + // Permissions are granted. + ALLOWED; + + /** Return true if the user {@link State} is at a final permissions state. */ + public boolean isTerminal() { + return this != DENIED; + } + } + + /** + * Listener for determining when a P2P permission request is complete. + */ + public interface P2pPermissionListener { + /** + * Invoked when it is known that the user has allowed or denied the permission request. + */ + void onP2pPermissionComplete(boolean allowed); + } + + /** + * A closeable request for grant of P2P permissions. + */ + public interface P2pPermissionRequest extends AutoCloseable { + @Override + void close(); + } +} diff --git a/src/com/android/bips/discovery/DiscoveredPrinter.java b/src/com/android/bips/discovery/DiscoveredPrinter.java index 5d452af..6a135b8 100644 --- a/src/com/android/bips/discovery/DiscoveredPrinter.java +++ b/src/com/android/bips/discovery/DiscoveredPrinter.java @@ -26,6 +26,8 @@ import android.util.JsonWriter; import java.io.IOException; import java.io.StringWriter; +import java.util.Collections; +import java.util.List; import java.util.Objects; /** Represents a network-visible printer */ @@ -42,6 +44,9 @@ public class DiscoveredPrinter { /** Resource path at which the print service can be reached */ public final Uri path; + /** All paths at which this this printer can be reached. Includes "path". */ + public final List<Uri> paths; + /** Lazily-created printer id. */ private PrinterId mPrinterId; @@ -50,16 +55,29 @@ public class DiscoveredPrinter { * * @param uuid Unique identification of the network printer, if known * @param name Self-identified printer or service name - * @param path Network path at which the printer is currently available + * @param paths One or more network paths at which the printer is currently available * @param location Self-advertised location of the printer, if known */ - public DiscoveredPrinter(Uri uuid, String name, Uri path, String location) { + public DiscoveredPrinter(Uri uuid, String name, List<Uri> paths, String location) { this.uuid = uuid; this.name = name; - this.path = path; + this.path = paths.get(0); + this.paths = Collections.unmodifiableList(paths); this.location = location; } + /** + * Construct minimal information about a network printer + * + * @param uuid Unique identification of the network printer, if known + * @param name Self-identified printer or service name + * @param path Network path at which the printer is currently available + * @param location Self-advertised location of the printer, if known + */ + public DiscoveredPrinter(Uri uuid, String name, Uri path, String location) { + this(uuid, name, Collections.singletonList(path), location); + } + /** Construct an object based on field values of an JSON object found next in the JsonReader */ public DiscoveredPrinter(JsonReader reader) throws IOException { String printerName = null, location = null; @@ -91,6 +109,7 @@ public class DiscoveredPrinter { this.uuid = uuid; this.name = printerName; this.path = path; + this.paths = Collections.singletonList(path); this.location = location; } @@ -103,6 +122,18 @@ public class DiscoveredPrinter { } /** + * Return true if this printer has a secure (encrypted) path. + */ + public boolean isSecure() { + for (Uri path : paths) { + if (path.getScheme().equals("ipps")) { + return true; + } + } + return false; + } + + /** * Return a host string for the user to see (an IP address or hostname without port number) */ public String getHost() { @@ -139,7 +170,7 @@ public class DiscoveredPrinter { DiscoveredPrinter other = (DiscoveredPrinter) obj; return Objects.equals(uuid, other.uuid) && Objects.equals(name, other.name) - && Objects.equals(path, other.path) + && Objects.equals(paths, other.paths) && Objects.equals(location, other.location); } @@ -148,7 +179,7 @@ public class DiscoveredPrinter { int result = 17; result = 31 * result + name.hashCode(); result = 31 * result + (uuid != null ? uuid.hashCode() : 0); - result = 31 * result + path.hashCode(); + result = 31 * result + paths.hashCode(); result = 31 * result + (location != null ? location.hashCode() : 0); return result; } diff --git a/src/com/android/bips/discovery/MultiDiscovery.java b/src/com/android/bips/discovery/MultiDiscovery.java index d564db9..93f68b4 100644 --- a/src/com/android/bips/discovery/MultiDiscovery.java +++ b/src/com/android/bips/discovery/MultiDiscovery.java @@ -44,31 +44,50 @@ public class MultiDiscovery extends Discovery { mChildListener = new Listener() { @Override public void onPrinterFound(DiscoveredPrinter printer) { - printerFound(first(printer.getUri())); + printerFound(merged(printer.getUri())); } @Override public void onPrinterLost(DiscoveredPrinter printer) { // Merge remaining printer records, if any - DiscoveredPrinter first = first(printer.getUri()); - if (first == null) { + DiscoveredPrinter remaining = merged(printer.getUri()); + if (remaining == null) { printerLost(printer.getUri()); } else { - printerFound(first); + printerFound(remaining); } } }; } - /** For a given URI return the first matching record, based on discovery mechanism order */ - private DiscoveredPrinter first(Uri printerUri) { + /** + * For a given URI combine and return records with the same printerUri, based on discovery + * mechanism order. + */ + private DiscoveredPrinter merged(Uri printerUri) { + DiscoveredPrinter combined = null; + for (Discovery discovery : getChildren()) { - DiscoveredPrinter found = discovery.getPrinter(printerUri); - if (found != null) { - return found; + DiscoveredPrinter discovered = discovery.getPrinter(printerUri); + if (discovered != null) { + if (combined == null) { + combined = discovered; + } else { + // Merge all paths found, in order, without duplicates + List<Uri> allPaths = new ArrayList<>(combined.paths); + for (Uri path : discovered.paths) { + if (!allPaths.contains(path)) { + allPaths.add(path); + } + } + // Assemble a new printer containing paths. + combined = new DiscoveredPrinter(discovered.uuid, discovered.name, allPaths, + discovered.location); + } } } - return null; + + return combined; } @Override diff --git a/src/com/android/bips/discovery/P2pDiscovery.java b/src/com/android/bips/discovery/P2pDiscovery.java index 4b6776a..083e88d 100644 --- a/src/com/android/bips/discovery/P2pDiscovery.java +++ b/src/com/android/bips/discovery/P2pDiscovery.java @@ -21,6 +21,7 @@ import android.net.wifi.p2p.WifiP2pDevice; import android.util.Log; import com.android.bips.BuiltInPrintService; +import com.android.bips.P2pPermissionManager; import com.android.bips.p2p.P2pPeerListener; /** @@ -32,6 +33,7 @@ public class P2pDiscovery extends SavedDiscovery implements P2pPeerListener { private static final boolean DEBUG = false; private boolean mDiscoveringPeers = false; + private P2pPermissionManager.P2pPermissionRequest mP2pPermissionRequest; public P2pDiscovery(BuiltInPrintService printService) { super(printService); @@ -61,6 +63,10 @@ public class P2pDiscovery extends SavedDiscovery implements P2pPeerListener { @Override void onStop() { if (DEBUG) Log.d(TAG, "onStop()"); + if (mP2pPermissionRequest != null) { + mP2pPermissionRequest.close(); + mP2pPermissionRequest = null; + } if (mDiscoveringPeers) { mDiscoveringPeers = false; getPrintService().getP2pMonitor().stopDiscover(this); @@ -73,8 +79,16 @@ public class P2pDiscovery extends SavedDiscovery implements P2pPeerListener { if (mDiscoveringPeers || getSavedPrinters().isEmpty()) { return; } - mDiscoveringPeers = true; - getPrintService().getP2pMonitor().discover(this); + + // Only begin discovery if the user has granted permissions + P2pPermissionManager permissionManager = getPrintService().getP2pPermissionManager(); + mP2pPermissionRequest = permissionManager.request(true, approved -> { + if (approved) { + mDiscoveringPeers = true; + getPrintService().getP2pMonitor().discover(this); + } + mP2pPermissionRequest = null; + }); } @Override diff --git a/src/com/android/bips/ipp/Backend.java b/src/com/android/bips/ipp/Backend.java index 94d6a11..0e4affd 100644 --- a/src/com/android/bips/ipp/Backend.java +++ b/src/com/android/bips/ipp/Backend.java @@ -191,6 +191,10 @@ public class Backend implements JobCallback { builder.setId(params.jobId); + if (params.certificate != null) { + builder.setCertificate(params.certificate); + } + if (!TextUtils.isEmpty(params.printerState)) { updateBlockedReasons(builder, params); } else if (!TextUtils.isEmpty(params.jobState)) { diff --git a/src/com/android/bips/ipp/CapabilitiesCache.java b/src/com/android/bips/ipp/CapabilitiesCache.java index dd4d258..7c361f1 100644 --- a/src/com/android/bips/ipp/CapabilitiesCache.java +++ b/src/com/android/bips/ipp/CapabilitiesCache.java @@ -1,6 +1,5 @@ /* * Copyright (C) 2016 The Android Open Source Project - * Copyright (C) 2016 Mopria Alliance, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,7 +22,6 @@ import android.content.Intent; import android.net.NetworkInfo; import android.net.Uri; import android.net.wifi.p2p.WifiP2pManager; -import android.os.AsyncTask; import android.text.TextUtils; import android.util.Log; import android.util.LruCache; @@ -48,8 +46,7 @@ import java.util.function.Consumer; * with the ability to fetch them on cache misses. {@link #close} must be called when use * is complete. */ -public class CapabilitiesCache extends LruCache<Uri, LocalPrinterCapabilities> implements - AutoCloseable { +public class CapabilitiesCache implements AutoCloseable { private static final String TAG = CapabilitiesCache.class.getSimpleName(); private static final boolean DEBUG = false; @@ -66,6 +63,9 @@ public class CapabilitiesCache extends LruCache<Uri, LocalPrinterCapabilities> i // Maximum time per retry before giving up on second pass. Must differ from FIRST_PASS_TIMEOUT. private static final int SECOND_PASS_TIMEOUT = 8000; + // Underlying cache + private final LruCache<Uri, LocalPrinterCapabilities> mCache = new LruCache<>(CACHE_SIZE); + // Outstanding requests based on printer path private final Map<Uri, Request> mRequests = new HashMap<>(); private final Set<Uri> mToEvict = new HashSet<>(); @@ -81,7 +81,6 @@ public class CapabilitiesCache extends LruCache<Uri, LocalPrinterCapabilities> i * @param maxConcurrent Maximum number of capabilities requests to make at any one time */ public CapabilitiesCache(BuiltInPrintService service, Backend backend, int maxConcurrent) { - super(CACHE_SIZE); if (DEBUG) Log.d(TAG, "CapabilitiesCache()"); mService = service; @@ -96,7 +95,7 @@ public class CapabilitiesCache extends LruCache<Uri, LocalPrinterCapabilities> i // Evict specified device capabilities when P2P network is lost. if (DEBUG) Log.d(TAG, "Evicting P2P " + mToEvictP2p); for (Uri uri : mToEvictP2p) { - remove(uri); + mCache.remove(uri); } mToEvictP2p.clear(); } @@ -108,7 +107,7 @@ public class CapabilitiesCache extends LruCache<Uri, LocalPrinterCapabilities> i // Evict specified device capabilities when network is lost. if (DEBUG) Log.d(TAG, "Evicting Wi-Fi " + mToEvict); for (Uri uri : mToEvict) { - remove(uri); + mCache.remove(uri); } mToEvict.clear(); } @@ -173,7 +172,20 @@ public class CapabilitiesCache extends LruCache<Uri, LocalPrinterCapabilities> i * Returns capabilities for the specified printer, if known */ public LocalPrinterCapabilities get(DiscoveredPrinter printer) { - return get(printer.path); + LocalPrinterCapabilities capabilities = mCache.get(printer.path); + // Populate certificate from store if possible + if (capabilities != null) { + capabilities.certificate = mService.getCertificateStore().get(capabilities.uuid); + } + return capabilities; + } + + /** + * Remove capabilities corresponding to a Printer URI + * @return The removed capabilities, if any + */ + public LocalPrinterCapabilities remove(Uri printerUri) { + return mCache.remove(printerUri); } /** @@ -281,10 +293,11 @@ public class CapabilitiesCache extends LruCache<Uri, LocalPrinterCapabilities> i startNextRequest(); return; } else { - remove(printer.getUri()); + mCache.remove(printer.getUri()); } } else { - put(printer.path, capabilities); + capabilities.certificate = mService.getCertificateStore().get(capabilities.uuid); + mCache.put(printer.path, capabilities); } LocalPrinterCapabilities result = capabilities; diff --git a/src/com/android/bips/ipp/CertificateStore.java b/src/com/android/bips/ipp/CertificateStore.java new file mode 100644 index 0000000..76e0868 --- /dev/null +++ b/src/com/android/bips/ipp/CertificateStore.java @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.bips.ipp; + +import android.util.JsonReader; +import android.util.JsonWriter; +import android.util.Log; + +import com.android.bips.BuiltInPrintService; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +/** + * A persistent cache of certificate public keys known to be associated with certain printer + * UUIDs. + */ +public class CertificateStore { + private static final String TAG = CertificateStore.class.getSimpleName(); + private static final boolean DEBUG = false; + + /** File location of the on-disk certificate store. */ + private final File mStoreFile; + + /** RAM-based store of certificates (UUID to certificate) */ + private final Map<String, byte[]> mCertificates = new HashMap<>(); + + public CertificateStore(BuiltInPrintService service) { + mStoreFile = new File(service.getCacheDir(), getClass().getSimpleName() + ".json"); + load(); + } + + /** Write a new, non-null certificate to the store. */ + public void put(String uuid, byte[] certificate) { + byte[] oldCertificate = mCertificates.put(uuid, certificate); + if (oldCertificate == null || !Arrays.equals(oldCertificate, certificate)) { + // Cache the certificate for later + if (DEBUG) Log.d(TAG, "New certificate uuid=" + uuid + " len=" + certificate.length); + save(); + } + } + + /** Remove any certificate associated with the specified UUID. */ + public void remove(String uuid) { + if (mCertificates.remove(uuid) != null) { + save(); + } + } + + /** Return the known certificate public key for a printer having the specified UUID, or null. */ + public byte[] get(String uuid) { + return mCertificates.get(uuid); + } + + /** Write to storage immediately. */ + private void save() { + if (mStoreFile.exists()) { + mStoreFile.delete(); + } + + try (JsonWriter writer = new JsonWriter(new BufferedWriter(new FileWriter(mStoreFile)))) { + writer.beginObject(); + writer.name("certificates"); + writer.beginArray(); + for (Map.Entry<String, byte[]> entry : mCertificates.entrySet()) { + writer.beginObject(); + writer.name("uuid").value(entry.getKey()); + writer.name("pubkey").value(bytesToHex(entry.getValue())); + writer.endObject(); + } + writer.endArray(); + writer.endObject(); + if (DEBUG) Log.d(TAG, "Wrote " + mCertificates.size() + " certificates to store"); + } catch (NullPointerException | IOException e) { + Log.w(TAG, "Error while storing to " + mStoreFile, e); + } + } + + /** Load known certificates from storage into RAM. */ + private void load() { + if (!mStoreFile.exists()) { + return; + } + + try (JsonReader reader = new JsonReader(new BufferedReader(new FileReader(mStoreFile)))) { + reader.beginObject(); + while (reader.hasNext()) { + String itemName = reader.nextName(); + if (itemName.equals("certificates")) { + reader.beginArray(); + while (reader.hasNext()) { + loadItem(reader); + } + reader.endArray(); + } else { + reader.skipValue(); + } + } + reader.endObject(); + } catch (IllegalStateException | IOException error) { + Log.w(TAG, "Error while loading from " + mStoreFile, error); + } + if (DEBUG) Log.d(TAG, "Loaded size=" + mCertificates.size() + " from " + mStoreFile); + } + + /** Load a single certificate entry into RAM. */ + private void loadItem(JsonReader reader) throws IOException { + String uuid = null; + byte[] pubkey = null; + reader.beginObject(); + while (reader.hasNext()) { + String itemName = reader.nextName(); + switch(itemName) { + case "uuid": + uuid = reader.nextString(); + break; + case "pubkey": + try { + pubkey = hexToBytes(reader.nextString()); + } catch (IllegalArgumentException ignored) { + } + break; + default: + reader.skipValue(); + } + } + reader.endObject(); + if (uuid != null && pubkey != null) { + mCertificates.put(uuid, pubkey); + } + } + + private static final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray(); + + /** Converts a byte array to a hexadecimal string, or null if bytes are null. */ + private static String bytesToHex(byte[] bytes) { + if (bytes == null) { + return null; + } + + char[] hexChars = new char[bytes.length * 2]; + for (int i = 0; i < bytes.length; i++) { + int b = bytes[i] & 0xFF; + hexChars[i * 2] = HEX_CHARS[b >>> 4]; + hexChars[i * 2 + 1] = HEX_CHARS[b & 0x0F]; + } + return new String(hexChars); + } + + /** Converts a hexadecimal string to a byte array, or null if hexString is null. */ + private static byte[] hexToBytes(String hexString) { + if (hexString == null) { + return null; + } + + char[] source = hexString.toCharArray(); + byte[] dest = new byte[source.length / 2]; + for (int sourcePos = 0, destPos = 0; sourcePos < source.length; ) { + int hi = Character.digit(source[sourcePos++], 16); + int lo = Character.digit(source[sourcePos++], 16); + if ((hi < 0) || (lo < 0)) { + throw new IllegalArgumentException(); + } + dest[destPos++] = (byte) (hi << 4 | lo); + } + return dest; + } +} diff --git a/src/com/android/bips/ipp/JobStatus.java b/src/com/android/bips/ipp/JobStatus.java index 72be347..b2d07e2 100644 --- a/src/com/android/bips/ipp/JobStatus.java +++ b/src/com/android/bips/ipp/JobStatus.java @@ -53,12 +53,15 @@ public class JobStatus { R.string.printer_low_on_toner); sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__BUSY, R.string.printer_busy); sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__OFFLINE, R.string.printer_offline); + sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__BAD_CERTIFICATE, + R.string.printer_bad_certificate); } private int mId; private String mJobState; private String mJobResult; private final Set<String> mBlockedReasons; + private byte[] mCertificate; /** Create a new, blank job status */ public JobStatus() { @@ -72,6 +75,7 @@ public class JobStatus { mJobState = other.mJobState; mJobResult = other.mJobResult; mBlockedReasons = other.mBlockedReasons; + mCertificate = other.mCertificate; } /** Returns a string resource ID corresponding to a blocked reason, or 0 if none found */ @@ -104,12 +108,18 @@ public class JobStatus { return !TextUtils.isEmpty(mJobResult); } + /** Return certificate if supplied as part of this status. */ + public byte[] getCertificate() { + return mCertificate; + } + @Override public String toString() { return "JobStatus{id=" + mId + ", jobState=" + mJobState + ", jobResult=" + mJobResult + ", blockedReasons=" + mBlockedReasons + + ", certificate=" + (mCertificate != null) + "}"; } @@ -139,6 +149,11 @@ public class JobStatus { return this; } + Builder setCertificate(byte[] certificate) { + mPrototype.mCertificate = certificate; + return this; + } + Builder clearBlockedReasons() { mPrototype.mBlockedReasons.clear(); return this; diff --git a/src/com/android/bips/jni/BackendConstants.java b/src/com/android/bips/jni/BackendConstants.java index a734a46..9960a47 100644 --- a/src/com/android/bips/jni/BackendConstants.java +++ b/src/com/android/bips/jni/BackendConstants.java @@ -67,5 +67,6 @@ public class BackendConstants { public static final String BLOCKED_REASON__LOW_ON_INK = "marker-ink-almost-empty"; public static final String BLOCKED_REASON__LOW_ON_TONER = "marker-toner-almost-empty"; public static final String BLOCKED_REASON__REALLY_LOW_ON_INK = "marker-ink-really-low"; + public static final String BLOCKED_REASON__BAD_CERTIFICATE = "bad-certificate"; public static final String BLOCKED_REASON__UNKNOWN = "unknown"; } diff --git a/src/com/android/bips/jni/JobCallbackParams.java b/src/com/android/bips/jni/JobCallbackParams.java index 97badec..f0b9aee 100644 --- a/src/com/android/bips/jni/JobCallbackParams.java +++ b/src/com/android/bips/jni/JobCallbackParams.java @@ -24,4 +24,5 @@ public final class JobCallbackParams { public String jobState; public String jobDoneResult; public String[] blockedReasons; + public byte[] certificate; } diff --git a/src/com/android/bips/jni/LocalPrinterCapabilities.java b/src/com/android/bips/jni/LocalPrinterCapabilities.java index f30b24a..332ce5d 100644 --- a/src/com/android/bips/jni/LocalPrinterCapabilities.java +++ b/src/com/android/bips/jni/LocalPrinterCapabilities.java @@ -54,6 +54,9 @@ public class LocalPrinterCapabilities { /** Bears the underlying native C structure (printer_capabilities_t) or null if not present */ public byte[] nativeData; + /** Public key of certificate for this printer, if known */ + public byte[] certificate; + public void buildCapabilities(BuiltInPrintService service, PrinterCapabilitiesInfo.Builder builder) { builder.setColorModes( @@ -122,6 +125,7 @@ public class LocalPrinterCapabilities { + " supportedMediaTypes=" + Arrays.toString(supportedMediaTypes) + " supportedMediaSizes=" + Arrays.toString(supportedMediaSizes) + " inetAddress=" + inetAddress + + " certificate=" + (certificate != null) + "}"; } } diff --git a/src/com/android/bips/ui/AddPrintersActivity.java b/src/com/android/bips/ui/AddPrintersActivity.java index 78de1dc..182b108 100644 --- a/src/com/android/bips/ui/AddPrintersActivity.java +++ b/src/com/android/bips/ui/AddPrintersActivity.java @@ -19,10 +19,11 @@ package com.android.bips.ui; import android.app.ActionBar; import android.app.Activity; -import android.app.Fragment; import android.os.Bundle; import android.view.MenuItem; +import com.android.bips.P2pPermissionManager; + /** * Launched by system in response to an Add Printer request */ @@ -53,14 +54,11 @@ public class AddPrintersActivity extends Activity { @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, - int[] grantResults) { - Fragment fragment = getFragmentManager().findFragmentById(android.R.id.content); - if (fragment != null && fragment instanceof OnPermissionChangeListener) { - ((OnPermissionChangeListener) fragment).onPermissionChange(); + int[] grantResults) { + // Update permission status on any change requested by a fragment. + if (requestCode == P2pPermissionManager.REQUEST_P2P_PERMISSION_CODE) { + new P2pPermissionManager(this).applyPermissionChange(true); } - } - - interface OnPermissionChangeListener { - void onPermissionChange(); + super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } diff --git a/src/com/android/bips/ui/AddPrintersFragment.java b/src/com/android/bips/ui/AddPrintersFragment.java index 7b51447..e122cad 100644 --- a/src/com/android/bips/ui/AddPrintersFragment.java +++ b/src/com/android/bips/ui/AddPrintersFragment.java @@ -26,9 +26,11 @@ import android.os.IBinder; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; +import android.preference.SwitchPreference; import android.util.Log; import com.android.bips.BuiltInPrintService; +import com.android.bips.P2pPermissionManager; import com.android.bips.R; import com.android.bips.discovery.DiscoveredPrinter; import com.android.bips.p2p.P2pUtils; @@ -42,12 +44,18 @@ public class AddPrintersFragment extends PreferenceFragment implements ServiceCo private static final String KEY_ADD_BY_IP = "add_by_ip"; private static final String KEY_FIND_WIFI_DIRECT = "find_wifi_direct"; + private static final String KEY_WIFI_DIRECT_PRINTING = "wifi_direct_printing"; private static final String KEY_SAVED_PRINTERS = "saved_printers"; + public static final String EXTRA_FIX_P2P_PERMISSION = "fix_p2p_permission"; + private static final int ORDER_SAVED = 2; private PreferenceCategory mSavedPrintersCategory; private Preference mAddPrinterByIpPreference; + private Preference mFindP2pPrintersPreference; + private SwitchPreference mP2pEnablePreference; private BuiltInPrintService mPrintService; + private P2pPermissionManager mP2pPermissionManager; @Override public void onCreate(Bundle in) { @@ -56,16 +64,17 @@ public class AddPrintersFragment extends PreferenceFragment implements ServiceCo addPreferencesFromResource(R.xml.add_printers_prefs); mAddPrinterByIpPreference = getPreferenceScreen().findPreference(KEY_ADD_BY_IP); - Preference findP2pPrintersPreference = getPreferenceScreen().findPreference( + mFindP2pPrintersPreference = getPreferenceScreen().findPreference( KEY_FIND_WIFI_DIRECT); - findP2pPrintersPreference.setOnPreferenceClickListener(preference -> { + mFindP2pPrintersPreference.setOnPreferenceClickListener(preference -> { getFragmentManager().beginTransaction() .replace(android.R.id.content, new FindP2pPrintersFragment()) .addToBackStack(null) .commit(); return true; }); - + mP2pEnablePreference = (SwitchPreference) getPreferenceScreen() + .findPreference(KEY_WIFI_DIRECT_PRINTING); mSavedPrintersCategory = (PreferenceCategory) getPreferenceScreen() .findPreference(KEY_SAVED_PRINTERS); } @@ -78,6 +87,37 @@ public class AddPrintersFragment extends PreferenceFragment implements ServiceCo getActivity().setTitle(R.string.title_activity_add_printer); getContext().bindService(new Intent(getContext(), BuiltInPrintService.class), this, Context.BIND_AUTO_CREATE); + + mP2pPermissionManager = new P2pPermissionManager(getActivity()); + updateP2pPreferences(); + + if (getActivity().getIntent().getBooleanExtra(EXTRA_FIX_P2P_PERMISSION, false)) { + // Additional explanation is redundant, since the user saw it in notification. + mP2pPermissionManager.request(false, approve -> { + updateP2pPreferences(); + if (!approve) { + // The user is choosing to disable by denying Location. + mP2pPermissionManager.setState(P2pPermissionManager.State.DISABLED); + } + }); + } + + mP2pEnablePreference.setOnPreferenceClickListener(preference -> { + if (mP2pEnablePreference.isChecked()) { + mP2pEnablePreference.setChecked(false); + if (mP2pPermissionManager.getState() == P2pPermissionManager.State.DISABLED) { + // We're no longer disabled, just denied + mP2pPermissionManager.setState(P2pPermissionManager.State.DENIED); + } + mP2pPermissionManager.reset(); + mP2pPermissionManager.request(true, approve -> updateP2pPreferences()); + } else { + // User disabled P2P + mP2pPermissionManager.setState(P2pPermissionManager.State.DISABLED); + updateP2pPreferences(); + } + return true; + }); } @Override @@ -104,13 +144,31 @@ public class AddPrintersFragment extends PreferenceFragment implements ServiceCo updateSavedPrinters(); } + private void updateP2pPreferences() { + // Only allow the user to find new P2P printers when enabled + if (mP2pPermissionManager.isP2pEnabled()) { + mP2pEnablePreference.setChecked(true); + getPreferenceScreen().addPreference(mFindP2pPrintersPreference); + if (getActivity().getIntent().getBooleanExtra(EXTRA_FIX_P2P_PERMISSION, false)) { + // If we were only here to enable P2P permissions, go back to the print now. + getActivity().finish(); + } + } else { + mP2pEnablePreference.setChecked(false); + getPreferenceScreen().removePreference(mFindP2pPrintersPreference); + } + + updateSavedPrinters(); + } + @Override public void onServiceDisconnected(ComponentName componentName) { mPrintService = null; } private void updateSavedPrinters() { - int savedCount = mPrintService.getDiscovery().getSavedPrinters().size(); + int savedCount = mPrintService == null ? 0 : mPrintService.getDiscovery() + .getSavedPrinters().size(); if (savedCount == 0) { if (getPreferenceScreen().findPreference(mSavedPrintersCategory.getKey()) != null) { @@ -124,7 +182,12 @@ public class AddPrintersFragment extends PreferenceFragment implements ServiceCo mSavedPrintersCategory.removeAll(); // With the service enumerate all saved printers + boolean p2pEnabled = mP2pPermissionManager.isP2pEnabled(); for (DiscoveredPrinter printer : mPrintService.getDiscovery().getSavedPrinters()) { + // Don't show P2P printers while P2P is disabled. + if (P2pUtils.isP2p(printer) && !p2pEnabled) { + continue; + } if (DEBUG) Log.d(TAG, "Adding saved printer " + printer); PrinterPreference pref = new PrinterPreference(getContext(), mPrintService, printer, false); diff --git a/src/com/android/bips/ui/FindP2pPrintersFragment.java b/src/com/android/bips/ui/FindP2pPrintersFragment.java index 6d8bb83..39b9495 100644 --- a/src/com/android/bips/ui/FindP2pPrintersFragment.java +++ b/src/com/android/bips/ui/FindP2pPrintersFragment.java @@ -16,12 +16,10 @@ package com.android.bips.ui; -import android.Manifest; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; -import android.content.pm.PackageManager; import android.net.Uri; import android.net.wifi.p2p.WifiP2pDevice; import android.os.Bundle; @@ -41,13 +39,11 @@ import com.android.bips.p2p.P2pPeerListener; /** * Present a list of previously-saved printers, and allow them to be removed */ -public class FindP2pPrintersFragment extends PreferenceFragment implements ServiceConnection, - AddPrintersActivity.OnPermissionChangeListener { +public class FindP2pPrintersFragment extends PreferenceFragment implements ServiceConnection { private static final String TAG = FindP2pPrintersFragment.class.getSimpleName(); private static final boolean DEBUG = false; private static final String KEY_AVAILABLE = "available"; - private static final int REQUEST_PERMISSION = 1; private BuiltInPrintService mPrintService; private P2pListener mPeerDiscoveryListener; @@ -90,37 +86,13 @@ public class FindP2pPrintersFragment extends PreferenceFragment implements Servi return; } - // If we do not yet have permissions, ask. - if (getContext().checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) - != PackageManager.PERMISSION_GRANTED) { - getActivity().requestPermissions( - new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, - REQUEST_PERMISSION); - } else { - startP2pDiscovery(); - } - } - - private void startP2pDiscovery() { - if (mPrintService != null && mPeerDiscoveryListener == null) { + if (mPeerDiscoveryListener == null) { mPeerDiscoveryListener = new P2pListener(); mPrintService.getP2pMonitor().discover(mPeerDiscoveryListener); } } @Override - public void onPermissionChange() { - // P2P discovery requires dangerous ACCESS_COARSE_LOCATION - if (getContext().checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) - == PackageManager.PERMISSION_GRANTED) { - startP2pDiscovery(); - } else { - // Wind back out of this fragment - getActivity().onBackPressed(); - } - } - - @Override public void onServiceDisconnected(ComponentName componentName) { mPrintService = null; } diff --git a/src/com/android/bips/ui/MoreOptionsActivity.java b/src/com/android/bips/ui/MoreOptionsActivity.java new file mode 100644 index 0000000..d185ff3 --- /dev/null +++ b/src/com/android/bips/ui/MoreOptionsActivity.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.bips.ui; + +import android.app.ActionBar; +import android.app.Activity; +import android.app.FragmentManager; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.Bundle; +import android.os.IBinder; +import android.print.PrintJobInfo; +import android.print.PrinterId; +import android.printservice.PrintService; +import android.view.MenuItem; + +import com.android.bips.BuiltInPrintService; +import com.android.bips.discovery.DiscoveredPrinter; +import com.android.bips.discovery.Discovery; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * Launched by system in response to a "More Options" request while tracking a printer. + */ +public class MoreOptionsActivity extends Activity implements ServiceConnection, Discovery.Listener { + private BuiltInPrintService mPrintService; + PrinterId mPrinterId; + DiscoveredPrinter mPrinter; + InetAddress mPrinterAddress; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + PrintJobInfo jobInfo = getIntent().getParcelableExtra(PrintService.EXTRA_PRINT_JOB_INFO); + mPrinterId = jobInfo.getPrinterId(); + + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + protected void onStart() { + super.onStart(); + bindService(new Intent(this, BuiltInPrintService.class), this, + Context.BIND_AUTO_CREATE); + } + + @Override + protected void onStop() { + super.onStop(); + if (mPrintService != null) { + mPrintService.getDiscovery().stop(this); + } + unbindService(this); + } + + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + mPrintService = BuiltInPrintService.getInstance(); + mPrintService.getDiscovery().start(this); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + mPrintService = null; + } + + @Override + public void onPrinterFound(DiscoveredPrinter printer) { + if (printer.getUri().toString().equals(mPrinterId.getLocalId())) { + // We discovered a printer matching the job's PrinterId, so show recommendations + mPrinter = printer; + setTitle(mPrinter.name); + try { + mPrinterAddress = InetAddress.getByName(mPrinter.path.getHost()); + if (getFragmentManager().getFragments().isEmpty()) { + MoreOptionsFragment fragment = new MoreOptionsFragment(); + getFragmentManager().beginTransaction() + .replace(android.R.id.content, fragment) + .commit(); + } + // No need for continued discovery after we find the printer. + mPrintService.getDiscovery().stop(this); + } catch (UnknownHostException ignored) { } + } + } + + @Override + public void onPrinterLost(DiscoveredPrinter printer) { + // Ignore + } +} diff --git a/src/com/android/bips/ui/MoreOptionsFragment.java b/src/com/android/bips/ui/MoreOptionsFragment.java new file mode 100644 index 0000000..5798a3d --- /dev/null +++ b/src/com/android/bips/ui/MoreOptionsFragment.java @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.bips.ui; + +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceCategory; +import android.preference.PreferenceFragment; +import android.print.PrintManager; +import android.printservice.recommendation.RecommendationInfo; +import android.util.Log; + +import com.android.bips.R; + +import java.net.InetAddress; +import java.text.Collator; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * A fragment allowing the user to review recommended print services and install or enable them. + */ +public class MoreOptionsFragment extends PreferenceFragment implements + PrintManager.PrintServiceRecommendationsChangeListener { + private static final String TAG = MoreOptionsFragment.class.getSimpleName(); + private static final boolean DEBUG = false; + + private static final String KEY_RECOMMENDATION_CATEGORY = "recommendation_category"; + private static final String KEY_MANAGE = "manage"; + private static final String PACKAGE_NAME_VENDING = "com.android.vending"; + private static final Collator COLLATOR = Collator.getInstance(); + + private PrintManager mPrintManager; + private PackageManager mPackageManager; + private PreferenceCategory mRecommendations; + private MoreOptionsActivity mActivity; + private boolean mHasVending = false; + private Map<String, RecommendationItem> mItems = new HashMap<>(); + + @Override + public void onCreate(Bundle in) { + super.onCreate(in); + + addPreferencesFromResource(R.xml.more_options_prefs); + + mRecommendations = (PreferenceCategory) getPreferenceScreen().findPreference( + KEY_RECOMMENDATION_CATEGORY); + + getPreferenceScreen().findPreference(KEY_MANAGE) + .setOnPreferenceClickListener(preference -> { + startActivity(new Intent(android.provider.Settings.ACTION_PRINT_SETTINGS) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + return true; + }); + } + + @Override + public void onStart() { + super.onStart(); + mPackageManager = getContext().getPackageManager(); + + try { + // Attempt to get vending package, throws if missing + mPackageManager.getPackageInfo(PACKAGE_NAME_VENDING, 0); + mHasVending = true; + } catch (PackageManager.NameNotFoundException ignored) { + } + + mActivity = (MoreOptionsActivity) getActivity(); + + mPrintManager = getContext().getSystemService(PrintManager.class); + + // Start listening for recommendation changes + mPrintManager.addPrintServiceRecommendationsChangeListener(this, null); + onPrintServiceRecommendationsChanged(); + } + + @Override + public void onStop() { + super.onStop(); + mPrintManager.removePrintServiceRecommendationsChangeListener(this); + } + + @Override + public void onPrintServiceRecommendationsChanged() { + List<RecommendationInfo> infos = mPrintManager.getPrintServiceRecommendations(); + if (DEBUG) Log.d(TAG, "All recommendations count=" + infos.size()); + // Update items list with new recommendations. Recommendations don't go away. + for (RecommendationInfo info : infos) { + for (InetAddress address : info.getDiscoveredPrinters()) { + if (address.equals(mActivity.mPrinterAddress)) { + // This recommendation matches so create or update an item for it + String packageName = info.getPackageName().toString(); + RecommendationItem item = getOrCreateItem(info); + try { + // If this doesn't throw then the service is installed + item.mPrintService = mPackageManager.getPackageInfo(packageName, 0); + } catch (PackageManager.NameNotFoundException e) { + item.mPrintService = null; + } + break; + } + } + } + + // Update preferences with ordering + List<RecommendationItem> itemList = new ArrayList<>(mItems.values()); + Collections.sort(itemList); + for (int index = 0; index < itemList.size(); index++) { + itemList.get(index).updatePreference(index); + } + + if (DEBUG) Log.d(TAG, "For this printer=" + mRecommendations.getPreferenceCount()); + + // Show group if not empty + if (mRecommendations.getPreferenceCount() == 0) { + getPreferenceScreen().removePreference(mRecommendations); + } else { + getPreferenceScreen().addPreference(mRecommendations); + } + } + + private RecommendationItem getOrCreateItem(RecommendationInfo recommendationInfo) { + String packageName = recommendationInfo.getPackageName().toString(); + RecommendationItem item = mItems.get(packageName); + if (item == null) { + item = new RecommendationItem(recommendationInfo); + mItems.put(packageName, item); + } else { + item.mRecommendationInfo = recommendationInfo; + } + return item; + } + + /** An item corresponding to a recommended print service. */ + private class RecommendationItem implements Comparable<RecommendationItem> { + RecommendationInfo mRecommendationInfo; + String mPackageName; + Preference mPreference = new Preference(getContext()); + /** Present only if the corresponding print service is installed. */ + PackageInfo mPrintService; + + RecommendationItem(RecommendationInfo info) { + mRecommendationInfo = info; + mPackageName = mRecommendationInfo.getPackageName().toString(); + } + + void updatePreference(int order) { + mPreference.setKey(mPackageName); + mPreference.setTitle(mRecommendationInfo.getName()); + mPreference.setOrder(order); + if (mPrintService != null) { + updateEnabler(); + if (mRecommendations.findPreference(mPackageName) == null) { + mRecommendations.addPreference(mPreference); + } + } else if (mHasVending) { + updateDownloader(); + if (mRecommendations.findPreference(mPackageName) == null) { + mRecommendations.addPreference(mPreference); + } + } else { + mRecommendations.removePreference(mPreference); + } + } + + /** Update the preference to allow the user to enable an installed print service. */ + private void updateEnabler() { + try { + // Set icon from application if possible + mPreference.setIcon(mPackageManager.getApplicationIcon( + mPrintService.packageName)); + } catch (PackageManager.NameNotFoundException e) { + mPreference.setIcon(null); + mPreference.setIconSpaceReserved(true); + } + mPreference.setSummary(R.string.recommendation_enable_summary); + mPreference.setOnPreferenceClickListener(preference -> { + // There's no activity to go directly to the print service screen + startActivity(new Intent(android.provider.Settings.ACTION_PRINT_SETTINGS) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + return true; + }); + } + + /** Update this preference to reflect a print service that must be downloaded. */ + private void updateDownloader() { + mPreference.setIcon(R.drawable.ic_download_from_market); + mPreference.setSummary(R.string.recommendation_install_summary); + mPreference.setOnPreferenceClickListener(preference -> { + Uri printServiceUri = Uri.parse("market://details?id=" + + mRecommendationInfo.getPackageName()); + startActivity(new Intent(Intent.ACTION_VIEW, printServiceUri).setFlags( + Intent.FLAG_ACTIVITY_NEW_TASK)); + return true; + }); + } + + @Override + public int compareTo(RecommendationItem other) { + // Sort items: + // - first by single-vendor (more likely to be manufacturer-specific), + // - then alphabetically. + if (mRecommendationInfo.recommendsMultiVendorService() + != other.mRecommendationInfo.recommendsMultiVendorService()) { + return mRecommendationInfo.recommendsMultiVendorService() ? 1 : -1; + } + + return COLLATOR.compare(mRecommendationInfo.getName().toString(), + other.mRecommendationInfo.getName().toString()); + } + } +} |
