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.util.ArrayList;
     29 import java.util.Arrays;
     30 import java.util.HashSet;
     31 import java.util.List;
     32 import java.util.Objects;
     33 
     34 public class LocalPrinterCapabilities {
     35     public String path;
     36     public String name;
     37     public String uuid;
     38     public String location;
     39 
     40     public boolean duplex;
     41     public boolean borderless;
     42     public boolean color;
     43 
     44     /** Reported MIME types include at least one that the lower layer supports */
     45     public boolean isSupported;
     46 
     47     public String mediaDefault;
     48     public int[] supportedMediaTypes;
     49     public int[] supportedMediaSizes;
     50 
     51     /** Bears the underlying native C structure (printer_capabilities_t) or null if not present */
     52     public byte[] nativeData;
     53 
     54     public void buildCapabilities(BuiltInPrintService service,
     55             PrinterCapabilitiesInfo.Builder builder) {
     56         builder.setColorModes(
     57                 PrintAttributes.COLOR_MODE_MONOCHROME |
     58                         (color ? PrintAttributes.COLOR_MODE_COLOR : 0),
     59                 (color ? PrintAttributes.COLOR_MODE_COLOR : PrintAttributes.COLOR_MODE_MONOCHROME));
     60 
     61         MediaSizes mediaSizes = MediaSizes.getInstance(service);
     62 
     63         String defaultMediaName = mediaDefault;
     64         if (TextUtils.isEmpty(defaultMediaName) ||
     65                 null == mediaSizes.toMediaSize(defaultMediaName)) {
     66             defaultMediaName = MediaSizes.DEFAULT_MEDIA_NAME;
     67         }
     68 
     69         List<String> mediaNames = new ArrayList<>();
     70         for (int supportedMediaSize : supportedMediaSizes) {
     71             String mediaName = MediaSizes.toMediaName(supportedMediaSize);
     72             if (mediaName != null) {
     73                 mediaNames.add(mediaName);
     74             }
     75         }
     76 
     77         if (mediaNames.isEmpty()) {
     78             mediaNames.addAll(MediaSizes.DEFAULT_MEDIA_NAMES);
     79         }
     80 
     81         if (!mediaNames.contains(defaultMediaName)) {
     82             defaultMediaName = mediaNames.get(0);
     83         }
     84 
     85         // Add media sizes without duplicates
     86         for (String mediaName : new HashSet<>(mediaNames)) {
     87             builder.addMediaSize(mediaSizes.toMediaSize(mediaName),
     88                     Objects.equals(mediaName, defaultMediaName));
     89         }
     90 
     91         builder.addResolution(new PrintAttributes.Resolution(
     92                 BackendConstants.RESOLUTION_300_DPI,
     93                 service.getString(R.string.resolution_300_dpi), 300, 300), true);
     94 
     95         if (duplex) {
     96             builder.setDuplexModes(
     97                     PrintAttributes.DUPLEX_MODE_NONE | PrintAttributes.DUPLEX_MODE_LONG_EDGE |
     98                             PrintAttributes.DUPLEX_MODE_SHORT_EDGE,
     99                     PrintAttributes.DUPLEX_MODE_NONE);
    100         }
    101 
    102         if (borderless) {
    103             builder.setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0));
    104         }
    105     }
    106 
    107     @Override
    108     public String toString() {
    109         return "LocalPrinterCapabilities{" +
    110                 "path=" + path +
    111                 " name=" + name +
    112                 " uuid=" + uuid +
    113                 " location=" + location +
    114                 " duplex=" + duplex +
    115                 " borderless=" + borderless +
    116                 " color=" + color +
    117                 " isSupported=" + isSupported +
    118                 " mediaDefault=" + mediaDefault +
    119                 " supportedMediaTypes=" + Arrays.toString(supportedMediaTypes) +
    120                 " supportedMediaSizes=" + Arrays.toString(supportedMediaSizes) +
    121                 "}";
    122     }
    123 }