1c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann/* 2c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Copyright (C) 2017 The Android Open Source Project 3c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 4c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Licensed under the Apache License, Version 2.0 (the "License"); 5c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * you may not use this file except in compliance with the License. 6c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * You may obtain a copy of the License at 7c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 8c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * http://www.apache.org/licenses/LICENSE-2.0 9c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 10c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Unless required by applicable law or agreed to in writing, software 11c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * distributed under the License is distributed on an "AS IS" BASIS, 12c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * See the License for the specific language governing permissions and 14c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * limitations under the License. 15c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 16c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 17c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannpackage com.android.internal.print; 18c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 19371a3b879ba82bbe5a4d914328a20659131d0220Philip P. Moltmannimport static com.android.internal.util.dump.DumpUtils.writeComponentName; 20371a3b879ba82bbe5a4d914328a20659131d0220Philip P. Moltmann 21c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.annotation.NonNull; 22c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.content.Context; 23c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.print.PageRange; 24c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.print.PrintAttributes; 25c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.print.PrintDocumentInfo; 26c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.print.PrintJobId; 27c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.print.PrintJobInfo; 28c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.print.PrinterCapabilitiesInfo; 29c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.print.PrinterId; 30c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.print.PrinterInfo; 31c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.MarginsProto; 32c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.MediaSizeProto; 33c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.PageRangeProto; 34c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.PrintAttributesProto; 35c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.PrintDocumentInfoProto; 36c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.PrintJobInfoProto; 37c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.PrinterCapabilitiesProto; 38c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.PrinterIdProto; 39c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.PrinterInfoProto; 40c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannimport android.service.print.ResolutionProto; 41c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 42371a3b879ba82bbe5a4d914328a20659131d0220Philip P. Moltmannimport com.android.internal.util.dump.DualDumpOutputStream; 43371a3b879ba82bbe5a4d914328a20659131d0220Philip P. Moltmann 44c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann/** 45c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Utilities for dumping print related proto buffer 46c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 47c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmannpublic class DumpUtils { 48c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann /** 49c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Write a {@link PrinterId} to a proto. 50c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 51c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param proto The proto to write to 529a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann * @param idName Clear text name of the proto-id 53c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param id The proto-id of the component name 54c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param printerId The printer id to write 55c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 569a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann public static void writePrinterId(@NonNull DualDumpOutputStream proto, String idName, long id, 57c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann @NonNull PrinterId printerId) { 589a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long token = proto.start(idName, id); 599a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writeComponentName(proto, "service_name", PrinterIdProto.SERVICE_NAME, 609a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann printerId.getServiceName()); 619a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("local_id", PrinterIdProto.LOCAL_ID, printerId.getLocalId()); 62c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann proto.end(token); 63c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 64c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 65c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann /** 66c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Write a {@link PrinterCapabilitiesInfo} to a proto. 67c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 68c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param proto The proto to write to 699a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann * @param idName Clear text name of the proto-id 70c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param id The proto-id of the component name 71c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param cap The capabilities to write 72c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 73c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann public static void writePrinterCapabilities(@NonNull Context context, 749a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann @NonNull DualDumpOutputStream proto, String idName, long id, 759a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann @NonNull PrinterCapabilitiesInfo cap) { 769a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long token = proto.start(idName, id); 779a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writeMargins(proto, "min_margins", PrinterCapabilitiesProto.MIN_MARGINS, 789a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann cap.getMinMargins()); 79c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 80c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann int numMediaSizes = cap.getMediaSizes().size(); 81c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann for (int i = 0; i < numMediaSizes; i++) { 829a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writeMediaSize(context, proto, "media_sizes", PrinterCapabilitiesProto.MEDIA_SIZES, 83c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann cap.getMediaSizes().get(i)); 84c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 85c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 86c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann int numResolutions = cap.getResolutions().size(); 87c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann for (int i = 0; i < numResolutions; i++) { 889a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writeResolution(proto, "resolutions", PrinterCapabilitiesProto.RESOLUTIONS, 89c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann cap.getResolutions().get(i)); 90c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 91c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 92c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if ((cap.getColorModes() & PrintAttributes.COLOR_MODE_MONOCHROME) != 0) { 939a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("color_modes", PrinterCapabilitiesProto.COLOR_MODES, 94c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintAttributesProto.COLOR_MODE_MONOCHROME); 95c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 96c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if ((cap.getColorModes() & PrintAttributes.COLOR_MODE_COLOR) != 0) { 979a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("color_modes", PrinterCapabilitiesProto.COLOR_MODES, 98c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintAttributesProto.COLOR_MODE_COLOR); 99c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 100c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 101c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if ((cap.getDuplexModes() & PrintAttributes.DUPLEX_MODE_NONE) != 0) { 1029a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("duplex_modes", PrinterCapabilitiesProto.DUPLEX_MODES, 103c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintAttributesProto.DUPLEX_MODE_NONE); 104c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 105c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if ((cap.getDuplexModes() & PrintAttributes.DUPLEX_MODE_LONG_EDGE) != 0) { 1069a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("duplex_modes", PrinterCapabilitiesProto.DUPLEX_MODES, 107c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintAttributesProto.DUPLEX_MODE_LONG_EDGE); 108c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 109c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if ((cap.getDuplexModes() & PrintAttributes.DUPLEX_MODE_SHORT_EDGE) != 0) { 1109a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("duplex_modes", PrinterCapabilitiesProto.DUPLEX_MODES, 111c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintAttributesProto.DUPLEX_MODE_SHORT_EDGE); 112c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 113c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 114c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann proto.end(token); 115c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 116c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 117c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann /** 118c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Write a {@link PrinterInfo} to a proto. 119c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 120c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param context The context used to resolve resources 121c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param proto The proto to write to 1229a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann * @param idName Clear text name of the proto-id 123c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param id The proto-id of the component name 124c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param info The printer info to write 125c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 1269a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann public static void writePrinterInfo(@NonNull Context context, 1279a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann @NonNull DualDumpOutputStream proto, String idName, long id, 1289a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann @NonNull PrinterInfo info) { 1299a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long token = proto.start(idName, id); 1309a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writePrinterId(proto, "id", PrinterInfoProto.ID, info.getId()); 1319a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("name", PrinterInfoProto.NAME, info.getName()); 1329a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("status", PrinterInfoProto.STATUS, info.getStatus()); 1339a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("description", PrinterInfoProto.DESCRIPTION, info.getDescription()); 134c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 135c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrinterCapabilitiesInfo cap = info.getCapabilities(); 136c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (cap != null) { 1379a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writePrinterCapabilities(context, proto, "capabilities", PrinterInfoProto.CAPABILITIES, 1389a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann cap); 139c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 140c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 141c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann proto.end(token); 142c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 143c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 144c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann /** 145c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Write a {@link PrintAttributes.MediaSize} to a proto. 146c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 147c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param context The context used to resolve resources 148c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param proto The proto to write to 1499a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann * @param idName Clear text name of the proto-id 150c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param id The proto-id of the component name 151c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param mediaSize The media size to write 152c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 1539a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann public static void writeMediaSize(@NonNull Context context, @NonNull DualDumpOutputStream proto, 1549a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann String idName, long id, @NonNull PrintAttributes.MediaSize mediaSize) { 1559a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long token = proto.start(idName, id); 1569a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("id", MediaSizeProto.ID, mediaSize.getId()); 1579a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("label", MediaSizeProto.LABEL, mediaSize.getLabel(context.getPackageManager())); 1589a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("height_mils", MediaSizeProto.HEIGHT_MILS, mediaSize.getHeightMils()); 1599a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("width_mils", MediaSizeProto.WIDTH_MILS, mediaSize.getWidthMils()); 160c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann proto.end(token); 161c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 162c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 163c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann /** 164c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Write a {@link PrintAttributes.Resolution} to a proto. 165c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 166c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param proto The proto to write to 1679a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann * @param idName Clear text name of the proto-id 168c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param id The proto-id of the component name 169c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param res The resolution to write 170c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 1719a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann public static void writeResolution(@NonNull DualDumpOutputStream proto, String idName, long id, 172c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann @NonNull PrintAttributes.Resolution res) { 1739a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long token = proto.start(idName, id); 1749a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("id", ResolutionProto.ID, res.getId()); 1759a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("label", ResolutionProto.LABEL, res.getLabel()); 1769a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("horizontal_DPI", ResolutionProto.HORIZONTAL_DPI, res.getHorizontalDpi()); 1779a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("veritical_DPI", ResolutionProto.VERTICAL_DPI, res.getVerticalDpi()); 178c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann proto.end(token); 179c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 180c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 181c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann /** 182c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Write a {@link PrintAttributes.Margins} to a proto. 183c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 184c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param proto The proto to write to 1859a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann * @param idName Clear text name of the proto-id 186c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param id The proto-id of the component name 187c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param margins The margins to write 188c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 1899a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann public static void writeMargins(@NonNull DualDumpOutputStream proto, String idName, long id, 190c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann @NonNull PrintAttributes.Margins margins) { 1919a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long token = proto.start(idName, id); 1929a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("top_mils", MarginsProto.TOP_MILS, margins.getTopMils()); 1939a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("left_mils", MarginsProto.LEFT_MILS, margins.getLeftMils()); 1949a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("right_mils", MarginsProto.RIGHT_MILS, margins.getRightMils()); 1959a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("bottom_mils", MarginsProto.BOTTOM_MILS, margins.getBottomMils()); 196c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann proto.end(token); 197c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 198c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 199c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann /** 200c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Write a {@link PrintAttributes} to a proto. 201c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 202c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param context The context used to resolve resources 203c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param proto The proto to write to 2049a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann * @param idName Clear text name of the proto-id 205c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param id The proto-id of the component name 206c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param attributes The attributes to write 207c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 208c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann public static void writePrintAttributes(@NonNull Context context, 2099a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann @NonNull DualDumpOutputStream proto, String idName, long id, 2109a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann @NonNull PrintAttributes attributes) { 2119a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long token = proto.start(idName, id); 212c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 213c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintAttributes.MediaSize mediaSize = attributes.getMediaSize(); 214c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (mediaSize != null) { 2159a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writeMediaSize(context, proto, "media_size", PrintAttributesProto.MEDIA_SIZE, mediaSize); 2162ec6657362523a409c91ce8a7ec0a316e33d8851Philip P. Moltmann proto.write("is_portrait", PrintAttributesProto.IS_PORTRAIT, attributes.isPortrait()); 217c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 218c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 219c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintAttributes.Resolution res = attributes.getResolution(); 220c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (res != null) { 2219a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writeResolution(proto, "resolution", PrintAttributesProto.RESOLUTION, res); 222c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 223c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 224c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintAttributes.Margins minMargins = attributes.getMinMargins(); 225c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (minMargins != null) { 2269a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writeMargins(proto, "min_margings", PrintAttributesProto.MIN_MARGINS, minMargins); 227c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 228c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 2299a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("color_mode", PrintAttributesProto.COLOR_MODE, attributes.getColorMode()); 2309a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("duplex_mode", PrintAttributesProto.DUPLEX_MODE, attributes.getDuplexMode()); 231c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann proto.end(token); 232c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 233c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 234c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann /** 235c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Write a {@link PrintDocumentInfo} to a proto. 236c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 237c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param proto The proto to write to 2389a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann * @param idName Clear text name of the proto-id 239c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param id The proto-id of the component name 240c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param info The info to write 241c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 2429a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann public static void writePrintDocumentInfo(@NonNull DualDumpOutputStream proto, String idName, 2439a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long id, @NonNull PrintDocumentInfo info) { 2449a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long token = proto.start(idName, id); 2459a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("name", PrintDocumentInfoProto.NAME, info.getName()); 246c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 247c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann int pageCount = info.getPageCount(); 248c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (pageCount != PrintDocumentInfo.PAGE_COUNT_UNKNOWN) { 2499a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("page_count", PrintDocumentInfoProto.PAGE_COUNT, pageCount); 250c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 251c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 2529a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("content_type", PrintDocumentInfoProto.CONTENT_TYPE, info.getContentType()); 2539a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("data_size", PrintDocumentInfoProto.DATA_SIZE, info.getDataSize()); 254c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann proto.end(token); 255c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 256c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 257c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann /** 258c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Write a {@link PageRange} to a proto. 259c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 260c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param proto The proto to write to 2619a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann * @param idName Clear text name of the proto-id 262c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param id The proto-id of the component name 263c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param range The range to write 264c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 2659a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann public static void writePageRange(@NonNull DualDumpOutputStream proto, String idName, long id, 266c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann @NonNull PageRange range) { 2679a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long token = proto.start(idName, id); 2689a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("start", PageRangeProto.START, range.getStart()); 2699a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("end", PageRangeProto.END, range.getEnd()); 270c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann proto.end(token); 271c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 272c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 273c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann /** 274c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * Write a {@link PrintJobInfo} to a proto. 275c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * 276c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param context The context used to resolve resources 277c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param proto The proto to write to 2789a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann * @param idName Clear text name of the proto-id 279c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param id The proto-id of the component name 280c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann * @param printJobInfo The print job info to write 281c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann */ 2829a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann public static void writePrintJobInfo(@NonNull Context context, 2839a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann @NonNull DualDumpOutputStream proto, String idName, long id, 2849a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann @NonNull PrintJobInfo printJobInfo) { 2859a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann long token = proto.start(idName, id); 2869a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("label", PrintJobInfoProto.LABEL, printJobInfo.getLabel()); 287c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 288c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintJobId printJobId = printJobInfo.getId(); 289c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (printJobId != null) { 2909a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("print_job_id", PrintJobInfoProto.PRINT_JOB_ID, 2919a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann printJobId.flattenToString()); 292c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 293c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 294c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann int state = printJobInfo.getState(); 295c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (state >= PrintJobInfoProto.STATE_CREATED && state <= PrintJobInfoProto.STATE_CANCELED) { 2969a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("state", PrintJobInfoProto.STATE, state); 297c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } else { 2989a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("state", PrintJobInfoProto.STATE, PrintJobInfoProto.STATE_UNKNOWN); 299c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 300c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 301c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrinterId printer = printJobInfo.getPrinterId(); 302c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (printer != null) { 3039a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writePrinterId(proto, "printer", PrintJobInfoProto.PRINTER, printer); 304c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 305c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 306c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann String tag = printJobInfo.getTag(); 307c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (tag != null) { 3089a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("tag", PrintJobInfoProto.TAG, tag); 309c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 310c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 3119a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("creation_time", PrintJobInfoProto.CREATION_TIME, 3129a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann printJobInfo.getCreationTime()); 313c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 314c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintAttributes attributes = printJobInfo.getAttributes(); 315c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (attributes != null) { 3169a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writePrintAttributes(context, proto, "attributes", PrintJobInfoProto.ATTRIBUTES, 3179a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann attributes); 318c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 319c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 320c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PrintDocumentInfo docInfo = printJobInfo.getDocumentInfo(); 321c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (docInfo != null) { 3229a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writePrintDocumentInfo(proto, "document_info", PrintJobInfoProto.DOCUMENT_INFO, 3239a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann docInfo); 324c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 325c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 3269a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("is_canceling", PrintJobInfoProto.IS_CANCELING, printJobInfo.isCancelling()); 327c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 328c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann PageRange[] pages = printJobInfo.getPages(); 329c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (pages != null) { 330c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann for (int i = 0; i < pages.length; i++) { 3319a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann writePageRange(proto, "pages", PrintJobInfoProto.PAGES, pages[i]); 332c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 333c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 334c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 3359a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("has_advanced_options", PrintJobInfoProto.HAS_ADVANCED_OPTIONS, 336c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann printJobInfo.getAdvancedOptions() != null); 3379a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("progress", PrintJobInfoProto.PROGRESS, printJobInfo.getProgress()); 338c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 339c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann CharSequence status = printJobInfo.getStatus(context.getPackageManager()); 340c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann if (status != null) { 3419a534c01ecd4a1442856c1b709e23b61f1baf9baPhilip P. Moltmann proto.write("status", PrintJobInfoProto.STATUS, status.toString()); 342c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 343c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann 344c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann proto.end(token); 345c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann } 346c0a128dc2b3e7af35cb39d5157ca4de9147aa3c8Philip P. Moltmann} 347