Home | History | Annotate | Download | only in jni
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  * Copyright (C) 2016 Mopria Alliance, Inc.
      4  * Copyright (C) 2013 Hewlett-Packard Development Company, L.P.
      5  *
      6  * Licensed under the Apache License, Version 2.0 (the "License");
      7  * you may not use this file except in compliance with the License.
      8  * You may obtain a copy of the License at
      9  *
     10  *      http://www.apache.org/licenses/LICENSE-2.0
     11  *
     12  * Unless required by applicable law or agreed to in writing, software
     13  * distributed under the License is distributed on an "AS IS" BASIS,
     14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15  * See the License for the specific language governing permissions and
     16  * limitations under the License.
     17  */
     18 
     19 package com.android.bips.jni;
     20 
     21 import android.print.PrintAttributes;
     22 import android.print.PrinterCapabilitiesInfo;
     23 import android.text.TextUtils;
     24 
     25 import com.android.bips.BuiltInPrintService;
     26 import com.android.bips.R;
     27 
     28 import java.net.InetAddress;
     29 import java.util.ArrayList;
     30 import java.util.Arrays;
     31 import java.util.HashSet;
     32 import java.util.List;
     33 import java.util.Objects;
     34 
     35 public class LocalPrinterCapabilities {
     36     public String path;
     37     public String name;
     38     public String uuid;
     39     public String location;
     40 
     41     public boolean duplex;
     42     public boolean borderless;
     43     public boolean color;
     44 
     45     /** Reported MIME types include at least one that the lower layer supports */
     46     public boolean isSupported;
     47 
     48     public String mediaDefault;
     49     public int[] supportedMediaTypes;
     50     public int[] supportedMediaSizes;
     51 
     52     public InetAddress inetAddress;
     53 
     54     /** Bears the underlying native C structure (printer_capabilities_t) or null if not present */
     55     public byte[] nativeData;
     56 
     57     public void buildCapabilities(BuiltInPrintService service,
     58             PrinterCapabilitiesInfo.Builder builder) {
     59         builder.setColorModes(
     60                 PrintAttributes.COLOR_MODE_MONOCHROME
     61                         | (color ? PrintAttributes.COLOR_MODE_COLOR : 0),
     62                 (color ? PrintAttributes.COLOR_MODE_COLOR : PrintAttributes.COLOR_MODE_MONOCHROME));
     63 
     64         MediaSizes mediaSizes = MediaSizes.getInstance(service);
     65 
     66         String defaultMediaName = mediaDefault;
     67         if (TextUtils.isEmpty(defaultMediaName)
     68                 || null == mediaSizes.toMediaSize(defaultMediaName)) {
     69             defaultMediaName = MediaSizes.DEFAULT_MEDIA_NAME;
     70         }
     71 
     72         List<String> mediaNames = new ArrayList<>();
     73         for (int supportedMediaSize : supportedMediaSizes) {
     74             String mediaName = MediaSizes.toMediaName(supportedMediaSize);
     75             if (mediaName != null) {
     76                 mediaNames.add(mediaName);
     77             }
     78         }
     79 
     80         if (mediaNames.isEmpty()) {
     81             mediaNames.addAll(MediaSizes.DEFAULT_MEDIA_NAMES);
     82         }
     83 
     84         if (!mediaNames.contains(defaultMediaName)) {
     85             defaultMediaName = mediaNames.get(0);
     86         }
     87 
     88         // Add media sizes without duplicates
     89         for (String mediaName : new HashSet<>(mediaNames)) {
     90             builder.addMediaSize(mediaSizes.toMediaSize(mediaName),
     91                     Objects.equals(mediaName, defaultMediaName));
     92         }
     93 
     94         builder.addResolution(new PrintAttributes.Resolution(
     95                 BackendConstants.RESOLUTION_300_DPI,
     96                 service.getString(R.string.resolution_300_dpi), 300, 300), true);
     97 
     98         if (duplex) {
     99             builder.setDuplexModes(
    100                     PrintAttributes.DUPLEX_MODE_NONE | PrintAttributes.DUPLEX_MODE_LONG_EDGE
    101                             | PrintAttributes.DUPLEX_MODE_SHORT_EDGE,
    102                     PrintAttributes.DUPLEX_MODE_NONE);
    103         }
    104 
    105         if (borderless) {
    106             builder.setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0));
    107         }
    108     }
    109 
    110     @Override
    111     public String toString() {
    112         return "LocalPrinterCapabilities{"
    113                 + "path=" + path
    114                 + " name=" + name
    115                 + " uuid=" + uuid
    116                 + " location=" + location
    117                 + " duplex=" + duplex
    118                 + " borderless=" + borderless
    119                 + " color=" + color
    120                 + " isSupported=" + isSupported
    121                 + " mediaDefault=" + mediaDefault
    122                 + " supportedMediaTypes=" + Arrays.toString(supportedMediaTypes)
    123                 + " supportedMediaSizes=" + Arrays.toString(supportedMediaSizes)
    124                 + " inetAddress=" + inetAddress
    125                 + "}";
    126     }
    127 }
    128