13bf66744d61d18c66d46f2608de0467ad3df0268Mopria/* 23bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Copyright (C) 2016 The Android Open Source Project 33bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Copyright (C) 2016 Mopria Alliance, Inc. 43bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Copyright (C) 2013 Hewlett-Packard Development Company, L.P. 53bf66744d61d18c66d46f2608de0467ad3df0268Mopria * 63bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Licensed under the Apache License, Version 2.0 (the "License"); 73bf66744d61d18c66d46f2608de0467ad3df0268Mopria * you may not use this file except in compliance with the License. 83bf66744d61d18c66d46f2608de0467ad3df0268Mopria * You may obtain a copy of the License at 93bf66744d61d18c66d46f2608de0467ad3df0268Mopria * 103bf66744d61d18c66d46f2608de0467ad3df0268Mopria * http://www.apache.org/licenses/LICENSE-2.0 113bf66744d61d18c66d46f2608de0467ad3df0268Mopria * 123bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Unless required by applicable law or agreed to in writing, software 133bf66744d61d18c66d46f2608de0467ad3df0268Mopria * distributed under the License is distributed on an "AS IS" BASIS, 143bf66744d61d18c66d46f2608de0467ad3df0268Mopria * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 153bf66744d61d18c66d46f2608de0467ad3df0268Mopria * See the License for the specific language governing permissions and 163bf66744d61d18c66d46f2608de0467ad3df0268Mopria * limitations under the License. 173bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 183bf66744d61d18c66d46f2608de0467ad3df0268Mopria 193bf66744d61d18c66d46f2608de0467ad3df0268Mopriapackage com.android.bips.jni; 203bf66744d61d18c66d46f2608de0467ad3df0268Mopria 213bf66744d61d18c66d46f2608de0467ad3df0268Mopriaimport android.print.PrintAttributes; 223bf66744d61d18c66d46f2608de0467ad3df0268Mopriaimport android.print.PrinterCapabilitiesInfo; 233bf66744d61d18c66d46f2608de0467ad3df0268Mopriaimport android.text.TextUtils; 243bf66744d61d18c66d46f2608de0467ad3df0268Mopria 253bf66744d61d18c66d46f2608de0467ad3df0268Mopriaimport com.android.bips.BuiltInPrintService; 263bf66744d61d18c66d46f2608de0467ad3df0268Mopriaimport com.android.bips.R; 273bf66744d61d18c66d46f2608de0467ad3df0268Mopria 285b703630f15fa72ac43a2f6fbd9fd3ee96b02108Glade Divineyimport java.net.InetAddress; 293bf66744d61d18c66d46f2608de0467ad3df0268Mopriaimport java.util.ArrayList; 303bf66744d61d18c66d46f2608de0467ad3df0268Mopriaimport java.util.Arrays; 313bf66744d61d18c66d46f2608de0467ad3df0268Mopriaimport java.util.HashSet; 323bf66744d61d18c66d46f2608de0467ad3df0268Mopriaimport java.util.List; 333bf66744d61d18c66d46f2608de0467ad3df0268Mopriaimport java.util.Objects; 343bf66744d61d18c66d46f2608de0467ad3df0268Mopria 353bf66744d61d18c66d46f2608de0467ad3df0268Mopriapublic class LocalPrinterCapabilities { 363bf66744d61d18c66d46f2608de0467ad3df0268Mopria public String path; 373bf66744d61d18c66d46f2608de0467ad3df0268Mopria public String name; 383bf66744d61d18c66d46f2608de0467ad3df0268Mopria public String uuid; 393bf66744d61d18c66d46f2608de0467ad3df0268Mopria public String location; 403bf66744d61d18c66d46f2608de0467ad3df0268Mopria 413bf66744d61d18c66d46f2608de0467ad3df0268Mopria public boolean duplex; 423bf66744d61d18c66d46f2608de0467ad3df0268Mopria public boolean borderless; 433bf66744d61d18c66d46f2608de0467ad3df0268Mopria public boolean color; 443bf66744d61d18c66d46f2608de0467ad3df0268Mopria 453bf66744d61d18c66d46f2608de0467ad3df0268Mopria /** Reported MIME types include at least one that the lower layer supports */ 463bf66744d61d18c66d46f2608de0467ad3df0268Mopria public boolean isSupported; 473bf66744d61d18c66d46f2608de0467ad3df0268Mopria 483bf66744d61d18c66d46f2608de0467ad3df0268Mopria public String mediaDefault; 493bf66744d61d18c66d46f2608de0467ad3df0268Mopria public int[] supportedMediaTypes; 503bf66744d61d18c66d46f2608de0467ad3df0268Mopria public int[] supportedMediaSizes; 513bf66744d61d18c66d46f2608de0467ad3df0268Mopria 525b703630f15fa72ac43a2f6fbd9fd3ee96b02108Glade Diviney public InetAddress inetAddress; 535b703630f15fa72ac43a2f6fbd9fd3ee96b02108Glade Diviney 543bf66744d61d18c66d46f2608de0467ad3df0268Mopria /** Bears the underlying native C structure (printer_capabilities_t) or null if not present */ 553bf66744d61d18c66d46f2608de0467ad3df0268Mopria public byte[] nativeData; 563bf66744d61d18c66d46f2608de0467ad3df0268Mopria 573bf66744d61d18c66d46f2608de0467ad3df0268Mopria public void buildCapabilities(BuiltInPrintService service, 583bf66744d61d18c66d46f2608de0467ad3df0268Mopria PrinterCapabilitiesInfo.Builder builder) { 593bf66744d61d18c66d46f2608de0467ad3df0268Mopria builder.setColorModes( 603bf66744d61d18c66d46f2608de0467ad3df0268Mopria PrintAttributes.COLOR_MODE_MONOCHROME | 613bf66744d61d18c66d46f2608de0467ad3df0268Mopria (color ? PrintAttributes.COLOR_MODE_COLOR : 0), 623bf66744d61d18c66d46f2608de0467ad3df0268Mopria (color ? PrintAttributes.COLOR_MODE_COLOR : PrintAttributes.COLOR_MODE_MONOCHROME)); 633bf66744d61d18c66d46f2608de0467ad3df0268Mopria 643bf66744d61d18c66d46f2608de0467ad3df0268Mopria MediaSizes mediaSizes = MediaSizes.getInstance(service); 653bf66744d61d18c66d46f2608de0467ad3df0268Mopria 663bf66744d61d18c66d46f2608de0467ad3df0268Mopria String defaultMediaName = mediaDefault; 673bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (TextUtils.isEmpty(defaultMediaName) || 683bf66744d61d18c66d46f2608de0467ad3df0268Mopria null == mediaSizes.toMediaSize(defaultMediaName)) { 693bf66744d61d18c66d46f2608de0467ad3df0268Mopria defaultMediaName = MediaSizes.DEFAULT_MEDIA_NAME; 703bf66744d61d18c66d46f2608de0467ad3df0268Mopria } 713bf66744d61d18c66d46f2608de0467ad3df0268Mopria 723bf66744d61d18c66d46f2608de0467ad3df0268Mopria List<String> mediaNames = new ArrayList<>(); 733bf66744d61d18c66d46f2608de0467ad3df0268Mopria for (int supportedMediaSize : supportedMediaSizes) { 743bf66744d61d18c66d46f2608de0467ad3df0268Mopria String mediaName = MediaSizes.toMediaName(supportedMediaSize); 753bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (mediaName != null) { 763bf66744d61d18c66d46f2608de0467ad3df0268Mopria mediaNames.add(mediaName); 773bf66744d61d18c66d46f2608de0467ad3df0268Mopria } 783bf66744d61d18c66d46f2608de0467ad3df0268Mopria } 793bf66744d61d18c66d46f2608de0467ad3df0268Mopria 803bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (mediaNames.isEmpty()) { 813bf66744d61d18c66d46f2608de0467ad3df0268Mopria mediaNames.addAll(MediaSizes.DEFAULT_MEDIA_NAMES); 823bf66744d61d18c66d46f2608de0467ad3df0268Mopria } 833bf66744d61d18c66d46f2608de0467ad3df0268Mopria 843bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (!mediaNames.contains(defaultMediaName)) { 853bf66744d61d18c66d46f2608de0467ad3df0268Mopria defaultMediaName = mediaNames.get(0); 863bf66744d61d18c66d46f2608de0467ad3df0268Mopria } 873bf66744d61d18c66d46f2608de0467ad3df0268Mopria 883bf66744d61d18c66d46f2608de0467ad3df0268Mopria // Add media sizes without duplicates 893bf66744d61d18c66d46f2608de0467ad3df0268Mopria for (String mediaName : new HashSet<>(mediaNames)) { 903bf66744d61d18c66d46f2608de0467ad3df0268Mopria builder.addMediaSize(mediaSizes.toMediaSize(mediaName), 913bf66744d61d18c66d46f2608de0467ad3df0268Mopria Objects.equals(mediaName, defaultMediaName)); 923bf66744d61d18c66d46f2608de0467ad3df0268Mopria } 933bf66744d61d18c66d46f2608de0467ad3df0268Mopria 943bf66744d61d18c66d46f2608de0467ad3df0268Mopria builder.addResolution(new PrintAttributes.Resolution( 953bf66744d61d18c66d46f2608de0467ad3df0268Mopria BackendConstants.RESOLUTION_300_DPI, 963bf66744d61d18c66d46f2608de0467ad3df0268Mopria service.getString(R.string.resolution_300_dpi), 300, 300), true); 973bf66744d61d18c66d46f2608de0467ad3df0268Mopria 983bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (duplex) { 993bf66744d61d18c66d46f2608de0467ad3df0268Mopria builder.setDuplexModes( 1003bf66744d61d18c66d46f2608de0467ad3df0268Mopria PrintAttributes.DUPLEX_MODE_NONE | PrintAttributes.DUPLEX_MODE_LONG_EDGE | 1013bf66744d61d18c66d46f2608de0467ad3df0268Mopria PrintAttributes.DUPLEX_MODE_SHORT_EDGE, 1023bf66744d61d18c66d46f2608de0467ad3df0268Mopria PrintAttributes.DUPLEX_MODE_NONE); 1033bf66744d61d18c66d46f2608de0467ad3df0268Mopria } 1043bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1053bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (borderless) { 1063bf66744d61d18c66d46f2608de0467ad3df0268Mopria builder.setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)); 1073bf66744d61d18c66d46f2608de0467ad3df0268Mopria } 1083bf66744d61d18c66d46f2608de0467ad3df0268Mopria } 1093bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1103bf66744d61d18c66d46f2608de0467ad3df0268Mopria @Override 1113bf66744d61d18c66d46f2608de0467ad3df0268Mopria public String toString() { 1123bf66744d61d18c66d46f2608de0467ad3df0268Mopria return "LocalPrinterCapabilities{" + 1133bf66744d61d18c66d46f2608de0467ad3df0268Mopria "path=" + path + 1143bf66744d61d18c66d46f2608de0467ad3df0268Mopria " name=" + name + 1153bf66744d61d18c66d46f2608de0467ad3df0268Mopria " uuid=" + uuid + 1163bf66744d61d18c66d46f2608de0467ad3df0268Mopria " location=" + location + 1173bf66744d61d18c66d46f2608de0467ad3df0268Mopria " duplex=" + duplex + 1183bf66744d61d18c66d46f2608de0467ad3df0268Mopria " borderless=" + borderless + 1193bf66744d61d18c66d46f2608de0467ad3df0268Mopria " color=" + color + 1203bf66744d61d18c66d46f2608de0467ad3df0268Mopria " isSupported=" + isSupported + 1213bf66744d61d18c66d46f2608de0467ad3df0268Mopria " mediaDefault=" + mediaDefault + 1223bf66744d61d18c66d46f2608de0467ad3df0268Mopria " supportedMediaTypes=" + Arrays.toString(supportedMediaTypes) + 1233bf66744d61d18c66d46f2608de0467ad3df0268Mopria " supportedMediaSizes=" + Arrays.toString(supportedMediaSizes) + 1245b703630f15fa72ac43a2f6fbd9fd3ee96b02108Glade Diviney " inetAddress=" + inetAddress + 1253bf66744d61d18c66d46f2608de0467ad3df0268Mopria "}"; 1263bf66744d61d18c66d46f2608de0467ad3df0268Mopria } 1273bf66744d61d18c66d46f2608de0467ad3df0268Mopria}