1c36cf2e9Sopenharmony_ci/*
2c36cf2e9Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3c36cf2e9Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c36cf2e9Sopenharmony_ci * you may not use this file except in compliance with the License.
5c36cf2e9Sopenharmony_ci * You may obtain a copy of the License at
6c36cf2e9Sopenharmony_ci *
7c36cf2e9Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8c36cf2e9Sopenharmony_ci *
9c36cf2e9Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c36cf2e9Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c36cf2e9Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c36cf2e9Sopenharmony_ci * See the License for the specific language governing permissions and
13c36cf2e9Sopenharmony_ci * limitations under the License.
14c36cf2e9Sopenharmony_ci */
15c36cf2e9Sopenharmony_ci
16c36cf2e9Sopenharmony_ciimport {
17c36cf2e9Sopenharmony_ci  ErrorMessage,
18c36cf2e9Sopenharmony_ci  MediaSizeHelper,
19c36cf2e9Sopenharmony_ci  MediaTypeCode,
20c36cf2e9Sopenharmony_ci  MediaTypes,
21c36cf2e9Sopenharmony_ci  PreviewAttribute,
22c36cf2e9Sopenharmony_ci  PrinterCapsOptions,
23c36cf2e9Sopenharmony_ci  PrintJob,
24c36cf2e9Sopenharmony_ci  PrintJobOptions,
25c36cf2e9Sopenharmony_ci  PrintUtil,
26c36cf2e9Sopenharmony_ci  startPrintJob
27c36cf2e9Sopenharmony_ci} from '@ohos/common';
28c36cf2e9Sopenharmony_ciimport WifiP2pHelper from '../Common/Adapter/WifiP2pHelper';
29c36cf2e9Sopenharmony_ciimport FileModel from '../Model/FileModel';
30c36cf2e9Sopenharmony_ciimport SelectionModel from '../Model/SelectionModel';
31c36cf2e9Sopenharmony_ciimport { WLANConfirmDialog, PrintingSelectDialog, alarmDialog, connectConfirmDialog } from './component/CusDialogComp';
32c36cf2e9Sopenharmony_ciimport {
33c36cf2e9Sopenharmony_ci  PrinterSelection,
34c36cf2e9Sopenharmony_ci  MediaSizeSelection,
35c36cf2e9Sopenharmony_ci  DirectionSelection,
36c36cf2e9Sopenharmony_ci  MediaTypeSelection,
37c36cf2e9Sopenharmony_ci  QualitySelection,
38c36cf2e9Sopenharmony_ci  DuplexSelection
39c36cf2e9Sopenharmony_ci} from './component/SelectComponent';
40c36cf2e9Sopenharmony_ciimport { MediaSize, MediaSizeUtil } from '@ohos/common';
41c36cf2e9Sopenharmony_ciimport { StringUtil } from '@ohos/common';
42c36cf2e9Sopenharmony_ciimport { PreviewComponent } from './component/PreviewComponent';
43c36cf2e9Sopenharmony_ciimport { ErrorCode, PrintPageSize, PrinterRange, PrintMargin, PrinterCapability, PrinterInfo } from '@ohos/common';
44c36cf2e9Sopenharmony_ciimport PrintAdapter from '../Common/Adapter/PrintAdapter';
45c36cf2e9Sopenharmony_ciimport { GlobalThisHelper, GlobalThisStorageKey} from '@ohos/common';
46c36cf2e9Sopenharmony_ciimport FileUtil from '../Common/Utils/FileUtil';
47c36cf2e9Sopenharmony_ciimport CheckEmptyUtils from '@ohos/common';
48c36cf2e9Sopenharmony_ciimport { CopyUtil } from '@ohos/common';
49c36cf2e9Sopenharmony_ciimport {
50c36cf2e9Sopenharmony_ci  Constants,
51c36cf2e9Sopenharmony_ci  AppCommonEvent,
52c36cf2e9Sopenharmony_ci  AppStorageKeyName,
53c36cf2e9Sopenharmony_ci  PrintRangeType,
54c36cf2e9Sopenharmony_ci  PrintQuality,
55c36cf2e9Sopenharmony_ci  Duplex,
56c36cf2e9Sopenharmony_ci  PageDirection,
57c36cf2e9Sopenharmony_ci  ColorCode,
58c36cf2e9Sopenharmony_ci  MediaType,
59c36cf2e9Sopenharmony_ci  MouseState
60c36cf2e9Sopenharmony_ci} from '@ohos/common';
61c36cf2e9Sopenharmony_ciimport { Log } from '@ohos/common';
62c36cf2e9Sopenharmony_ciimport { uuidGenerator } from '@ohos/common';
63c36cf2e9Sopenharmony_ciimport { BISHENG_PRINTER } from '@ohos/common';
64c36cf2e9Sopenharmony_ciimport emitter from '@ohos.events.emitter';
65c36cf2e9Sopenharmony_ciimport print from '@ohos.print';
66c36cf2e9Sopenharmony_ciimport promptAction from '@ohos.promptAction';
67c36cf2e9Sopenharmony_ciimport common from '@ohos.app.ability.common';
68c36cf2e9Sopenharmony_ciimport {CancelButton} from './component/BaseComponent';
69c36cf2e9Sopenharmony_ciimport image from '@ohos.multimedia.image';
70c36cf2e9Sopenharmony_ciimport { AboutPageComponent } from './component/AboutPageComponent';
71c36cf2e9Sopenharmony_ciimport router from '@ohos.router';
72c36cf2e9Sopenharmony_ciimport Want from '@ohos.app.ability.Want';
73c36cf2e9Sopenharmony_ciimport { BusinessError } from '@ohos.base';
74c36cf2e9Sopenharmony_ciimport UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession';
75c36cf2e9Sopenharmony_ci
76c36cf2e9Sopenharmony_ciconst TAG = 'PrintPage';
77c36cf2e9Sopenharmony_ci
78c36cf2e9Sopenharmony_cilet storage = LocalStorage.getShared();
79c36cf2e9Sopenharmony_ci@Entry(storage)
80c36cf2e9Sopenharmony_ci@Component
81c36cf2e9Sopenharmony_cistruct Index {
82c36cf2e9Sopenharmony_ci  @Provide('ImageCount') imageCount: number = Constants.NUMBER_1;//预览显示的页数
83c36cf2e9Sopenharmony_ci  @Provide('CurrentIndex') currentIndex: number = Constants.NUMBER_1;
84c36cf2e9Sopenharmony_ci  @Provide('Printer') @Watch('onPrinterChange') printer: PrinterInfo | undefined = undefined; //打印机
85c36cf2e9Sopenharmony_ci  @Provide('ShowPageNum') showPageNum: number = Constants.NUMBER_1
86c36cf2e9Sopenharmony_ci  @Provide('PrinterList') printerList: Array<PrinterInfo> = [];
87c36cf2e9Sopenharmony_ci  @Provide('PrintJob') printJob: PrintJob | undefined = undefined;
88c36cf2e9Sopenharmony_ci  @Provide('UsedPrinterId') usedPrinterId: string | undefined = undefined;
89c36cf2e9Sopenharmony_ci  @Provide('PrintAdapter') adapter: PrintAdapter | undefined = undefined;
90c36cf2e9Sopenharmony_ci  @Provide('ConnectCountDown') connectCount: number = Constants.CONNECT_COUNT;
91c36cf2e9Sopenharmony_ci  @Provide('ConnectCountDownTimer') ConnectTimer: number | undefined = undefined;
92c36cf2e9Sopenharmony_ci  @Provide('CanPrint') canPrint: boolean = false;
93c36cf2e9Sopenharmony_ci  @Provide('WLANFlag') wlanFlag: boolean = false;
94c36cf2e9Sopenharmony_ci  @Provide('IsNeedListenWlan') isNeedListenWlan: boolean = false;
95c36cf2e9Sopenharmony_ci  @Provide('ConnectingPrinterId') connectingPrinterId: string = Constants.DEFAULT_CONNECTING_PRINTER_ID;
96c36cf2e9Sopenharmony_ci  @Provide('PrinterSelectArray') printerSelectArray: Array<SelectionModel> = [];
97c36cf2e9Sopenharmony_ci  @Provide('CurrentPrinter') currentPrinterSelection: SelectionModel = SelectionModel.NO_Printer;
98c36cf2e9Sopenharmony_ci  @Provide('MediaSizeSelectArray') mediaSizeSelectArray: Array<SelectionModel> = [];
99c36cf2e9Sopenharmony_ci  @Provide('CurrentMediaSize') @Watch('updateMediaSize') currentMediaSize: SelectionModel = SelectionModel.MediaSize_ISO_A4;
100c36cf2e9Sopenharmony_ci  @Provide('DirectionSelectArray') directionSelectArray: Array<SelectionModel> = [];
101c36cf2e9Sopenharmony_ci  @Provide('CurrentDirection') @Watch('updateDirection') currentDirection: SelectionModel = SelectionModel.Direction_AUTO;
102c36cf2e9Sopenharmony_ci  @Provide('MediaTypeSelectArray') mediaTypeSelectArray: Array<SelectionModel> = [];
103c36cf2e9Sopenharmony_ci  @Provide('CurrentMediaType') @Watch('updateMediaType') currentMediaType: SelectionModel = SelectionModel.MediaType_NORMAL;
104c36cf2e9Sopenharmony_ci  @Provide('QualitySelectArray') qualitySelectArray: Array<SelectionModel> = [];
105c36cf2e9Sopenharmony_ci  @Provide('CurrentQuality') currentQuality: SelectionModel = SelectionModel.PrintQuality_STANDARD;
106c36cf2e9Sopenharmony_ci  @Provide('DuplexSelectArray') duplexSelectArray: Array<SelectionModel> = [];
107c36cf2e9Sopenharmony_ci  @Provide('CurrentDuplex') currentDuplex: SelectionModel = SelectionModel.DuplexMode_SINGLE;
108c36cf2e9Sopenharmony_ci  @Provide('PrintRange') printRange: Array<number> = []; //打印范围
109c36cf2e9Sopenharmony_ci  @Provide('NeedDuplex') @Watch('needDuplexChange')needDuplex: boolean = true;
110c36cf2e9Sopenharmony_ci  @Provide('IsBorderless') isBorderless: boolean = false //是否无边距
111c36cf2e9Sopenharmony_ci  @Provide('IsPreviewFailed') isPreviewFailed: boolean = false //是否需要显示预览失败图示
112c36cf2e9Sopenharmony_ci  private abilityContext: common.UIExtensionContext | undefined = undefined;
113c36cf2e9Sopenharmony_ci  @State @Watch('updateImageSources')imageSources: Array<FileModel> = new Array();
114c36cf2e9Sopenharmony_ci  @State startPage: number = Constants.NUMBER_1 //打印范围起始页
115c36cf2e9Sopenharmony_ci  @State startPageStr: string = Constants.STRING_ONE //打印范围起始页
116c36cf2e9Sopenharmony_ci  @State endPage: number = Constants.NUMBER_1 //打印范围终止页
117c36cf2e9Sopenharmony_ci  @State endPageStr: string = Constants.STRING_ONE //打印范围终止页
118c36cf2e9Sopenharmony_ci  @State printCount: number = Constants.NUMBER_1 //份数
119c36cf2e9Sopenharmony_ci  @State printCountStr: string = Constants.STRING_ONE //份数
120c36cf2e9Sopenharmony_ci  @State isColored: boolean = false //是否彩印
121c36cf2e9Sopenharmony_ci  @State isColorEnabled: boolean = true //是否支持彩印
122c36cf2e9Sopenharmony_ci  @State isDuplexEnabled: boolean = true //是否支持双面
123c36cf2e9Sopenharmony_ci  @State isPhotoEnabled: boolean = true //是否支持相片纸
124c36cf2e9Sopenharmony_ci  @State isPlusPressed: boolean = false //是否按下份数+
125c36cf2e9Sopenharmony_ci  @State plusMouseState: number = MouseState.NONE //份数+
126c36cf2e9Sopenharmony_ci  @State minusMouseState: number = MouseState.NONE //份数-
127c36cf2e9Sopenharmony_ci  @State isMinusPressed: boolean = false //是否按下份数-
128c36cf2e9Sopenharmony_ci  @State mediaSizeList: Array<MediaSize> = []; //所有纸张尺寸
129c36cf2e9Sopenharmony_ci  @State printRangeType: number = PrintRangeType.ALL; //打印范围类型 0:全部页面 1:范围打印
130c36cf2e9Sopenharmony_ci  @State colorMode: number = ColorCode.MONOCHROME;
131c36cf2e9Sopenharmony_ci  @State mediaSize: MediaSize = MediaSizeHelper.ISO_A4; //纸张尺寸
132c36cf2e9Sopenharmony_ci  @State pageDirection: number = Constants.NUMBER_0; //纸张方向
133c36cf2e9Sopenharmony_ci  @State printerRange: PrinterRange | undefined = undefined; //打印框架需要的参数,实际不起效
134c36cf2e9Sopenharmony_ci  @State printerPageSize: PrintPageSize | undefined = undefined; //纸张尺寸
135c36cf2e9Sopenharmony_ci  @State alarmText: string | undefined = undefined;
136c36cf2e9Sopenharmony_ci  @State lastPrinterExist: boolean = false;
137c36cf2e9Sopenharmony_ci  @State isConnected: boolean = false;
138c36cf2e9Sopenharmony_ci  @State printerCap: print.PrinterCapability | undefined = undefined;
139c36cf2e9Sopenharmony_ci  @State printButtonFlag: boolean = true;
140c36cf2e9Sopenharmony_ci  @State cusRangeBorderColor: Resource = $r('app.color.border_line');
141c36cf2e9Sopenharmony_ci  @State errorMessage: Resource | undefined = undefined;
142c36cf2e9Sopenharmony_ci  @State isCusRangeError: boolean = false;
143c36cf2e9Sopenharmony_ci  @State isCusRangeMax: boolean = false;
144c36cf2e9Sopenharmony_ci  @State cusRangeArr: Array<number> = [];
145c36cf2e9Sopenharmony_ci  @State cusRangeText: string | undefined = undefined;
146c36cf2e9Sopenharmony_ci  @State isRangeRadioEnable: boolean = false;
147c36cf2e9Sopenharmony_ci  @State isCustomRadioEnable: boolean = false;
148c36cf2e9Sopenharmony_ci  @State isAbovePageLimit: boolean = false;//是否超过页数限制
149c36cf2e9Sopenharmony_ci  @State printParamCompHeight: number = 0;//参数区组件高度
150c36cf2e9Sopenharmony_ci  @Provide('PreviewCompHeight') previewCompHeight: number = 0;//预览区组件高度
151c36cf2e9Sopenharmony_ci  @Provide('IsGlobalDisable') isGlobalDisable: boolean = false;
152c36cf2e9Sopenharmony_ci  @Provide('PrinterSelectFlag') @Watch('openPrinterSelectDialog') printerSelectFlag: boolean = false;
153c36cf2e9Sopenharmony_ci  @Provide('OpenWLANFlag') @Watch('openWLANDialog') openWlanFlag: boolean = true;
154c36cf2e9Sopenharmony_ci  @Provide('ConnectFlag') @Watch('connectAlarm') connectFlag: boolean = true;
155c36cf2e9Sopenharmony_ci  @StorageLink('JobQueue') jobQueue: Array<PrintJob> = new Array();
156c36cf2e9Sopenharmony_ci  private usedPrinterFileName: string = 'lastUsedPrinter'
157c36cf2e9Sopenharmony_ci  private firstFileName: string = Constants.STRING_NONE;
158c36cf2e9Sopenharmony_ci  private totalPage: number = Constants.NUMBER_1//总页数
159c36cf2e9Sopenharmony_ci  private allPages: Array<number> = [];
160c36cf2e9Sopenharmony_ci  private jobName: string = Constants.STRING_NONE
161c36cf2e9Sopenharmony_ci  private jobNum: number = Constants.NUMBER_1
162c36cf2e9Sopenharmony_ci  private jobDes: string = Constants.STRING_NONE
163c36cf2e9Sopenharmony_ci  private jobId: string = Constants.STRING_NONE
164c36cf2e9Sopenharmony_ci  private jobFileList: Array<string> = []
165c36cf2e9Sopenharmony_ci  private supportedMediaTypes: Array<number> = []
166c36cf2e9Sopenharmony_ci  private scroller: Scroller = new Scroller()
167c36cf2e9Sopenharmony_ci  private firstStartPageEdit: boolean = true
168c36cf2e9Sopenharmony_ci  private firstEndPageEdit: boolean = true
169c36cf2e9Sopenharmony_ci  private editCusRangeFlag: boolean = true//自定义输入框自动置空时为false,不触发编辑
170c36cf2e9Sopenharmony_ci  private rangeInputLimit: number = Constants.NUMBER_3 //范围输入框位数限制
171c36cf2e9Sopenharmony_ci  private firstPrinterDiscoveredFlag: boolean = false;
172c36cf2e9Sopenharmony_ci  private changeRangeTypeFlag: boolean = true;//范围框radio选中是否让startPage输入框获焦
173c36cf2e9Sopenharmony_ci  private fileNum: number = Constants.NUMBER_0;
174c36cf2e9Sopenharmony_ci  private session?: UIExtensionContentSession = undefined;
175c36cf2e9Sopenharmony_ci  WLANConfirmDialogCtl: CustomDialogController = new CustomDialogController({
176c36cf2e9Sopenharmony_ci    builder: WLANConfirmDialog(),
177c36cf2e9Sopenharmony_ci    alignment: DialogAlignment.Center,
178c36cf2e9Sopenharmony_ci    autoCancel: false,
179c36cf2e9Sopenharmony_ci    customStyle: true,
180c36cf2e9Sopenharmony_ci  })
181c36cf2e9Sopenharmony_ci  PrintingSelectDialogCtl: CustomDialogController = new CustomDialogController({
182c36cf2e9Sopenharmony_ci    builder: PrintingSelectDialog(),
183c36cf2e9Sopenharmony_ci    alignment: DialogAlignment.Center,
184c36cf2e9Sopenharmony_ci    autoCancel: false,
185c36cf2e9Sopenharmony_ci    customStyle: true,
186c36cf2e9Sopenharmony_ci  })
187c36cf2e9Sopenharmony_ci  alarmDialogCtl: CustomDialogController = new CustomDialogController({
188c36cf2e9Sopenharmony_ci    builder: alarmDialog({ alarmText: this.alarmText }),
189c36cf2e9Sopenharmony_ci    alignment: DialogAlignment.Center,
190c36cf2e9Sopenharmony_ci    autoCancel: false,
191c36cf2e9Sopenharmony_ci    customStyle: true,
192c36cf2e9Sopenharmony_ci  })
193c36cf2e9Sopenharmony_ci  connectConfirmDialogCtl: CustomDialogController = new CustomDialogController({
194c36cf2e9Sopenharmony_ci    builder: connectConfirmDialog(),
195c36cf2e9Sopenharmony_ci    alignment: DialogAlignment.Center,
196c36cf2e9Sopenharmony_ci    autoCancel: false,
197c36cf2e9Sopenharmony_ci    customStyle: true,
198c36cf2e9Sopenharmony_ci  })
199c36cf2e9Sopenharmony_ci
200c36cf2e9Sopenharmony_ci  build() {
201c36cf2e9Sopenharmony_ci    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }) {
202c36cf2e9Sopenharmony_ci      // 预览组件
203c36cf2e9Sopenharmony_ci      PreviewComponent({
204c36cf2e9Sopenharmony_ci        pageDirection: $pageDirection,
205c36cf2e9Sopenharmony_ci        colorMode: $colorMode,
206c36cf2e9Sopenharmony_ci        mediaSize: $mediaSize,
207c36cf2e9Sopenharmony_ci        imageSources: $imageSources
208c36cf2e9Sopenharmony_ci      })
209c36cf2e9Sopenharmony_ci        .height('40%')
210c36cf2e9Sopenharmony_ci        .onAreaChange((oldValue: Area, newValue: Area) => {
211c36cf2e9Sopenharmony_ci          Log.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`)
212c36cf2e9Sopenharmony_ci          this.previewCompHeight = newValue.height as number;
213c36cf2e9Sopenharmony_ci          this.printParamCompHeight = this.previewCompHeight*1.5
214c36cf2e9Sopenharmony_ci        })
215c36cf2e9Sopenharmony_ci      Column() {
216c36cf2e9Sopenharmony_ci        Scroll(this.scroller) {
217c36cf2e9Sopenharmony_ci          Column() {
218c36cf2e9Sopenharmony_ci            PrinterSelection()
219c36cf2e9Sopenharmony_ci            Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) {
220c36cf2e9Sopenharmony_ci              Text($r('app.string.index_add_copies'))
221c36cf2e9Sopenharmony_ci                .fontSize($r('app.float.font_size_body2'))
222c36cf2e9Sopenharmony_ci                .width($r('app.float.text_label_width'))
223c36cf2e9Sopenharmony_ci                .textAlign(TextAlign.End)
224c36cf2e9Sopenharmony_ci                .key('Index_Text_copies')
225c36cf2e9Sopenharmony_ci                .focusable(true)
226c36cf2e9Sopenharmony_ci                .onFocus(()=>{
227c36cf2e9Sopenharmony_ci                  if (this.printRangeType === PrintRangeType.CUSTOM) {
228c36cf2e9Sopenharmony_ci                    this.checkCustomRangeTextInput(false)
229c36cf2e9Sopenharmony_ci                  }
230c36cf2e9Sopenharmony_ci                })
231c36cf2e9Sopenharmony_ci              TextInput({ text: this.printCountStr })
232c36cf2e9Sopenharmony_ci                .type(InputType.Number)
233c36cf2e9Sopenharmony_ci                .maxLength(Constants.NUMBER_2)
234c36cf2e9Sopenharmony_ci                .fontSize($r('app.float.font_size_body2'))
235c36cf2e9Sopenharmony_ci                .border({
236c36cf2e9Sopenharmony_ci                  width: $r('app.float.border_width'),
237c36cf2e9Sopenharmony_ci                  radius: $r('app.float.radius_s'),
238c36cf2e9Sopenharmony_ci                  color: $r('app.color.border_line')
239c36cf2e9Sopenharmony_ci                })
240c36cf2e9Sopenharmony_ci                .backgroundColor(Color.White)
241c36cf2e9Sopenharmony_ci                .width($r('app.float.print_copies_textInput_width'))
242c36cf2e9Sopenharmony_ci                .height($r('app.float.params_comp_height'))
243c36cf2e9Sopenharmony_ci                .margin({
244c36cf2e9Sopenharmony_ci                  left: $r('app.float.print_copies_textInput_left_margin'),
245c36cf2e9Sopenharmony_ci                  right: $r('app.float.print_copies_textInput_right_margin')
246c36cf2e9Sopenharmony_ci                })
247c36cf2e9Sopenharmony_ci                .key('Index_TextInput_copies')
248c36cf2e9Sopenharmony_ci                .onChange((value: string) => {
249c36cf2e9Sopenharmony_ci                  Log.info(TAG, 'copies onChange value:' + value)
250c36cf2e9Sopenharmony_ci                  this.printCount = Number.parseInt(value)
251c36cf2e9Sopenharmony_ci                  this.printCountStr = value//规避前置0输入
252c36cf2e9Sopenharmony_ci                  this.printCountStr = this.printCount.toString()
253c36cf2e9Sopenharmony_ci                  Log.info(TAG, 'copies onChange printCount:' + this.printCount)
254c36cf2e9Sopenharmony_ci                  if (Number.isNaN(this.printCount)) {
255c36cf2e9Sopenharmony_ci                    this.printCount = Constants.NUMBER_1
256c36cf2e9Sopenharmony_ci                    this.printCountStr = Constants.STRING_NONE
257c36cf2e9Sopenharmony_ci                  }
258c36cf2e9Sopenharmony_ci                  if (this.printCount < Constants.NUMBER_1) {
259c36cf2e9Sopenharmony_ci                    this.printCount = Constants.NUMBER_1
260c36cf2e9Sopenharmony_ci                  }
261c36cf2e9Sopenharmony_ci                  if (this.printCount > Constants.NUMBER_99||this.printCount >= Number.MAX_VALUE) {
262c36cf2e9Sopenharmony_ci                    this.printCount = Constants.NUMBER_99
263c36cf2e9Sopenharmony_ci                  }
264c36cf2e9Sopenharmony_ci                })
265c36cf2e9Sopenharmony_ci                .onSubmit(() => {
266c36cf2e9Sopenharmony_ci                  this.printCountStr = Constants.STRING_NONE
267c36cf2e9Sopenharmony_ci                  this.printCountStr = this.printCount.toString()
268c36cf2e9Sopenharmony_ci                })
269c36cf2e9Sopenharmony_ci                .onBlur(() => {
270c36cf2e9Sopenharmony_ci                  this.printCountStr = ''
271c36cf2e9Sopenharmony_ci                  this.printCountStr = this.printCount.toString()
272c36cf2e9Sopenharmony_ci                  Log.info(TAG,'copies onBlur printCountStr: ',this.printCountStr)
273c36cf2e9Sopenharmony_ci                })
274c36cf2e9Sopenharmony_ci                .onTouch((e:TouchEvent)=>{
275c36cf2e9Sopenharmony_ci                  e.stopPropagation()
276c36cf2e9Sopenharmony_ci                })
277c36cf2e9Sopenharmony_ci                .onMouse((e:MouseEvent)=>{
278c36cf2e9Sopenharmony_ci                  e.stopPropagation()
279c36cf2e9Sopenharmony_ci                })
280c36cf2e9Sopenharmony_ci              Column() {
281c36cf2e9Sopenharmony_ci                Image(this.getPlusImage(this.plusMouseState,this.printCount < Constants.NUMBER_99))
282c36cf2e9Sopenharmony_ci                  .width($r('app.float.print_copies_image_width'))
283c36cf2e9Sopenharmony_ci                  .height($r('app.float.print_copies_image_height'))
284c36cf2e9Sopenharmony_ci                  .enabled(this.printCount < Constants.NUMBER_99)
285c36cf2e9Sopenharmony_ci                  .key('Index_Image_plus_copies')
286c36cf2e9Sopenharmony_ci                  .onClick(() => {
287c36cf2e9Sopenharmony_ci                    if (this.printCount < Constants.NUMBER_99) {
288c36cf2e9Sopenharmony_ci                      this.printCount++
289c36cf2e9Sopenharmony_ci                      this.printCountStr = this.printCount.toString()
290c36cf2e9Sopenharmony_ci                    }
291c36cf2e9Sopenharmony_ci                  })
292c36cf2e9Sopenharmony_ci                  .onTouch((event: TouchEvent) => {
293c36cf2e9Sopenharmony_ci                    if (event.type === TouchType.Down) {
294c36cf2e9Sopenharmony_ci                      this.plusMouseState = MouseState.PRESS
295c36cf2e9Sopenharmony_ci                    }
296c36cf2e9Sopenharmony_ci                    if (event.type === TouchType.Up) {
297c36cf2e9Sopenharmony_ci                      this.plusMouseState = MouseState.NONE
298c36cf2e9Sopenharmony_ci                    }
299c36cf2e9Sopenharmony_ci                  })
300c36cf2e9Sopenharmony_ci                  .onHover((isHover: boolean) => {
301c36cf2e9Sopenharmony_ci                    if (isHover) {
302c36cf2e9Sopenharmony_ci                      this.plusMouseState = MouseState.HOVER
303c36cf2e9Sopenharmony_ci                    } else {
304c36cf2e9Sopenharmony_ci                      this.plusMouseState = MouseState.NONE
305c36cf2e9Sopenharmony_ci                    }
306c36cf2e9Sopenharmony_ci                  })
307c36cf2e9Sopenharmony_ci                Image(this.getMinusImage(this.minusMouseState,this.printCount > Constants.NUMBER_1))
308c36cf2e9Sopenharmony_ci                  .width($r('app.float.print_copies_image_width'))
309c36cf2e9Sopenharmony_ci                  .height($r('app.float.print_copies_image_height'))
310c36cf2e9Sopenharmony_ci                  .enabled(this.printCount > Constants.NUMBER_1)
311c36cf2e9Sopenharmony_ci                  .key('Index_Image_minus_copies')
312c36cf2e9Sopenharmony_ci                  .onClick(() => {
313c36cf2e9Sopenharmony_ci                    if (this.printCount > Constants.NUMBER_1) {
314c36cf2e9Sopenharmony_ci                      this.printCount--
315c36cf2e9Sopenharmony_ci                      this.printCountStr = this.printCount.toString()
316c36cf2e9Sopenharmony_ci                    }
317c36cf2e9Sopenharmony_ci                  })
318c36cf2e9Sopenharmony_ci                  .onTouch((event: TouchEvent) => {
319c36cf2e9Sopenharmony_ci                    if (event.type === TouchType.Down) {
320c36cf2e9Sopenharmony_ci                      this.minusMouseState = MouseState.PRESS
321c36cf2e9Sopenharmony_ci                    }
322c36cf2e9Sopenharmony_ci                    if (event.type === TouchType.Up) {
323c36cf2e9Sopenharmony_ci                      this.minusMouseState = MouseState.NONE
324c36cf2e9Sopenharmony_ci                    }
325c36cf2e9Sopenharmony_ci                  })
326c36cf2e9Sopenharmony_ci                  .onHover((isHover: boolean) => {
327c36cf2e9Sopenharmony_ci                    if (isHover) {
328c36cf2e9Sopenharmony_ci                      this.minusMouseState = MouseState.HOVER
329c36cf2e9Sopenharmony_ci                    } else {
330c36cf2e9Sopenharmony_ci                      this.minusMouseState = MouseState.NONE
331c36cf2e9Sopenharmony_ci                    }
332c36cf2e9Sopenharmony_ci                  })
333c36cf2e9Sopenharmony_ci              }
334c36cf2e9Sopenharmony_ci              .width($r('app.float.print_copies_image_width'))
335c36cf2e9Sopenharmony_ci              .height($r('app.float.params_comp_height'))
336c36cf2e9Sopenharmony_ci
337c36cf2e9Sopenharmony_ci              Text($r('app.string.ColorMode'))
338c36cf2e9Sopenharmony_ci                .key('Index_Text_color')
339c36cf2e9Sopenharmony_ci                .fontSize($r('app.float.font_size_body2'))
340c36cf2e9Sopenharmony_ci                .height($r('app.float.params_comp_height'))
341c36cf2e9Sopenharmony_ci                .margin({
342c36cf2e9Sopenharmony_ci                  left: $r('app.float.text_colorMode_left_margin'),
343c36cf2e9Sopenharmony_ci                  right: $r('app.float.text_colorMode_right_margin')
344c36cf2e9Sopenharmony_ci                })
345c36cf2e9Sopenharmony_ci                .textAlign(TextAlign.Start)
346c36cf2e9Sopenharmony_ci                .visibility(this.isColorEnabled ? Visibility.Visible : Visibility.None)
347c36cf2e9Sopenharmony_ci              Toggle({ type: ToggleType.Switch, isOn: !this.isColored })
348c36cf2e9Sopenharmony_ci                .key('Index_Toggle_color')
349c36cf2e9Sopenharmony_ci                .width($r('app.float.toggle_colorMode_width'))
350c36cf2e9Sopenharmony_ci                .margin({ right: $r('app.float.toggle_colorMode_right_margin') })
351c36cf2e9Sopenharmony_ci                .alignSelf(ItemAlign.Center)
352c36cf2e9Sopenharmony_ci                .visibility(this.isColorEnabled ? Visibility.Visible : Visibility.None)
353c36cf2e9Sopenharmony_ci                .onChange((isOn: boolean) => {
354c36cf2e9Sopenharmony_ci                  this.isColored = !isOn
355c36cf2e9Sopenharmony_ci                  Log.info(TAG, 'ColorMode onChange: ' + this.isColored)
356c36cf2e9Sopenharmony_ci                  if (this.isColored) {
357c36cf2e9Sopenharmony_ci                    this.colorMode = ColorCode.COLOR
358c36cf2e9Sopenharmony_ci                  } else {
359c36cf2e9Sopenharmony_ci                    this.colorMode = ColorCode.MONOCHROME
360c36cf2e9Sopenharmony_ci                  }
361c36cf2e9Sopenharmony_ci                })
362c36cf2e9Sopenharmony_ci            }
363c36cf2e9Sopenharmony_ci            .height($r('app.float.params_row_height'))
364c36cf2e9Sopenharmony_ci            .width($r('app.float.params_row_width'))
365c36cf2e9Sopenharmony_ci
366c36cf2e9Sopenharmony_ci            Column() {
367c36cf2e9Sopenharmony_ci              Row() {
368c36cf2e9Sopenharmony_ci                Text($r('app.string.index_page_range'))
369c36cf2e9Sopenharmony_ci                  .fontSize($r('app.float.font_size_body2'))
370c36cf2e9Sopenharmony_ci                  .width($r('app.float.text_label_width'))
371c36cf2e9Sopenharmony_ci                  .textAlign(TextAlign.End)
372c36cf2e9Sopenharmony_ci                  .key('Index_Text_pageRange')
373c36cf2e9Sopenharmony_ci                Radio({ value: 'Radio1', group: 'radioGroup' })
374c36cf2e9Sopenharmony_ci                  .checked(this.printRangeType === PrintRangeType.ALL)
375c36cf2e9Sopenharmony_ci                  .key('Index_Radio_allPages_pageRange')
376c36cf2e9Sopenharmony_ci                  .width($r('app.float.image_comp_width'))
377c36cf2e9Sopenharmony_ci                  .margin({
378c36cf2e9Sopenharmony_ci                    left: $r('app.float.Radio_pageRange_left_margin'),
379c36cf2e9Sopenharmony_ci                    right: $r('app.float.Radio_pageRange_right_margin')
380c36cf2e9Sopenharmony_ci                  })
381c36cf2e9Sopenharmony_ci                  .onChange((value: boolean) => {
382c36cf2e9Sopenharmony_ci                    Log.info(TAG,'Radio_range_pageRange all')
383c36cf2e9Sopenharmony_ci                    if (value) {
384c36cf2e9Sopenharmony_ci                      if (this.printRangeType === PrintRangeType.CUSTOM) {
385c36cf2e9Sopenharmony_ci                        this.checkCustomRangeTextInput(true);
386c36cf2e9Sopenharmony_ci                        this.printRangeType = PrintRangeType.ALL
387c36cf2e9Sopenharmony_ci                        focusControl.requestFocus('Index_Text_copies')
388c36cf2e9Sopenharmony_ci                      }
389c36cf2e9Sopenharmony_ci                      this.printRangeType = PrintRangeType.ALL;
390c36cf2e9Sopenharmony_ci                      this.updatePrintRange()
391c36cf2e9Sopenharmony_ci                    }
392c36cf2e9Sopenharmony_ci                  })
393c36cf2e9Sopenharmony_ci                Text($r('app.string.index_all_pages'))
394c36cf2e9Sopenharmony_ci                  .fontSize($r('app.float.font_size_body2'))
395c36cf2e9Sopenharmony_ci                  .key('Index_Text_allPages_pageRange')
396c36cf2e9Sopenharmony_ci              }
397c36cf2e9Sopenharmony_ci              .height($r('app.float.params_row_height'))
398c36cf2e9Sopenharmony_ci              .width($r('app.float.params_row_width'))
399c36cf2e9Sopenharmony_ci
400c36cf2e9Sopenharmony_ci              Row() {
401c36cf2e9Sopenharmony_ci                Radio({ value: 'Radio2', group: 'radioGroup' })
402c36cf2e9Sopenharmony_ci                  .checked(this.printRangeType === PrintRangeType.RANGE)
403c36cf2e9Sopenharmony_ci                  .key('Index_Radio_range_pageRange')
404c36cf2e9Sopenharmony_ci                  .width($r('app.float.image_comp_width'))
405c36cf2e9Sopenharmony_ci                  .margin({
406c36cf2e9Sopenharmony_ci                    left: $r('app.float.Radio_pageRange2_left_margin'),
407c36cf2e9Sopenharmony_ci                    right: $r('app.float.Radio_pageRange2_right_margin')
408c36cf2e9Sopenharmony_ci                  })
409c36cf2e9Sopenharmony_ci                  .onChange((value: boolean) => {
410c36cf2e9Sopenharmony_ci                    if (value) {
411c36cf2e9Sopenharmony_ci                      if (this.changeRangeTypeFlag) {
412c36cf2e9Sopenharmony_ci                        focusControl.requestFocus('Index_TextInput_from_pageRange')
413c36cf2e9Sopenharmony_ci                      }
414c36cf2e9Sopenharmony_ci                      this.checkCustomRangeTextInput(true)
415c36cf2e9Sopenharmony_ci                      Log.info(TAG, 'Radio_range_pageRange onChange: '+ this.endPage)
416c36cf2e9Sopenharmony_ci                      this.printRangeType = PrintRangeType.RANGE;
417c36cf2e9Sopenharmony_ci                      this.editCusRangeFlag = false;this.cusRangeText = Constants.NUMBER_1+Constants.HYPHEN+Constants.MAX_PAGES.toString()
418c36cf2e9Sopenharmony_ci                      this.isRangeRadioEnable = true
419c36cf2e9Sopenharmony_ci                      this.updatePrintRange()
420c36cf2e9Sopenharmony_ci                    }else{
421c36cf2e9Sopenharmony_ci                      Log.info(TAG,'this.isRangeRadioEnable = false')
422c36cf2e9Sopenharmony_ci                      this.isRangeRadioEnable = false
423c36cf2e9Sopenharmony_ci                      this.setStartPageStr()
424c36cf2e9Sopenharmony_ci                      this.setEndPageStr()
425c36cf2e9Sopenharmony_ci                    }
426c36cf2e9Sopenharmony_ci                  })
427c36cf2e9Sopenharmony_ci                  .onTouch((e:TouchEvent)=>{
428c36cf2e9Sopenharmony_ci                    e.stopPropagation()
429c36cf2e9Sopenharmony_ci                  })
430c36cf2e9Sopenharmony_ci                  .onMouse((e:MouseEvent)=>{
431c36cf2e9Sopenharmony_ci                    e.stopPropagation()
432c36cf2e9Sopenharmony_ci                  })
433c36cf2e9Sopenharmony_ci                Text($r('app.string.index_from'))
434c36cf2e9Sopenharmony_ci                  .maxLines(Constants.NUMBER_2)
435c36cf2e9Sopenharmony_ci                  .textOverflow({ overflow: TextOverflow.Ellipsis})
436c36cf2e9Sopenharmony_ci                  .textAlign(TextAlign.Start)
437c36cf2e9Sopenharmony_ci                  .fontSize($r('app.float.font_size_body2'))
438c36cf2e9Sopenharmony_ci                  .key('Index_Text_from_pageRange')
439c36cf2e9Sopenharmony_ci                TextInput({ text: this.startPageStr })
440c36cf2e9Sopenharmony_ci                  .key('Index_TextInput_from_pageRange')
441c36cf2e9Sopenharmony_ci                  .width($r('app.float.textInput_pageRange_width'))
442c36cf2e9Sopenharmony_ci                  .height($r('app.float.params_comp_height'))
443c36cf2e9Sopenharmony_ci                  .type(InputType.Number)
444c36cf2e9Sopenharmony_ci                  .maxLength(this.rangeInputLimit)
445c36cf2e9Sopenharmony_ci                  .fontSize($r('app.float.font_size_body2'))
446c36cf2e9Sopenharmony_ci                  .fontColor(this.isRangeRadioEnable?Color.Black:Color.Gray)
447c36cf2e9Sopenharmony_ci                  .border({
448c36cf2e9Sopenharmony_ci                    width: $r('app.float.border_width'),
449c36cf2e9Sopenharmony_ci                    radius: $r('app.float.radius_s'),
450c36cf2e9Sopenharmony_ci                    color: $r('app.color.border_line')
451c36cf2e9Sopenharmony_ci                  })
452c36cf2e9Sopenharmony_ci                  .margin({
453c36cf2e9Sopenharmony_ci                    left: $r('app.float.textInput_pageRange_left_margin'),
454c36cf2e9Sopenharmony_ci                    right: $r('app.float.textInput_pageRange_right_margin')
455c36cf2e9Sopenharmony_ci                  })
456c36cf2e9Sopenharmony_ci                  .backgroundColor(Color.White)
457c36cf2e9Sopenharmony_ci                  .onChange((value: string) => {
458c36cf2e9Sopenharmony_ci                    this.startPage = Number.parseInt(value)
459c36cf2e9Sopenharmony_ci                    this.startPageStr = value//规避前置0输入
460c36cf2e9Sopenharmony_ci                    this.startPageStr = this.startPage.toString()
461c36cf2e9Sopenharmony_ci                    Log.info(TAG, 'from change; value = ' + this.startPage + ' endpage = ' + this.endPage)
462c36cf2e9Sopenharmony_ci                    if (this.startPage < Constants.NUMBER_1) {
463c36cf2e9Sopenharmony_ci                      this.startPage = Constants.NUMBER_1
464c36cf2e9Sopenharmony_ci                    } else if (this.startPage > this.endPage) {
465c36cf2e9Sopenharmony_ci                      this.startPage = this.endPage
466c36cf2e9Sopenharmony_ci                      Log.info(TAG, 'from change; startPage = ' + this.startPage)
467c36cf2e9Sopenharmony_ci                    }
468c36cf2e9Sopenharmony_ci                    if (Number.isNaN(this.startPage)) {
469c36cf2e9Sopenharmony_ci                      this.startPage = Constants.NUMBER_1
470c36cf2e9Sopenharmony_ci                      this.startPageStr = Constants.STRING_NONE
471c36cf2e9Sopenharmony_ci                    }
472c36cf2e9Sopenharmony_ci                    if (!this.firstStartPageEdit) {
473c36cf2e9Sopenharmony_ci                      this.printRangeType = PrintRangeType.RANGE;
474c36cf2e9Sopenharmony_ci                      this.firstStartPageEdit = false
475c36cf2e9Sopenharmony_ci                    }
476c36cf2e9Sopenharmony_ci                    this.updatePrintRange();
477c36cf2e9Sopenharmony_ci                  })
478c36cf2e9Sopenharmony_ci                  .onSubmit(() => {
479c36cf2e9Sopenharmony_ci                    Log.info(TAG,'startPageStr  onSubmit: ',this.startPage.toString())
480c36cf2e9Sopenharmony_ci                    this.setStartPageStr()
481c36cf2e9Sopenharmony_ci                  })
482c36cf2e9Sopenharmony_ci                  .onBlur(() => {
483c36cf2e9Sopenharmony_ci                    Log.info(TAG,'startPageStr  onBlur: ',this.startPage.toString())
484c36cf2e9Sopenharmony_ci                    this.setStartPageStr()
485c36cf2e9Sopenharmony_ci                  })
486c36cf2e9Sopenharmony_ci                  .onFocus(()=>{
487c36cf2e9Sopenharmony_ci                    this.printRangeType = PrintRangeType.RANGE;
488c36cf2e9Sopenharmony_ci                  })
489c36cf2e9Sopenharmony_ci                  .onTouch((e:TouchEvent)=>{
490c36cf2e9Sopenharmony_ci                    e.stopPropagation()
491c36cf2e9Sopenharmony_ci                  })
492c36cf2e9Sopenharmony_ci                  .onMouse((e:MouseEvent)=>{
493c36cf2e9Sopenharmony_ci                    e.stopPropagation()
494c36cf2e9Sopenharmony_ci                  })
495c36cf2e9Sopenharmony_ci
496c36cf2e9Sopenharmony_ci                Text($r('app.string.index_to'))
497c36cf2e9Sopenharmony_ci                  .maxLines(Constants.NUMBER_2)
498c36cf2e9Sopenharmony_ci                  .textOverflow({ overflow: TextOverflow.Ellipsis})
499c36cf2e9Sopenharmony_ci                  .textAlign(TextAlign.Start)
500c36cf2e9Sopenharmony_ci                  .fontSize($r('app.float.font_size_body2'))
501c36cf2e9Sopenharmony_ci                  .key('Index_Text_to_pageRange')
502c36cf2e9Sopenharmony_ci                TextInput({ text: this.endPageStr })
503c36cf2e9Sopenharmony_ci                  .width($r('app.float.textInput_pageRange_width'))
504c36cf2e9Sopenharmony_ci                  .height($r('app.float.params_comp_height'))
505c36cf2e9Sopenharmony_ci                  .key('Index_TextInput_to_pageRange')
506c36cf2e9Sopenharmony_ci                  .type(InputType.Number)
507c36cf2e9Sopenharmony_ci                  .maxLength(this.rangeInputLimit)
508c36cf2e9Sopenharmony_ci                  .fontSize($r('app.float.font_size_body2'))
509c36cf2e9Sopenharmony_ci                  .backgroundColor(Color.White)
510c36cf2e9Sopenharmony_ci                  .fontColor(this.isRangeRadioEnable?Color.Black:Color.Gray)
511c36cf2e9Sopenharmony_ci                  .margin({
512c36cf2e9Sopenharmony_ci                    left: $r('app.float.textInput_pageRange_left_margin'),
513c36cf2e9Sopenharmony_ci                    right: $r('app.float.textInput_pageRange_right_margin')
514c36cf2e9Sopenharmony_ci                  })
515c36cf2e9Sopenharmony_ci                  .border({
516c36cf2e9Sopenharmony_ci                    width: $r('app.float.border_width'),
517c36cf2e9Sopenharmony_ci                    radius: $r('app.float.radius_s'),
518c36cf2e9Sopenharmony_ci                    color: $r('app.color.border_line')
519c36cf2e9Sopenharmony_ci                  })
520c36cf2e9Sopenharmony_ci                  .onChange((value: string) => {
521c36cf2e9Sopenharmony_ci                    this.endPage = Number.parseInt(value)
522c36cf2e9Sopenharmony_ci                    this.endPageStr = value//规避前置0输入
523c36cf2e9Sopenharmony_ci                    this.endPageStr = this.endPage.toString()
524c36cf2e9Sopenharmony_ci                    if (this.endPage > this.totalPage) {
525c36cf2e9Sopenharmony_ci                      this.endPage = this.totalPage
526c36cf2e9Sopenharmony_ci                    } else if (this.endPage < this.startPage) {
527c36cf2e9Sopenharmony_ci                      this.endPage = this.startPage
528c36cf2e9Sopenharmony_ci                    }
529c36cf2e9Sopenharmony_ci                    if (Number.isNaN(this.endPage)) {
530c36cf2e9Sopenharmony_ci                      this.endPage = this.startPage
531c36cf2e9Sopenharmony_ci                      this.endPageStr = Constants.STRING_NONE
532c36cf2e9Sopenharmony_ci                    }
533c36cf2e9Sopenharmony_ci                    if(!this.firstEndPageEdit){
534c36cf2e9Sopenharmony_ci                      this.printRangeType = PrintRangeType.RANGE;
535c36cf2e9Sopenharmony_ci                      this.firstEndPageEdit = false
536c36cf2e9Sopenharmony_ci                    }
537c36cf2e9Sopenharmony_ci                    this.updatePrintRange();
538c36cf2e9Sopenharmony_ci                  })
539c36cf2e9Sopenharmony_ci                  .onSubmit(() => {
540c36cf2e9Sopenharmony_ci                    Log.info(TAG,'endPageStr  onSubmit: ',this.endPage.toString())
541c36cf2e9Sopenharmony_ci                    this.setEndPageStr();
542c36cf2e9Sopenharmony_ci                  })
543c36cf2e9Sopenharmony_ci                  .onBlur(() => {
544c36cf2e9Sopenharmony_ci                    this.changeRangeTypeFlag = true;
545c36cf2e9Sopenharmony_ci                    Log.info(TAG,'endPageStr  onBlur: ',this.endPage.toString())
546c36cf2e9Sopenharmony_ci                    this.setEndPageStr();
547c36cf2e9Sopenharmony_ci                  })
548c36cf2e9Sopenharmony_ci                  .onFocus(()=>{
549c36cf2e9Sopenharmony_ci                    this.changeRangeTypeFlag = false;
550c36cf2e9Sopenharmony_ci                    this.printRangeType = PrintRangeType.RANGE;
551c36cf2e9Sopenharmony_ci                    this.updatePrintRange()
552c36cf2e9Sopenharmony_ci                  })
553c36cf2e9Sopenharmony_ci                  .onTouch((e:TouchEvent)=>{
554c36cf2e9Sopenharmony_ci                    e.stopPropagation()
555c36cf2e9Sopenharmony_ci                  })
556c36cf2e9Sopenharmony_ci                  .onMouse((e:MouseEvent)=>{
557c36cf2e9Sopenharmony_ci                    e.stopPropagation()
558c36cf2e9Sopenharmony_ci                  })
559c36cf2e9Sopenharmony_ci              }.height($r('app.float.params_row_height')).width($r('app.float.params_row_width'))
560c36cf2e9Sopenharmony_ci              Row() {
561c36cf2e9Sopenharmony_ci                Radio({ value: 'Radio3', group: 'radioGroup' })
562c36cf2e9Sopenharmony_ci                  .checked(this.printRangeType === PrintRangeType.CUSTOM)
563c36cf2e9Sopenharmony_ci                  .key('Index_Radio_custom_pageRange')
564c36cf2e9Sopenharmony_ci                  .width(24)
565c36cf2e9Sopenharmony_ci                  .margin({
566c36cf2e9Sopenharmony_ci                    left: 98,
567c36cf2e9Sopenharmony_ci                    right: 8
568c36cf2e9Sopenharmony_ci                  })
569c36cf2e9Sopenharmony_ci                  .onChange((value: boolean) => {
570c36cf2e9Sopenharmony_ci                    if (value) {
571c36cf2e9Sopenharmony_ci                      focusControl.requestFocus('Index_TextInput_custom_pageRange')
572c36cf2e9Sopenharmony_ci                      this.printRangeType = PrintRangeType.CUSTOM;
573c36cf2e9Sopenharmony_ci                      Log.info(TAG,'isCustomRadioEnable = true')
574c36cf2e9Sopenharmony_ci                      this.isCustomRadioEnable = true
575c36cf2e9Sopenharmony_ci                      this.updatePrintRange()
576c36cf2e9Sopenharmony_ci                    }else{
577c36cf2e9Sopenharmony_ci                      Log.info(TAG,'isCustomRadioEnable = false')
578c36cf2e9Sopenharmony_ci                      this.isCustomRadioEnable = false
579c36cf2e9Sopenharmony_ci                    }
580c36cf2e9Sopenharmony_ci                  })
581c36cf2e9Sopenharmony_ci                  .onTouch((e:TouchEvent)=>{
582c36cf2e9Sopenharmony_ci                    e.stopPropagation()
583c36cf2e9Sopenharmony_ci                  })
584c36cf2e9Sopenharmony_ci                  .onMouse((e:MouseEvent)=>{
585c36cf2e9Sopenharmony_ci                    e.stopPropagation()
586c36cf2e9Sopenharmony_ci                  })
587c36cf2e9Sopenharmony_ci                Text($r('app.string.index_page_custom'))
588c36cf2e9Sopenharmony_ci                  .fontSize(14)
589c36cf2e9Sopenharmony_ci                  .key('Index_Text_custom_pageRange')
590c36cf2e9Sopenharmony_ci              }.height(48).width(432)
591c36cf2e9Sopenharmony_ci              TextInput({placeholder:$r('app.string.index_page_custom_example'),text: this.cusRangeText }).key('Index_TextInput_custom_pageRange')
592c36cf2e9Sopenharmony_ci                .width(326).height(32).border({ width: 1, radius: 8, color: this.cusRangeBorderColor })
593c36cf2e9Sopenharmony_ci                .margin({
594c36cf2e9Sopenharmony_ci                  bottom: 8,
595c36cf2e9Sopenharmony_ci                  left: 98,
596c36cf2e9Sopenharmony_ci                  right: 8
597c36cf2e9Sopenharmony_ci                })
598c36cf2e9Sopenharmony_ci                .backgroundColor(Color.White)
599c36cf2e9Sopenharmony_ci                .placeholderFont({size:14})
600c36cf2e9Sopenharmony_ci                .fontColor(this.isCustomRadioEnable?Color.Black:Color.Gray)
601c36cf2e9Sopenharmony_ci                .fontSize(14)
602c36cf2e9Sopenharmony_ci                .maxLength(50)
603c36cf2e9Sopenharmony_ci                .onChange((value:string)=>{
604c36cf2e9Sopenharmony_ci                  if (this.editCusRangeFlag) {
605c36cf2e9Sopenharmony_ci                    this.printRangeType = PrintRangeType.CUSTOM;
606c36cf2e9Sopenharmony_ci                  }else{
607c36cf2e9Sopenharmony_ci                    this.editCusRangeFlag = true
608c36cf2e9Sopenharmony_ci                  }
609c36cf2e9Sopenharmony_ci                  this.checkCustomRange(value);
610c36cf2e9Sopenharmony_ci                  this.updatePrintRange();
611c36cf2e9Sopenharmony_ci                  this.cusRangeText = value;
612c36cf2e9Sopenharmony_ci                })
613c36cf2e9Sopenharmony_ci                .onBlur(() => {
614c36cf2e9Sopenharmony_ci                  Log.info(TAG,'cusRangeTextInput onBlur')
615c36cf2e9Sopenharmony_ci                })
616c36cf2e9Sopenharmony_ci                .onFocus(()=>{
617c36cf2e9Sopenharmony_ci                  this.printRangeType = PrintRangeType.CUSTOM;
618c36cf2e9Sopenharmony_ci                })
619c36cf2e9Sopenharmony_ci                .onTouch((e:TouchEvent)=>{
620c36cf2e9Sopenharmony_ci                  e.stopPropagation()
621c36cf2e9Sopenharmony_ci                })
622c36cf2e9Sopenharmony_ci                .onMouse((e:MouseEvent)=>{
623c36cf2e9Sopenharmony_ci                  e.stopPropagation()
624c36cf2e9Sopenharmony_ci                })
625c36cf2e9Sopenharmony_ci              Text(this.errorMessage).key('Index_Text_custom_errorMessage')
626c36cf2e9Sopenharmony_ci                .fontSize($r('app.float.font_size_body3')).fontColor('#E84026').fontWeight(FontWeight.Medium)
627c36cf2e9Sopenharmony_ci                .margin({
628c36cf2e9Sopenharmony_ci                  top: 8,
629c36cf2e9Sopenharmony_ci                  left: 98,
630c36cf2e9Sopenharmony_ci                  right: 20,
631c36cf2e9Sopenharmony_ci                  bottom: 8
632c36cf2e9Sopenharmony_ci                })
633c36cf2e9Sopenharmony_ci                .visibility((this.isCusRangeError || this.isCusRangeMax)?Visibility.Visible:Visibility.None)
634c36cf2e9Sopenharmony_ci            }
635c36cf2e9Sopenharmony_ci            .alignItems(HorizontalAlign.Start)
636c36cf2e9Sopenharmony_ci
637c36cf2e9Sopenharmony_ci            MediaSizeSelection()
638c36cf2e9Sopenharmony_ci            DirectionSelection()
639c36cf2e9Sopenharmony_ci            MediaTypeSelection().visibility(!this.isPhotoEnabled ? Visibility.None : Visibility.Visible)
640c36cf2e9Sopenharmony_ci            Row() {
641c36cf2e9Sopenharmony_ci              Blank()
642c36cf2e9Sopenharmony_ci              Row(){
643c36cf2e9Sopenharmony_ci                Checkbox()
644c36cf2e9Sopenharmony_ci                  .select(this.isBorderless)
645c36cf2e9Sopenharmony_ci                  .width($r('app.float.image_comp_width'))
646c36cf2e9Sopenharmony_ci                  .height($r('app.float.image_comp_height'))
647c36cf2e9Sopenharmony_ci                  .enabled(SelectionModel.getSelectionValue<number>(this.currentMediaType.name) === MediaType.PHOTO)
648c36cf2e9Sopenharmony_ci                  .key('Index_Checkbox_borderless')
649c36cf2e9Sopenharmony_ci                  .onChange((value: boolean) => {
650c36cf2e9Sopenharmony_ci                    if (value) {
651c36cf2e9Sopenharmony_ci                      this.showToast($r('app.string.borderless_enable_toast'))
652c36cf2e9Sopenharmony_ci                    }
653c36cf2e9Sopenharmony_ci                    this.isBorderless = value
654c36cf2e9Sopenharmony_ci                  })
655c36cf2e9Sopenharmony_ci              }
656c36cf2e9Sopenharmony_ci              .onClick(() => {
657c36cf2e9Sopenharmony_ci                if (SelectionModel.getSelectionValue<number>(this.currentMediaType.name) !== MediaType.PHOTO) {
658c36cf2e9Sopenharmony_ci                  this.showToast($r('app.string.borderless_type_toast'))
659c36cf2e9Sopenharmony_ci                }
660c36cf2e9Sopenharmony_ci              })
661c36cf2e9Sopenharmony_ci              Text($r('app.string.index_borderless'))
662c36cf2e9Sopenharmony_ci                .fontSize($r('app.float.font_size_body2'))
663c36cf2e9Sopenharmony_ci                .width($r('app.float.text_borderless_width'))
664c36cf2e9Sopenharmony_ci                .opacity(SelectionModel.getSelectionValue<number>(this.currentMediaType.name) === MediaType.PHOTO ? Constants.NUMBER_1 : $r('app.float.disable_opacity'))
665c36cf2e9Sopenharmony_ci                .key('Index_Text_borderless')
666c36cf2e9Sopenharmony_ci            }
667c36cf2e9Sopenharmony_ci            .visibility(!this.isPhotoEnabled? Visibility.None : Visibility.Visible)
668c36cf2e9Sopenharmony_ci            .height($r('app.float.params_row_height'))
669c36cf2e9Sopenharmony_ci            .width($r('app.float.params_row_width'))
670c36cf2e9Sopenharmony_ci
671c36cf2e9Sopenharmony_ci            QualitySelection()
672c36cf2e9Sopenharmony_ci            DuplexSelection().visibility(this.isDuplexEnabled ? Visibility.Visible : Visibility.None)
673c36cf2e9Sopenharmony_ci          }
674c36cf2e9Sopenharmony_ci          .alignItems(HorizontalAlign.Start)
675c36cf2e9Sopenharmony_ci          .justifyContent(FlexAlign.Start)
676c36cf2e9Sopenharmony_ci          .margin({ top: $r('app.float.print_setting_padding_top')
677c36cf2e9Sopenharmony_ci          , bottom: $r('app.float.print_setting_padding_bottom')
678c36cf2e9Sopenharmony_ci          })
679c36cf2e9Sopenharmony_ci
680c36cf2e9Sopenharmony_ci        }
681c36cf2e9Sopenharmony_ci        // .height($r('app.float.print_setting_height'))
682c36cf2e9Sopenharmony_ci        .height(this.printParamCompHeight-73)
683c36cf2e9Sopenharmony_ci        .width($r('app.float.print_setting_width'))
684c36cf2e9Sopenharmony_ci        .margin({left:24,right:24})
685c36cf2e9Sopenharmony_ci        .scrollable(ScrollDirection.Vertical)  // 滚动方向纵向
686c36cf2e9Sopenharmony_ci        .scrollBar(BarState.Off)
687c36cf2e9Sopenharmony_ci        .edgeEffect(EdgeEffect.None)
688c36cf2e9Sopenharmony_ci        .align(Alignment.Top)
689c36cf2e9Sopenharmony_ci        .enabled(!this.isGlobalDisable)
690c36cf2e9Sopenharmony_ci        .opacity(this.isGlobalDisable?0.4:1)
691c36cf2e9Sopenharmony_ci
692c36cf2e9Sopenharmony_ci        Column().height(12)
693c36cf2e9Sopenharmony_ci        Divider()
694c36cf2e9Sopenharmony_ci          .width($r('app.float.print_setting_width'))
695c36cf2e9Sopenharmony_ci          .strokeWidth(Constants.NUMBER_1)
696c36cf2e9Sopenharmony_ci          .color($r('app.color.black'))
697c36cf2e9Sopenharmony_ci          .opacity($r('app.float.divider_opacity'))
698c36cf2e9Sopenharmony_ci          .key('Index_Divider')
699c36cf2e9Sopenharmony_ci        Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.End, alignItems: ItemAlign.Center }) {
700c36cf2e9Sopenharmony_ci          AboutPageComponent().margin({left:24,right:152})
701c36cf2e9Sopenharmony_ci          CancelButton({
702c36cf2e9Sopenharmony_ci            cancelLabel: $r('app.string.Cancel'),
703c36cf2e9Sopenharmony_ci            cancelWidth: $r('app.float.button_index_width'),
704c36cf2e9Sopenharmony_ci            cancelHeight: $r('app.float.button_index_height'),
705c36cf2e9Sopenharmony_ci            cancelClick: () => {
706c36cf2e9Sopenharmony_ci              this.session?.terminateSelf().then(() => {
707c36cf2e9Sopenharmony_ci                console.info('===>terminateSelfCallBack===>: ');
708c36cf2e9Sopenharmony_ci              });
709c36cf2e9Sopenharmony_ci            }
710c36cf2e9Sopenharmony_ci          })
711c36cf2e9Sopenharmony_ci            .key('Index_Button_cancel')
712c36cf2e9Sopenharmony_ci            .margin({ right: $r('app.float.button_index_cancel_margin_right') })
713c36cf2e9Sopenharmony_ci
714c36cf2e9Sopenharmony_ci          Button($r('app.string.Index_doPrint'))
715c36cf2e9Sopenharmony_ci            .key('Index_Button_doPrint')
716c36cf2e9Sopenharmony_ci            .width($r('app.float.button_index_width'))
717c36cf2e9Sopenharmony_ci            .height($r('app.float.button_index_height'))
718c36cf2e9Sopenharmony_ci            .margin({ right: $r('app.float.button_index_doPrint_margin_right') })
719c36cf2e9Sopenharmony_ci            .enabled(this.canPrint && this.printButtonFlag && !this.isCusRangeError && !this.isGlobalDisable)
720c36cf2e9Sopenharmony_ci            .fontColor($r('app.color.white'))
721c36cf2e9Sopenharmony_ci            .onClick(() => {
722c36cf2e9Sopenharmony_ci              this.getJobDescription()
723c36cf2e9Sopenharmony_ci              this.startPrint()
724c36cf2e9Sopenharmony_ci            })
725c36cf2e9Sopenharmony_ci        }
726c36cf2e9Sopenharmony_ci        .margin({
727c36cf2e9Sopenharmony_ci          top: $r('app.float.print_setting_margin_top'),
728c36cf2e9Sopenharmony_ci          bottom: $r('app.float.print_setting_margin_bottom')
729c36cf2e9Sopenharmony_ci        })
730c36cf2e9Sopenharmony_ci      }.width($r('app.float.print_setting_width'))
731c36cf2e9Sopenharmony_ci    }
732c36cf2e9Sopenharmony_ci    .padding({ top: 32, bottom: 32 })
733c36cf2e9Sopenharmony_ci    .backgroundColor($r('sys.color.ohos_id_color_panel_bg'))
734c36cf2e9Sopenharmony_ci    .onTouch((event:TouchEvent)=>{
735c36cf2e9Sopenharmony_ci      if (event.type === TouchType.Down) {
736c36cf2e9Sopenharmony_ci        Log.info(TAG,'requestFocus')
737c36cf2e9Sopenharmony_ci        focusControl.requestFocus('Index_Text_copies')
738c36cf2e9Sopenharmony_ci      }
739c36cf2e9Sopenharmony_ci    })
740c36cf2e9Sopenharmony_ci  }
741c36cf2e9Sopenharmony_ci
742c36cf2e9Sopenharmony_ci  public getPlusImage(mouseState: number,isEnabled :boolean): Resource {
743c36cf2e9Sopenharmony_ci    if (!isEnabled){
744c36cf2e9Sopenharmony_ci      return $r('app.media.ic_plus_disabled');
745c36cf2e9Sopenharmony_ci    }
746c36cf2e9Sopenharmony_ci    switch (mouseState) {
747c36cf2e9Sopenharmony_ci      case MouseState.PRESS:
748c36cf2e9Sopenharmony_ci        return $r('app.media.ic_plusPress');
749c36cf2e9Sopenharmony_ci      case MouseState.HOVER:
750c36cf2e9Sopenharmony_ci        return $r('app.media.ic_plusHover');
751c36cf2e9Sopenharmony_ci      default:
752c36cf2e9Sopenharmony_ci        return $r('app.media.ic_plus');
753c36cf2e9Sopenharmony_ci    }
754c36cf2e9Sopenharmony_ci  }
755c36cf2e9Sopenharmony_ci
756c36cf2e9Sopenharmony_ci  public getMinusImage(mouseState: number,isEnabled :boolean): Resource {
757c36cf2e9Sopenharmony_ci    if (!isEnabled){
758c36cf2e9Sopenharmony_ci      return $r('app.media.ic_minus_disabled');
759c36cf2e9Sopenharmony_ci    }
760c36cf2e9Sopenharmony_ci    switch (mouseState) {
761c36cf2e9Sopenharmony_ci      case MouseState.PRESS:
762c36cf2e9Sopenharmony_ci        return $r('app.media.ic_minusPress');
763c36cf2e9Sopenharmony_ci      case MouseState.HOVER:
764c36cf2e9Sopenharmony_ci        return $r('app.media.ic_minusHover');
765c36cf2e9Sopenharmony_ci      default:
766c36cf2e9Sopenharmony_ci        return $r('app.media.ic_minus');
767c36cf2e9Sopenharmony_ci    }
768c36cf2e9Sopenharmony_ci  }
769c36cf2e9Sopenharmony_ci
770c36cf2e9Sopenharmony_ci  aboutToAppear() {
771c36cf2e9Sopenharmony_ci    Log.info(TAG, 'aboutToAppear')
772c36cf2e9Sopenharmony_ci    this.getWant()
773c36cf2e9Sopenharmony_ci    this.loadImageSources();
774c36cf2e9Sopenharmony_ci    this.setSelect();
775c36cf2e9Sopenharmony_ci    this.initParams();
776c36cf2e9Sopenharmony_ci    this.bindService();
777c36cf2e9Sopenharmony_ci    this.recordLastUsedPrinter();
778c36cf2e9Sopenharmony_ci    this.preDiscovery();
779c36cf2e9Sopenharmony_ci    this.checkWlan();
780c36cf2e9Sopenharmony_ci    this.subscribe();
781c36cf2e9Sopenharmony_ci  }
782c36cf2e9Sopenharmony_ci
783c36cf2e9Sopenharmony_ci  aboutToDisappear() {
784c36cf2e9Sopenharmony_ci    this.unsubscribe()
785c36cf2e9Sopenharmony_ci    this.abilityContext = undefined
786c36cf2e9Sopenharmony_ci    clearInterval(this.ConnectTimer)
787c36cf2e9Sopenharmony_ci    this.releaseResource();
788c36cf2e9Sopenharmony_ci  }
789c36cf2e9Sopenharmony_ci
790c36cf2e9Sopenharmony_ci  releaseResource() {
791c36cf2e9Sopenharmony_ci    Log.info(TAG, 'start release resource');
792c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmptyArr<FileModel>(this.imageSources)) {
793c36cf2e9Sopenharmony_ci      return;
794c36cf2e9Sopenharmony_ci    }
795c36cf2e9Sopenharmony_ci    for (let imageModel of this.imageSources) {
796c36cf2e9Sopenharmony_ci      imageModel.imageSource.release();
797c36cf2e9Sopenharmony_ci    }
798c36cf2e9Sopenharmony_ci  }
799c36cf2e9Sopenharmony_ci
800c36cf2e9Sopenharmony_ci  showToast(message: Resource) {
801c36cf2e9Sopenharmony_ci    try {
802c36cf2e9Sopenharmony_ci      promptAction.showToast({
803c36cf2e9Sopenharmony_ci        message: message,
804c36cf2e9Sopenharmony_ci        duration: Constants.TOAST_INTERVAL,
805c36cf2e9Sopenharmony_ci        bottom: Constants.TOAST_BOTTOM
806c36cf2e9Sopenharmony_ci      });
807c36cf2e9Sopenharmony_ci    } catch (error) {
808c36cf2e9Sopenharmony_ci      Log.error(TAG, `showToast args error code is ${error.code}, message is ${error.message}`);
809c36cf2e9Sopenharmony_ci    }
810c36cf2e9Sopenharmony_ci    ;
811c36cf2e9Sopenharmony_ci  }
812c36cf2e9Sopenharmony_ci
813c36cf2e9Sopenharmony_ci  private getWant() {
814c36cf2e9Sopenharmony_ci    this.abilityContext = GlobalThisHelper.getValue<common.UIExtensionContext>(GlobalThisStorageKey.KEY_MAIN_ABILITY_CONTEXT)
815c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmpty<LocalStorage>(storage)) {
816c36cf2e9Sopenharmony_ci      storage = router.getParams() as LocalStorage;
817c36cf2e9Sopenharmony_ci    }
818c36cf2e9Sopenharmony_ci    this.jobId = storage.get<string>(Constants.WANT_JOB_ID_KEY)!;
819c36cf2e9Sopenharmony_ci    this.jobFileList = storage.get<Array<string>>(Constants.WANT_FILE_LIST_KEY)!;
820c36cf2e9Sopenharmony_ci    this.session = storage.get<UIExtensionContentSession>(Constants.SESSION);
821c36cf2e9Sopenharmony_ci    Log.debug(TAG, 'aboutToAppear jobId: ' + JSON.stringify(this.jobId) + ', fileList: ' + JSON.stringify(this.jobFileList));
822c36cf2e9Sopenharmony_ci  }
823c36cf2e9Sopenharmony_ci
824c36cf2e9Sopenharmony_ci  private subscribe() {
825c36cf2e9Sopenharmony_ci
826c36cf2e9Sopenharmony_ci    let innerEventState: emitter.InnerEvent = { eventId: AppCommonEvent.PRINTER_STATE_CHANGE_EVENT }
827c36cf2e9Sopenharmony_ci    emitter.on(innerEventState, (eventData) => {
828c36cf2e9Sopenharmony_ci      let printers = AppStorage.get<Array<PrinterInfo>>(AppStorageKeyName.PRINTER_QUEUE_NAME)
829c36cf2e9Sopenharmony_ci
830c36cf2e9Sopenharmony_ci      if (this.printer === undefined || printers === undefined) {
831c36cf2e9Sopenharmony_ci        Log.error(TAG, 'emitter callback this printer is null or printers is null, return');
832c36cf2e9Sopenharmony_ci        return
833c36cf2e9Sopenharmony_ci      }
834c36cf2e9Sopenharmony_ci      Log.info(TAG, 'emitter PRINTER_STATE_CHANGE_EVENT callback this.printer: '
835c36cf2e9Sopenharmony_ci      + StringUtil.encodeCommonString(this.printer.printerName));
836c36cf2e9Sopenharmony_ci      for (let index = 0; index < printers.length; index++) {
837c36cf2e9Sopenharmony_ci        if (printers[index].printerId === this.printer.printerId) {
838c36cf2e9Sopenharmony_ci          this.checkPrinterConnection(printers[index].printerState)
839c36cf2e9Sopenharmony_ci        }
840c36cf2e9Sopenharmony_ci      }
841c36cf2e9Sopenharmony_ci    })
842c36cf2e9Sopenharmony_ci
843c36cf2e9Sopenharmony_ci    let innerEventCap: emitter.InnerEvent = { eventId: AppCommonEvent.PRINTER_UPDATE_CAPABILITY_EVENT }
844c36cf2e9Sopenharmony_ci    emitter.on(innerEventCap, (eventData) => {
845c36cf2e9Sopenharmony_ci      let printers = AppStorage.get<Array<PrinterInfo>>(AppStorageKeyName.PRINTER_QUEUE_NAME);
846c36cf2e9Sopenharmony_ci      if (this.printer === undefined || this.printer === null) {
847c36cf2e9Sopenharmony_ci        Log.error(TAG, 'printer is undefined');
848c36cf2e9Sopenharmony_ci        return;
849c36cf2e9Sopenharmony_ci      }
850c36cf2e9Sopenharmony_ci      Log.error(TAG, 'emitter PRINTER_UPDATE_CAPABILITY_EVENT callback this.printer: ' + StringUtil.encodeCommonString(this.printer.printerName));
851c36cf2e9Sopenharmony_ci      if (printers === undefined) {
852c36cf2e9Sopenharmony_ci        Log.error(TAG, 'emitter callback printers is null, return');
853c36cf2e9Sopenharmony_ci        return
854c36cf2e9Sopenharmony_ci      }
855c36cf2e9Sopenharmony_ci      for (let index = 0; index < printers.length; index++) {
856c36cf2e9Sopenharmony_ci        if (printers[index].printerId === this.printer.printerId) {
857c36cf2e9Sopenharmony_ci          clearInterval(this.ConnectTimer)
858c36cf2e9Sopenharmony_ci          this.connectConfirmDialogCtl.close()
859c36cf2e9Sopenharmony_ci          this.printer.capability = printers[index].capability
860c36cf2e9Sopenharmony_ci          this.printer.options = printers[index].options
861c36cf2e9Sopenharmony_ci          this.printer.description = printers[index].description
862c36cf2e9Sopenharmony_ci          Log.info(TAG, 'this.printer.capability update: ', JSON.stringify(this.printer.capability))
863c36cf2e9Sopenharmony_ci          this.updateSupportParam(printers[index])
864c36cf2e9Sopenharmony_ci        }
865c36cf2e9Sopenharmony_ci      }
866c36cf2e9Sopenharmony_ci    })
867c36cf2e9Sopenharmony_ci
868c36cf2e9Sopenharmony_ci    let inactiveWlanEvent: emitter.InnerEvent = { eventId: AppCommonEvent.WLAN_INACTIVE_EVENT }
869c36cf2e9Sopenharmony_ci    emitter.on(inactiveWlanEvent, (eventData) => {
870c36cf2e9Sopenharmony_ci      Log.info(TAG, 'WLAN_INACTIVE_EVENT')
871c36cf2e9Sopenharmony_ci      this.isNeedListenWlan = true
872c36cf2e9Sopenharmony_ci      let isPrinterSelectDialogOpen = GlobalThisHelper.getValue<boolean>(GlobalThisStorageKey.KEY_PRINTER_SELECT_DIALOG_OPEN);
873c36cf2e9Sopenharmony_ci      Log.info(TAG, 'isPrinterSelectDialogOpen: ' + isPrinterSelectDialogOpen)
874c36cf2e9Sopenharmony_ci      if (isPrinterSelectDialogOpen) {
875c36cf2e9Sopenharmony_ci        this.PrintingSelectDialogCtl.close()
876c36cf2e9Sopenharmony_ci        GlobalThisHelper.createValue<boolean>(false, GlobalThisStorageKey.KEY_PRINTER_SELECT_DIALOG_OPEN, true);
877c36cf2e9Sopenharmony_ci        this.WLANConfirmDialogCtl.open()
878c36cf2e9Sopenharmony_ci      }
879c36cf2e9Sopenharmony_ci    })
880c36cf2e9Sopenharmony_ci
881c36cf2e9Sopenharmony_ci    let activeWlanEvent: emitter.InnerEvent = { eventId: AppCommonEvent.WLAN_ACTIVE_EVENT }
882c36cf2e9Sopenharmony_ci    emitter.on(activeWlanEvent, (eventData) => {
883c36cf2e9Sopenharmony_ci      Log.info(TAG, 'WLAN_ACTIVE_EVENT')
884c36cf2e9Sopenharmony_ci      if (this.isNeedListenWlan) {
885c36cf2e9Sopenharmony_ci        this.isNeedListenWlan = false
886c36cf2e9Sopenharmony_ci        this.adapter?.getPrinterDiscCtl()?.startDiscovery(Constants.STRING_NONE, [])
887c36cf2e9Sopenharmony_ci      }
888c36cf2e9Sopenharmony_ci
889c36cf2e9Sopenharmony_ci    })
890c36cf2e9Sopenharmony_ci
891c36cf2e9Sopenharmony_ci    let innerEventPrinter: emitter.InnerEvent = { eventId: AppCommonEvent.ADD_PRINTER_EVENT }
892c36cf2e9Sopenharmony_ci    emitter.on(innerEventPrinter, (eventData) => {
893c36cf2e9Sopenharmony_ci      if (!this.firstPrinterDiscoveredFlag){
894c36cf2e9Sopenharmony_ci        this.firstPrinterDiscoveredFlag = true;
895c36cf2e9Sopenharmony_ci      }
896c36cf2e9Sopenharmony_ci      if(this.isGlobalDisable){
897c36cf2e9Sopenharmony_ci        Log.info(TAG, 'last printer no need connecting');
898c36cf2e9Sopenharmony_ci        emitter.off(AppCommonEvent.ADD_PRINTER_EVENT);
899c36cf2e9Sopenharmony_ci        return;
900c36cf2e9Sopenharmony_ci      }
901c36cf2e9Sopenharmony_ci      if (CheckEmptyUtils.isEmpty(eventData) || CheckEmptyUtils.isEmpty(eventData.data)) {
902c36cf2e9Sopenharmony_ci        Log.error(TAG, 'add_printer info is empty.');
903c36cf2e9Sopenharmony_ci        return;
904c36cf2e9Sopenharmony_ci      }
905c36cf2e9Sopenharmony_ci      let printerJSON: string = eventData!.data!.printer
906c36cf2e9Sopenharmony_ci      let printer: PrinterInfo = JSON.parse(printerJSON)
907c36cf2e9Sopenharmony_ci      Log.info(TAG, 'ADD_PRINTER_EVENT')
908c36cf2e9Sopenharmony_ci      if (printer.printerId === this.usedPrinterId) {
909c36cf2e9Sopenharmony_ci        Log.info(TAG, 'last printer is connecting');
910c36cf2e9Sopenharmony_ci        this.printer = printer;
911c36cf2e9Sopenharmony_ci        this.adapter?.getPrinterDiscCtl()?.connectPrinter(printer)
912c36cf2e9Sopenharmony_ci        emitter.off(AppCommonEvent.ADD_PRINTER_EVENT)
913c36cf2e9Sopenharmony_ci      }
914c36cf2e9Sopenharmony_ci
915c36cf2e9Sopenharmony_ci    })
916c36cf2e9Sopenharmony_ci
917c36cf2e9Sopenharmony_ci
918c36cf2e9Sopenharmony_ci    print.on('extInfoChange', (extensionId: string, info: string) => {
919c36cf2e9Sopenharmony_ci      let extInfo: ErrorMessage = JSON.parse(info)
920c36cf2e9Sopenharmony_ci      Log.info(TAG, 'extInfoChange: ', info)
921c36cf2e9Sopenharmony_ci      if (CheckEmptyUtils.isEmpty(this.printer)){
922c36cf2e9Sopenharmony_ci        Log.info(TAG, 'invalid printer!')
923c36cf2e9Sopenharmony_ci        return;
924c36cf2e9Sopenharmony_ci      }
925c36cf2e9Sopenharmony_ci      switch (extInfo.code){
926c36cf2e9Sopenharmony_ci        case ErrorCode.IPP_CONNECT_ERROR:
927c36cf2e9Sopenharmony_ci          this.connectionFailed();
928c36cf2e9Sopenharmony_ci          break;
929c36cf2e9Sopenharmony_ci        case ErrorCode.GET_CAPS_ERROR:
930c36cf2e9Sopenharmony_ci          this.adapter?.getPrinterDiscCtl()?.queryPrinterCapability(this.printer!.printerId);
931c36cf2e9Sopenharmony_ci          break;
932c36cf2e9Sopenharmony_ci        case ErrorCode.CONNECTION_POP:
933c36cf2e9Sopenharmony_ci          if (this.printer!.printerId !== this.usedPrinterId){
934c36cf2e9Sopenharmony_ci            this.connectFlag = !this.connectFlag
935c36cf2e9Sopenharmony_ci          }
936c36cf2e9Sopenharmony_ci        default:
937c36cf2e9Sopenharmony_ci          break;
938c36cf2e9Sopenharmony_ci      }
939c36cf2e9Sopenharmony_ci    })
940c36cf2e9Sopenharmony_ci  }
941c36cf2e9Sopenharmony_ci
942c36cf2e9Sopenharmony_ci  private unsubscribe() {
943c36cf2e9Sopenharmony_ci    emitter.off(AppCommonEvent.PRINTER_STATE_CHANGE_EVENT)
944c36cf2e9Sopenharmony_ci    emitter.off(AppCommonEvent.PRINTER_UPDATE_CAPABILITY_EVENT)
945c36cf2e9Sopenharmony_ci    emitter.off(AppCommonEvent.WLAN_INACTIVE_EVENT)
946c36cf2e9Sopenharmony_ci
947c36cf2e9Sopenharmony_ci    print.off('extInfoChange')
948c36cf2e9Sopenharmony_ci  }
949c36cf2e9Sopenharmony_ci
950c36cf2e9Sopenharmony_ci  preDiscovery() {
951c36cf2e9Sopenharmony_ci    this.adapter?.getPrinterDiscCtl()?.startDiscovery(Constants.STRING_NONE, [])
952c36cf2e9Sopenharmony_ci  }
953c36cf2e9Sopenharmony_ci
954c36cf2e9Sopenharmony_ci  checkWlan(){
955c36cf2e9Sopenharmony_ci    if (!WifiP2pHelper.checkWifiActive()) {
956c36cf2e9Sopenharmony_ci      Log.info(TAG,'checkWlan: inactive')
957c36cf2e9Sopenharmony_ci      this.isNeedListenWlan = true;
958c36cf2e9Sopenharmony_ci    }
959c36cf2e9Sopenharmony_ci  }
960c36cf2e9Sopenharmony_ci
961c36cf2e9Sopenharmony_ci  bindService() {
962c36cf2e9Sopenharmony_ci    this.adapter = PrintAdapter.getInstance();
963c36cf2e9Sopenharmony_ci  }
964c36cf2e9Sopenharmony_ci
965c36cf2e9Sopenharmony_ci  setSelectDefault(disconnectFlag: boolean) {
966c36cf2e9Sopenharmony_ci    if (this.printer === undefined || disconnectFlag) {
967c36cf2e9Sopenharmony_ci      Log.info(TAG, 'setSelectDefault')
968c36cf2e9Sopenharmony_ci      this.currentPrinterSelection = SelectionModel.NO_Printer
969c36cf2e9Sopenharmony_ci      this.printerSelectArray = []
970c36cf2e9Sopenharmony_ci      this.printerSelectArray.push(SelectionModel.Add_Printer)
971c36cf2e9Sopenharmony_ci    }
972c36cf2e9Sopenharmony_ci  }
973c36cf2e9Sopenharmony_ci
974c36cf2e9Sopenharmony_ci  initParams() {
975c36cf2e9Sopenharmony_ci    this.printButtonFlag = true
976c36cf2e9Sopenharmony_ci    this.printerPageSize = MediaSizeUtil.mediaSizeToPageSize(SelectionModel.getSelectionValue<MediaSize>(SelectionModel.MediaSize_ISO_A4.name))
977c36cf2e9Sopenharmony_ci  }
978c36cf2e9Sopenharmony_ci
979c36cf2e9Sopenharmony_ci  setSelect() {
980c36cf2e9Sopenharmony_ci    SelectionModel.initSelectionMap();
981c36cf2e9Sopenharmony_ci    this.setSelectDefault(false);
982c36cf2e9Sopenharmony_ci    this.setMediaSizesSelect();
983c36cf2e9Sopenharmony_ci    this.setDirectionSelect();
984c36cf2e9Sopenharmony_ci    this.setMediaTypeSelect();
985c36cf2e9Sopenharmony_ci    this.setPrintQualitySelect();
986c36cf2e9Sopenharmony_ci    this.setDuplexSelect();
987c36cf2e9Sopenharmony_ci  }
988c36cf2e9Sopenharmony_ci
989c36cf2e9Sopenharmony_ci  updatePrintRange() {
990c36cf2e9Sopenharmony_ci    Log.info(TAG, 'updatePrintRange'+ this.startPage+' '+this.endPage)
991c36cf2e9Sopenharmony_ci    this.printRange = []
992c36cf2e9Sopenharmony_ci    switch (this.printRangeType) {
993c36cf2e9Sopenharmony_ci      case PrintRangeType.ALL:
994c36cf2e9Sopenharmony_ci        for (let num = 1; num <= this.totalPage; ) {
995c36cf2e9Sopenharmony_ci          this.printRange.push(num)
996c36cf2e9Sopenharmony_ci          num++
997c36cf2e9Sopenharmony_ci        }
998c36cf2e9Sopenharmony_ci        break;
999c36cf2e9Sopenharmony_ci      case PrintRangeType.RANGE:
1000c36cf2e9Sopenharmony_ci        for (let num = this.startPage; num <= this.endPage; ) {
1001c36cf2e9Sopenharmony_ci          this.printRange.push(num)
1002c36cf2e9Sopenharmony_ci          num++
1003c36cf2e9Sopenharmony_ci        }
1004c36cf2e9Sopenharmony_ci        break;
1005c36cf2e9Sopenharmony_ci      case PrintRangeType.CUSTOM:
1006c36cf2e9Sopenharmony_ci        this.printRange = CopyUtil.deepClone(this.cusRangeArr)
1007c36cf2e9Sopenharmony_ci        Log.info(TAG,'updatePrintRange CUSTOM  this.printRange ',JSON.stringify(this.printRange))
1008c36cf2e9Sopenharmony_ci        break;
1009c36cf2e9Sopenharmony_ci      default:
1010c36cf2e9Sopenharmony_ci        break;
1011c36cf2e9Sopenharmony_ci    }
1012c36cf2e9Sopenharmony_ci
1013c36cf2e9Sopenharmony_ci    if (this.printRange.length === 0){
1014c36cf2e9Sopenharmony_ci      if (this.allPages != undefined) {
1015c36cf2e9Sopenharmony_ci        this.printRange = CopyUtil.deepClone(this.allPages)
1016c36cf2e9Sopenharmony_ci      }else{
1017c36cf2e9Sopenharmony_ci        for (let num = 1; num <= this.totalPage; ) {
1018c36cf2e9Sopenharmony_ci          this.printRange.push(num)
1019c36cf2e9Sopenharmony_ci          num++
1020c36cf2e9Sopenharmony_ci        }
1021c36cf2e9Sopenharmony_ci      }
1022c36cf2e9Sopenharmony_ci    }
1023c36cf2e9Sopenharmony_ci    this.imageCount = this.printRange.length
1024c36cf2e9Sopenharmony_ci    this.needDuplex = this.imageCount>1?true:false
1025c36cf2e9Sopenharmony_ci  }
1026c36cf2e9Sopenharmony_ci
1027c36cf2e9Sopenharmony_ci  updateMediaSize() {
1028c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmpty(this.currentMediaSize)) {
1029c36cf2e9Sopenharmony_ci      return
1030c36cf2e9Sopenharmony_ci    }
1031c36cf2e9Sopenharmony_ci    if (!CheckEmptyUtils.isEmpty(SelectionModel.getSelectionValue<MediaSize>(this.currentMediaSize.name))) {
1032c36cf2e9Sopenharmony_ci      this.mediaSize = SelectionModel.getSelectionValue<MediaSize>(this.currentMediaSize.name)!;
1033c36cf2e9Sopenharmony_ci      Log.info(TAG, 'updateMediaSize:MediaSize = ' + JSON.stringify(this.mediaSize))
1034c36cf2e9Sopenharmony_ci      this.printerPageSize = MediaSizeUtil.mediaSizeToPageSize(this.mediaSize)
1035c36cf2e9Sopenharmony_ci    }
1036c36cf2e9Sopenharmony_ci    Log.info(TAG, 'afterUpdateMediaSize: ' + this.printerPageSize?.name)
1037c36cf2e9Sopenharmony_ci  }
1038c36cf2e9Sopenharmony_ci
1039c36cf2e9Sopenharmony_ci  updateMediaType() {
1040c36cf2e9Sopenharmony_ci    if (this.printer !== undefined) {
1041c36cf2e9Sopenharmony_ci      let isBSH = this.isBiSheng(this.printer.printerName)
1042c36cf2e9Sopenharmony_ci      if (isBSH) {
1043c36cf2e9Sopenharmony_ci        this.mediaSizeList = MediaSizeUtil.getDefaultMediaSizeByMediaType(SelectionModel.getSelectionValue<number>(this.currentMediaType.name)!);
1044c36cf2e9Sopenharmony_ci      }
1045c36cf2e9Sopenharmony_ci      this.setMediaSizesSelect()
1046c36cf2e9Sopenharmony_ci    }
1047c36cf2e9Sopenharmony_ci    this.setPrintQualitySelect()
1048c36cf2e9Sopenharmony_ci    if (this.currentMediaType.name === SelectionModel.MediaType_NORMAL.name) {
1049c36cf2e9Sopenharmony_ci      Log.info(TAG,'this.isBorderless = false')
1050c36cf2e9Sopenharmony_ci      this.isBorderless = false
1051c36cf2e9Sopenharmony_ci    }
1052c36cf2e9Sopenharmony_ci  }
1053c36cf2e9Sopenharmony_ci
1054c36cf2e9Sopenharmony_ci  updateDirection() {
1055c36cf2e9Sopenharmony_ci    this.pageDirection = SelectionModel.getSelectionValue<number>(this.currentMediaType.name)!;
1056c36cf2e9Sopenharmony_ci  }
1057c36cf2e9Sopenharmony_ci
1058c36cf2e9Sopenharmony_ci  /**
1059c36cf2e9Sopenharmony_ci   * 更新打印机能力支持的参数
1060c36cf2e9Sopenharmony_ci   *
1061c36cf2e9Sopenharmony_ci   * @param cap
1062c36cf2e9Sopenharmony_ci   */
1063c36cf2e9Sopenharmony_ci  updateSupportParam(printer: PrinterInfo) {
1064c36cf2e9Sopenharmony_ci    Log.info(TAG, 'updateSupportParam printer: ' + StringUtil.encodeCommonString(this.printer?.printerName));
1065c36cf2e9Sopenharmony_ci    let cap = printer.capability
1066c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmpty(cap)) {
1067c36cf2e9Sopenharmony_ci      return
1068c36cf2e9Sopenharmony_ci    }
1069c36cf2e9Sopenharmony_ci
1070c36cf2e9Sopenharmony_ci    if (cap!.colorMode === ColorCode.MONOCHROME) {
1071c36cf2e9Sopenharmony_ci      this.colorMode = ColorCode.MONOCHROME
1072c36cf2e9Sopenharmony_ci      this.isColored = false
1073c36cf2e9Sopenharmony_ci      this.isColorEnabled = false
1074c36cf2e9Sopenharmony_ci    }else{
1075c36cf2e9Sopenharmony_ci      this.isColorEnabled = true
1076c36cf2e9Sopenharmony_ci    }
1077c36cf2e9Sopenharmony_ci
1078c36cf2e9Sopenharmony_ci    if (cap!.duplexMode === Duplex.SINGLE) {
1079c36cf2e9Sopenharmony_ci      this.isDuplexEnabled = false;
1080c36cf2e9Sopenharmony_ci      this.currentDuplex = SelectionModel.DuplexMode_SINGLE;
1081c36cf2e9Sopenharmony_ci    } else {
1082c36cf2e9Sopenharmony_ci      this.isDuplexEnabled = true;
1083c36cf2e9Sopenharmony_ci    }
1084c36cf2e9Sopenharmony_ci    let isBSH = this.isBiSheng(printer.printerName)
1085c36cf2e9Sopenharmony_ci    if (isBSH) {
1086c36cf2e9Sopenharmony_ci      this.mediaSizeList = MediaSizeUtil.getDefaultMediaSizeByMediaType(SelectionModel.getSelectionValue<number>(this.currentMediaType.name)!);
1087c36cf2e9Sopenharmony_ci    } else {
1088c36cf2e9Sopenharmony_ci      this.mediaSizeList = new Array<MediaSize>()
1089c36cf2e9Sopenharmony_ci      for (let index = 0; index < cap!.pageSize.length; index++) {
1090c36cf2e9Sopenharmony_ci        this.mediaSizeList.push(MediaSizeUtil.pageSizeToMediaSize(cap!.pageSize[index]))
1091c36cf2e9Sopenharmony_ci      }
1092c36cf2e9Sopenharmony_ci    }
1093c36cf2e9Sopenharmony_ci    Log.debug(TAG,'printer.options:',printer.options)
1094c36cf2e9Sopenharmony_ci    let options: PrinterCapsOptions = JSON.parse(printer.options!);
1095c36cf2e9Sopenharmony_ci    if(!CheckEmptyUtils.isEmpty(options?.supportedMediaTypes)){
1096c36cf2e9Sopenharmony_ci      this.supportedMediaTypes = options?.supportedMediaTypes
1097c36cf2e9Sopenharmony_ci    }
1098c36cf2e9Sopenharmony_ci    Log.debug(TAG,'supportedMediaTypes:',JSON.stringify(this.supportedMediaTypes))
1099c36cf2e9Sopenharmony_ci    this.setMediaTypeSelect()
1100c36cf2e9Sopenharmony_ci    this.setMediaSizesSelect()
1101c36cf2e9Sopenharmony_ci    this.canPrint = true
1102c36cf2e9Sopenharmony_ci  }
1103c36cf2e9Sopenharmony_ci
1104c36cf2e9Sopenharmony_ci  updateImageSources(){
1105c36cf2e9Sopenharmony_ci    Log.info(TAG,'updateImageSources length = '+this.imageSources.length)
1106c36cf2e9Sopenharmony_ci    this.allPages = []
1107c36cf2e9Sopenharmony_ci    for (let num = 1; num <= this.imageSources.length; ) {
1108c36cf2e9Sopenharmony_ci      this.allPages.push(num)
1109c36cf2e9Sopenharmony_ci      num++
1110c36cf2e9Sopenharmony_ci    }
1111c36cf2e9Sopenharmony_ci  }
1112c36cf2e9Sopenharmony_ci
1113c36cf2e9Sopenharmony_ci  isBiSheng(printerName: string): boolean {
1114c36cf2e9Sopenharmony_ci    Log.info(TAG, 'isBiSheng:', StringUtil.encodeCommonString(printerName));
1115c36cf2e9Sopenharmony_ci    return printerName.includes(BISHENG_PRINTER);
1116c36cf2e9Sopenharmony_ci  }
1117c36cf2e9Sopenharmony_ci
1118c36cf2e9Sopenharmony_ci  setMediaSizesSelect() {
1119c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmptyArr(this.mediaSizeList)) {
1120c36cf2e9Sopenharmony_ci      MediaSizeUtil.initMediaSizeArray(this.mediaSizeList);
1121c36cf2e9Sopenharmony_ci    }
1122c36cf2e9Sopenharmony_ci    Log.info(TAG, 'setMediaSizesSelect mediaSizeList.length:' + this.mediaSizeList.length);
1123c36cf2e9Sopenharmony_ci    this.mediaSizeSelectArray = new Array<SelectionModel>()
1124c36cf2e9Sopenharmony_ci    let isNeedResetMediaSize = true
1125c36cf2e9Sopenharmony_ci    this.mediaSizeList.forEach(mediaSize => {
1126c36cf2e9Sopenharmony_ci      if (this.currentMediaSize.res === mediaSize.label) {
1127c36cf2e9Sopenharmony_ci        isNeedResetMediaSize = false
1128c36cf2e9Sopenharmony_ci      }
1129c36cf2e9Sopenharmony_ci      let mediaSizeSelection = SelectionModel.getSelectionModelByLabel(mediaSize.label)!
1130c36cf2e9Sopenharmony_ci      if(!CheckEmptyUtils.isEmpty(mediaSizeSelection)){
1131c36cf2e9Sopenharmony_ci        this.mediaSizeSelectArray.push(mediaSizeSelection)
1132c36cf2e9Sopenharmony_ci      }
1133c36cf2e9Sopenharmony_ci    });
1134c36cf2e9Sopenharmony_ci    Log.info(TAG, 'this.mediaSizeSelectArray.length: ' + this.mediaSizeSelectArray.length)
1135c36cf2e9Sopenharmony_ci    if(isNeedResetMediaSize){
1136c36cf2e9Sopenharmony_ci      this.currentMediaSize = SelectionModel.MediaSize_ISO_A4;
1137c36cf2e9Sopenharmony_ci    }
1138c36cf2e9Sopenharmony_ci  }
1139c36cf2e9Sopenharmony_ci
1140c36cf2e9Sopenharmony_ci  setDirectionSelect() {
1141c36cf2e9Sopenharmony_ci    this.directionSelectArray = new Array<SelectionModel>()
1142c36cf2e9Sopenharmony_ci    this.directionSelectArray.push(SelectionModel.Direction_AUTO, SelectionModel.Direction_LANDSCAPE, SelectionModel.Direction_VERTICAL)
1143c36cf2e9Sopenharmony_ci  }
1144c36cf2e9Sopenharmony_ci
1145c36cf2e9Sopenharmony_ci  setMediaTypeSelect() {
1146c36cf2e9Sopenharmony_ci    this.mediaTypeSelectArray = new Array<SelectionModel>()
1147c36cf2e9Sopenharmony_ci    if(this.supportedMediaTypes.length === Constants.NUMBER_1){
1148c36cf2e9Sopenharmony_ci      this.isPhotoEnabled = false
1149c36cf2e9Sopenharmony_ci      this.mediaTypeSelectArray.push(SelectionModel.MediaType_NORMAL)
1150c36cf2e9Sopenharmony_ci      if (this.currentMediaType.name == SelectionModel.MediaType_PHOTO.name) {
1151c36cf2e9Sopenharmony_ci        this.currentMediaType = SelectionModel.MediaType_NORMAL
1152c36cf2e9Sopenharmony_ci      }
1153c36cf2e9Sopenharmony_ci    } else {
1154c36cf2e9Sopenharmony_ci      this.isPhotoEnabled = true
1155c36cf2e9Sopenharmony_ci      this.mediaTypeSelectArray.push(SelectionModel.MediaType_NORMAL, SelectionModel.MediaType_PHOTO)
1156c36cf2e9Sopenharmony_ci    }
1157c36cf2e9Sopenharmony_ci  }
1158c36cf2e9Sopenharmony_ci
1159c36cf2e9Sopenharmony_ci  setPrintQualitySelect() {
1160c36cf2e9Sopenharmony_ci    this.qualitySelectArray = new Array<SelectionModel>()
1161c36cf2e9Sopenharmony_ci    if (SelectionModel.getSelectionValue<number>(this.currentMediaType.name) === MediaType.NORMAL) {
1162c36cf2e9Sopenharmony_ci      this.qualitySelectArray.push(SelectionModel.PrintQuality_BEST, SelectionModel.PrintQuality_STANDARD, SelectionModel.PrintQuality_ECONOMY);
1163c36cf2e9Sopenharmony_ci    } else {
1164c36cf2e9Sopenharmony_ci      this.qualitySelectArray.push(SelectionModel.PrintQuality_BEST, SelectionModel.PrintQuality_STANDARD);
1165c36cf2e9Sopenharmony_ci      if (this.currentQuality = SelectionModel.PrintQuality_ECONOMY) {
1166c36cf2e9Sopenharmony_ci        this.currentQuality = SelectionModel.PrintQuality_STANDARD
1167c36cf2e9Sopenharmony_ci      }
1168c36cf2e9Sopenharmony_ci    }
1169c36cf2e9Sopenharmony_ci  }
1170c36cf2e9Sopenharmony_ci
1171c36cf2e9Sopenharmony_ci  setDuplexSelect() {
1172c36cf2e9Sopenharmony_ci    this.duplexSelectArray = new Array<SelectionModel>()
1173c36cf2e9Sopenharmony_ci    this.duplexSelectArray.push(SelectionModel.DuplexMode_SINGLE, SelectionModel.DuplexMode_LONG, SelectionModel.DuplexMode_SHORT)
1174c36cf2e9Sopenharmony_ci  }
1175c36cf2e9Sopenharmony_ci
1176c36cf2e9Sopenharmony_ci  isPrintRangeAll(): boolean {
1177c36cf2e9Sopenharmony_ci    Log.info(TAG,'startPage,endPage,totalPage'+this.startPage+' '+this.endPage+' '+this.totalPage )
1178c36cf2e9Sopenharmony_ci    if (this.startPage === 1 && (this.endPage === this.totalPage || this.totalPage === Constants.NUMBER_0)) {
1179c36cf2e9Sopenharmony_ci      return true;
1180c36cf2e9Sopenharmony_ci    } else {
1181c36cf2e9Sopenharmony_ci      return false;
1182c36cf2e9Sopenharmony_ci    }
1183c36cf2e9Sopenharmony_ci  }
1184c36cf2e9Sopenharmony_ci
1185c36cf2e9Sopenharmony_ci  /**
1186c36cf2e9Sopenharmony_ci   * 加载第三方应用传过来的图片信息
1187c36cf2e9Sopenharmony_ci   *
1188c36cf2e9Sopenharmony_ci   * @param name
1189c36cf2e9Sopenharmony_ci   */
1190c36cf2e9Sopenharmony_ci  async loadImageSources() {
1191c36cf2e9Sopenharmony_ci    Log.info(TAG, 'loadImageSources start')
1192c36cf2e9Sopenharmony_ci    if (this.jobFileList && this.jobFileList.length !== 0) {
1193c36cf2e9Sopenharmony_ci      this.fileNum = this.jobFileList.length;
1194c36cf2e9Sopenharmony_ci      this.imageSources = await FileUtil.initImageData(this.checkMaxPages(this.jobFileList));
1195c36cf2e9Sopenharmony_ci    } else {
1196c36cf2e9Sopenharmony_ci      await print.queryPrintJobById(this.jobId).then(async (printJob) => {
1197c36cf2e9Sopenharmony_ci        if (!CheckEmptyUtils.isEmpty(printJob) && !CheckEmptyUtils.isEmptyArr(printJob.fdList)) {
1198c36cf2e9Sopenharmony_ci          this.fileNum = printJob.fdList.length;
1199c36cf2e9Sopenharmony_ci          Log.debug(TAG, 'queryPrintJobById printJob: ', JSON.stringify(printJob));
1200c36cf2e9Sopenharmony_ci          this.imageSources = await FileUtil.initFdImageData(printJob.fdList);
1201c36cf2e9Sopenharmony_ci        }
1202c36cf2e9Sopenharmony_ci      })
1203c36cf2e9Sopenharmony_ci    }
1204c36cf2e9Sopenharmony_ci    Log.debug(TAG, "loadImageSources imageSources: ", JSON.stringify(this.imageSources))
1205c36cf2e9Sopenharmony_ci    this.totalPage = this.imageSources.length === 0 ? 1 : this.imageSources.length
1206c36cf2e9Sopenharmony_ci    this.imageCount = this.totalPage
1207c36cf2e9Sopenharmony_ci    this.rangeInputLimit = this.totalPage.toString().length
1208c36cf2e9Sopenharmony_ci    let errorCount: number = GlobalThisHelper.getValue<number>(GlobalThisStorageKey.KEY_IMAGE_ERROR_COUNT)
1209c36cf2e9Sopenharmony_ci    let errorName: string = GlobalThisHelper.getValue<string>(GlobalThisStorageKey.KEY_IMAGE_ERROR_NAME)
1210c36cf2e9Sopenharmony_ci    if (this.imageSources.length !== 0){
1211c36cf2e9Sopenharmony_ci      if (errorCount === 1) {
1212c36cf2e9Sopenharmony_ci        Log.info(TAG, "loadImageSources this.showToast ")
1213c36cf2e9Sopenharmony_ci        setTimeout(() => {//延迟弹窗,否则会概率弹窗失败
1214c36cf2e9Sopenharmony_ci          this.showToast($r('app.string.toast_preview_failed',errorName))
1215c36cf2e9Sopenharmony_ci        }, Constants.SHOW_TOAST_TIMEOUT);
1216c36cf2e9Sopenharmony_ci      } else if (errorCount > 1) {
1217c36cf2e9Sopenharmony_ci        setTimeout(() => {//延迟弹窗,否则会概率弹窗失败
1218c36cf2e9Sopenharmony_ci          this.showToast($r('app.string.toast_preview_failed_plurals',errorName,errorCount))
1219c36cf2e9Sopenharmony_ci        }, Constants.SHOW_TOAST_TIMEOUT);
1220c36cf2e9Sopenharmony_ci      }
1221c36cf2e9Sopenharmony_ci    }else{
1222c36cf2e9Sopenharmony_ci      this.isPreviewFailed = true;
1223c36cf2e9Sopenharmony_ci    }
1224c36cf2e9Sopenharmony_ci    this.endPage = this.totalPage
1225c36cf2e9Sopenharmony_ci    if (this.imageSources.length > Constants.MAX_PAGES) {//需要弹预览失败toast时不用弹100张限制的toast
1226c36cf2e9Sopenharmony_ci      this.isAbovePageLimit = true;
1227c36cf2e9Sopenharmony_ci      this.endPage = Constants.MAX_PAGES;
1228c36cf2e9Sopenharmony_ci    }
1229c36cf2e9Sopenharmony_ci    this.isGlobalDisable = this.imageSources.length === 0 ? true : false
1230c36cf2e9Sopenharmony_ci    this.endPageStr = this.endPage.toString()
1231c36cf2e9Sopenharmony_ci    this.updatePrintRange()
1232c36cf2e9Sopenharmony_ci
1233c36cf2e9Sopenharmony_ci
1234c36cf2e9Sopenharmony_ci  }
1235c36cf2e9Sopenharmony_ci
1236c36cf2e9Sopenharmony_ci  /**
1237c36cf2e9Sopenharmony_ci   * 记录上一次使用过的打印机
1238c36cf2e9Sopenharmony_ci   */
1239c36cf2e9Sopenharmony_ci  async recordLastUsedPrinter() {
1240c36cf2e9Sopenharmony_ci    let printerString = FileUtil.readStringFromFile(this.usedPrinterFileName, this.abilityContext)
1241c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.checkStrIsEmpty(printerString)) {
1242c36cf2e9Sopenharmony_ci      Log.error(TAG, 'lasted used printer is null');
1243c36cf2e9Sopenharmony_ci      return;
1244c36cf2e9Sopenharmony_ci    }
1245c36cf2e9Sopenharmony_ci    let printer: PrinterInfo = JSON.parse(printerString);
1246c36cf2e9Sopenharmony_ci    this.usedPrinterId = printer.printerId
1247c36cf2e9Sopenharmony_ci    Log.info(TAG, 'load last printer: ' + StringUtil.encodeCommonString(printer.printerName));
1248c36cf2e9Sopenharmony_ci  }
1249c36cf2e9Sopenharmony_ci
1250c36cf2e9Sopenharmony_ci  /**
1251c36cf2e9Sopenharmony_ci   * 保存成功连接并执行过打印的打印机
1252c36cf2e9Sopenharmony_ci   *
1253c36cf2e9Sopenharmony_ci   * @param printer 打印机信息
1254c36cf2e9Sopenharmony_ci   */
1255c36cf2e9Sopenharmony_ci  saveLastedUsedPrinter(printer: PrinterInfo | undefined) {
1256c36cf2e9Sopenharmony_ci    Log.info(TAG, 'saveLastedUsedPrinter printer: ' + StringUtil.encodeCommonString(printer?.printerName));
1257c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmpty(printer)) {
1258c36cf2e9Sopenharmony_ci      Log.error(TAG, 'printer is null')
1259c36cf2e9Sopenharmony_ci      return;
1260c36cf2e9Sopenharmony_ci    }
1261c36cf2e9Sopenharmony_ci    let printerString = JSON.stringify(printer!)
1262c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.checkStrIsEmpty(printerString)) {
1263c36cf2e9Sopenharmony_ci      Log.error(TAG, 'printer string is null')
1264c36cf2e9Sopenharmony_ci      return;
1265c36cf2e9Sopenharmony_ci    }
1266c36cf2e9Sopenharmony_ci    FileUtil.writeStringToFile(printerString, this.usedPrinterFileName, this.abilityContext);
1267c36cf2e9Sopenharmony_ci    Log.info(TAG, 'printer save success')
1268c36cf2e9Sopenharmony_ci  }
1269c36cf2e9Sopenharmony_ci
1270c36cf2e9Sopenharmony_ci  openPrinterSelectDialog() {
1271c36cf2e9Sopenharmony_ci    Log.info(TAG,'openPrinterSelectDialog printerSelectFlag : '+this.printerSelectFlag)
1272c36cf2e9Sopenharmony_ci    if (this.printerSelectFlag) {
1273c36cf2e9Sopenharmony_ci      this.printerSelectFlag = false
1274c36cf2e9Sopenharmony_ci      this.PrintingSelectDialogCtl.close();
1275c36cf2e9Sopenharmony_ci      this.PrintingSelectDialogCtl.open();
1276c36cf2e9Sopenharmony_ci    }
1277c36cf2e9Sopenharmony_ci  }
1278c36cf2e9Sopenharmony_ci
1279c36cf2e9Sopenharmony_ci  openWLANDialog() {
1280c36cf2e9Sopenharmony_ci    this.WLANConfirmDialogCtl.open()
1281c36cf2e9Sopenharmony_ci  }
1282c36cf2e9Sopenharmony_ci
1283c36cf2e9Sopenharmony_ci  connectAlarm() {
1284c36cf2e9Sopenharmony_ci    clearInterval(this.ConnectTimer)
1285c36cf2e9Sopenharmony_ci    this.connectConfirmDialogCtl.open()
1286c36cf2e9Sopenharmony_ci    this.connectCount = Constants.CONNECT_COUNT
1287c36cf2e9Sopenharmony_ci    this.ConnectTimer = setInterval(() => {
1288c36cf2e9Sopenharmony_ci      this.connectCountDown()
1289c36cf2e9Sopenharmony_ci    }, Constants.COUNTDOWN_INTERVAL);
1290c36cf2e9Sopenharmony_ci  }
1291c36cf2e9Sopenharmony_ci
1292c36cf2e9Sopenharmony_ci  connectCountDown() {
1293c36cf2e9Sopenharmony_ci    this.connectCount--
1294c36cf2e9Sopenharmony_ci    if (this.connectCount === Constants.COUNTDOWN_ALARM_TO_FAIL) {
1295c36cf2e9Sopenharmony_ci      this.connectConfirmDialogCtl.close()
1296c36cf2e9Sopenharmony_ci    } else if (this.connectCount === Constants.NUMBER_0 && !this.isConnected) {
1297c36cf2e9Sopenharmony_ci      this.connectionFailed()
1298c36cf2e9Sopenharmony_ci    }
1299c36cf2e9Sopenharmony_ci  }
1300c36cf2e9Sopenharmony_ci
1301c36cf2e9Sopenharmony_ci  onPrinterChange() {
1302c36cf2e9Sopenharmony_ci    if (this.printer !== undefined) {
1303c36cf2e9Sopenharmony_ci      this.currentPrinterSelection = new SelectionModel(this.printer.printerName, this.printer.printerName);
1304c36cf2e9Sopenharmony_ci      SelectionModel.createSelectionValue<PrinterInfo>(this.printer,this.printer.printerName);
1305c36cf2e9Sopenharmony_ci      Log.info(TAG, 'onPrinterChange printerName: ' + StringUtil.encodeCommonString(this.currentPrinterSelection.name));
1306c36cf2e9Sopenharmony_ci    }
1307c36cf2e9Sopenharmony_ci  }
1308c36cf2e9Sopenharmony_ci
1309c36cf2e9Sopenharmony_ci
1310c36cf2e9Sopenharmony_ci  /**
1311c36cf2e9Sopenharmony_ci   * 打印机状态发生变化时进行处理
1312c36cf2e9Sopenharmony_ci   *
1313c36cf2e9Sopenharmony_ci   * @param printerState 打印机状态
1314c36cf2e9Sopenharmony_ci   */
1315c36cf2e9Sopenharmony_ci  checkPrinterConnection(printerState: print.PrinterState) {
1316c36cf2e9Sopenharmony_ci    Log.error(TAG, 'checkPrinterConnection printerState: ' + JSON.stringify(printerState));
1317c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmpty(this.printer)) {
1318c36cf2e9Sopenharmony_ci      Log.error(TAG, 'checkPrinterConnection, invalid printer.');
1319c36cf2e9Sopenharmony_ci      return;
1320c36cf2e9Sopenharmony_ci    }
1321c36cf2e9Sopenharmony_ci    switch (printerState) {
1322c36cf2e9Sopenharmony_ci      case print.PrinterState.PRINTER_CONNECTED:
1323c36cf2e9Sopenharmony_ci        this.isConnected = true
1324c36cf2e9Sopenharmony_ci        this.connectingPrinterId = this.printer!.printerId;
1325c36cf2e9Sopenharmony_ci        clearInterval(this.ConnectTimer)
1326c36cf2e9Sopenharmony_ci        this.connectConfirmDialogCtl.close();
1327c36cf2e9Sopenharmony_ci        break;
1328c36cf2e9Sopenharmony_ci      case print.PrinterState.PRINTER_DISCONNECTED:
1329c36cf2e9Sopenharmony_ci        this.connectionFailed()
1330c36cf2e9Sopenharmony_ci        break;
1331c36cf2e9Sopenharmony_ci      default:
1332c36cf2e9Sopenharmony_ci        break;
1333c36cf2e9Sopenharmony_ci    }
1334c36cf2e9Sopenharmony_ci
1335c36cf2e9Sopenharmony_ci  }
1336c36cf2e9Sopenharmony_ci  /**
1337c36cf2e9Sopenharmony_ci   * 将渲染的图片保存
1338c36cf2e9Sopenharmony_ci   */
1339c36cf2e9Sopenharmony_ci  async saveImage(jobFiles: string[]): Promise<number[]> {
1340c36cf2e9Sopenharmony_ci    Log.info(TAG, 'enter saveImage')
1341c36cf2e9Sopenharmony_ci    let fileList = new Array<number>();
1342c36cf2e9Sopenharmony_ci    if (this.mediaSize === undefined) {
1343c36cf2e9Sopenharmony_ci      Log.error(TAG, 'this.mediaSize is undefined')
1344c36cf2e9Sopenharmony_ci      return fileList;
1345c36cf2e9Sopenharmony_ci    }
1346c36cf2e9Sopenharmony_ci    let size = this.mediaSize.get300PixelMediaSize();
1347c36cf2e9Sopenharmony_ci    let imageSourceIndexList = new Array<number>();
1348c36cf2e9Sopenharmony_ci    let finalPrintRange = this.checkPrintRange();
1349c36cf2e9Sopenharmony_ci    for (let index = 0; index < finalPrintRange.length; index++) {
1350c36cf2e9Sopenharmony_ci      imageSourceIndexList.push(finalPrintRange[index] - 1);
1351c36cf2e9Sopenharmony_ci    }
1352c36cf2e9Sopenharmony_ci    Log.info(TAG, 'imageSourceIndexList: ', JSON.stringify(imageSourceIndexList))
1353c36cf2e9Sopenharmony_ci    let len = imageSourceIndexList.length;
1354c36cf2e9Sopenharmony_ci    for (let index = 0; index < len; index++) {
1355c36cf2e9Sopenharmony_ci      Log.info(TAG,'imageModel START ,this.imageSources '+JSON.stringify(this.imageSources))
1356c36cf2e9Sopenharmony_ci      let imageModel = this.imageSources[imageSourceIndexList[index]];
1357c36cf2e9Sopenharmony_ci      Log.info(TAG,'imageModel: '+JSON.stringify(imageModel))
1358c36cf2e9Sopenharmony_ci      let offCanvas: OffscreenCanvasRenderingContext2D | undefined = undefined;
1359c36cf2e9Sopenharmony_ci      let scale: number;
1360c36cf2e9Sopenharmony_ci      let offCanvasWidth: number;
1361c36cf2e9Sopenharmony_ci      let offCanvasHeight: number;
1362c36cf2e9Sopenharmony_ci      let orientation: PageDirection = PageDirection.AUTO;
1363c36cf2e9Sopenharmony_ci      if (this.pageDirection === PageDirection.VERTICAL || (this.pageDirection === PageDirection.AUTO && imageModel.height >= imageModel.width)) {
1364c36cf2e9Sopenharmony_ci        //竖向 或者 自适应且图片竖向
1365c36cf2e9Sopenharmony_ci        Log.debug('VERTICAL');
1366c36cf2e9Sopenharmony_ci        offCanvasWidth = px2fp(size.width);
1367c36cf2e9Sopenharmony_ci        offCanvasHeight = px2fp(size.height);
1368c36cf2e9Sopenharmony_ci        orientation = PageDirection.VERTICAL
1369c36cf2e9Sopenharmony_ci      } else if (this.pageDirection === PageDirection.LANDSCAPE || (this.pageDirection === PageDirection.AUTO && imageModel.height <= imageModel.width)) {
1370c36cf2e9Sopenharmony_ci        //横向 自适应且图片横向
1371c36cf2e9Sopenharmony_ci        Log.debug('LANDSCAPE');
1372c36cf2e9Sopenharmony_ci        offCanvasWidth = px2fp(size.height);
1373c36cf2e9Sopenharmony_ci        offCanvasHeight = px2fp(size.width);
1374c36cf2e9Sopenharmony_ci        orientation = PageDirection.LANDSCAPE
1375c36cf2e9Sopenharmony_ci      } else {
1376c36cf2e9Sopenharmony_ci        offCanvasWidth = px2fp(size.width);
1377c36cf2e9Sopenharmony_ci        offCanvasHeight = px2fp(size.height);
1378c36cf2e9Sopenharmony_ci        Log.error('set offCanvas size error');
1379c36cf2e9Sopenharmony_ci      }
1380c36cf2e9Sopenharmony_ci      offCanvas = new OffscreenCanvasRenderingContext2D(offCanvasWidth, offCanvasHeight, new RenderingContextSettings(true));
1381c36cf2e9Sopenharmony_ci      if (offCanvas === undefined) {
1382c36cf2e9Sopenharmony_ci        Log.error(TAG, 'offCanvas is undefined');
1383c36cf2e9Sopenharmony_ci        continue;
1384c36cf2e9Sopenharmony_ci      }
1385c36cf2e9Sopenharmony_ci      offCanvas.imageSmoothingEnabled = false;
1386c36cf2e9Sopenharmony_ci      offCanvas.fillStyle = '#fff'
1387c36cf2e9Sopenharmony_ci      offCanvas.fillRect(Constants.NUMBER_0, Constants.NUMBER_0, offCanvasWidth, offCanvasHeight);
1388c36cf2e9Sopenharmony_ci      scale = this.isBorderless ? Math.max(offCanvasWidth / px2fp(imageModel.width), offCanvasHeight / px2fp(imageModel.height)) :
1389c36cf2e9Sopenharmony_ci      Math.min(offCanvasWidth / px2fp(imageModel.width), offCanvasHeight / px2fp(imageModel.height));
1390c36cf2e9Sopenharmony_ci      let xPosition = (offCanvasWidth - px2fp(imageModel.width * scale)) / Constants.NUMBER_2;
1391c36cf2e9Sopenharmony_ci      let yPosition = (offCanvasHeight - px2fp(imageModel.height * scale)) / Constants.NUMBER_2;
1392c36cf2e9Sopenharmony_ci
1393c36cf2e9Sopenharmony_ci      //将处理好的offCanvas图片写到本地文件
1394c36cf2e9Sopenharmony_ci      if (CheckEmptyUtils.isEmpty(imageModel.imageSource)) {
1395c36cf2e9Sopenharmony_ci        Log.error(TAG, 'imageSource is error');
1396c36cf2e9Sopenharmony_ci        continue;
1397c36cf2e9Sopenharmony_ci      }
1398c36cf2e9Sopenharmony_ci      Log.info(TAG, 'begin createPixelMap');
1399c36cf2e9Sopenharmony_ci      let imageSource: image.ImageSource | undefined = undefined;
1400c36cf2e9Sopenharmony_ci      let pixelMap: image.PixelMap | undefined = undefined;
1401c36cf2e9Sopenharmony_ci      let canvasPixelMap: image.PixelMap | undefined = undefined;
1402c36cf2e9Sopenharmony_ci      try {
1403c36cf2e9Sopenharmony_ci        imageSource = image.createImageSource(imageModel.fd);
1404c36cf2e9Sopenharmony_ci        if (CheckEmptyUtils.isEmpty(imageSource)) {
1405c36cf2e9Sopenharmony_ci          Log.error(TAG, 'imageSource is error')
1406c36cf2e9Sopenharmony_ci          continue;
1407c36cf2e9Sopenharmony_ci        };
1408c36cf2e9Sopenharmony_ci        const editResult: boolean = orientation === PageDirection.LANDSCAPE ? true : false;
1409c36cf2e9Sopenharmony_ci        pixelMap = await imageSource!.createPixelMap({editable: editResult});
1410c36cf2e9Sopenharmony_ci        if (CheckEmptyUtils.isEmpty(pixelMap)) {
1411c36cf2e9Sopenharmony_ci          Log.error(TAG, 'pixelMap is error')
1412c36cf2e9Sopenharmony_ci          continue;
1413c36cf2e9Sopenharmony_ci        };
1414c36cf2e9Sopenharmony_ci        imageModel.imageSource!.release();
1415c36cf2e9Sopenharmony_ci        Log.info(TAG, 'end createPixelMap');
1416c36cf2e9Sopenharmony_ci        offCanvas.drawImage(pixelMap, xPosition, yPosition, px2fp(imageModel.width * scale), px2fp(imageModel.height * scale)) //5184 3456 //1200 2133
1417c36cf2e9Sopenharmony_ci        canvasPixelMap = offCanvas.getPixelMap(Constants.NUMBER_0, Constants.NUMBER_0, offCanvasWidth, offCanvasHeight);
1418c36cf2e9Sopenharmony_ci
1419c36cf2e9Sopenharmony_ci        //保存图片
1420c36cf2e9Sopenharmony_ci        Log.info(TAG, 'begin createDataShareUri');
1421c36cf2e9Sopenharmony_ci        if (CheckEmptyUtils.checkStrIsEmpty(this.firstFileName)) {
1422c36cf2e9Sopenharmony_ci          this.firstFileName = imageModel.name;
1423c36cf2e9Sopenharmony_ci          Log.info(TAG, 'init firstFileName:' + this.firstFileName)
1424c36cf2e9Sopenharmony_ci        }
1425c36cf2e9Sopenharmony_ci        let fileName = uuidGenerator() + Constants.JPEG_SUFFIX;
1426c36cf2e9Sopenharmony_ci        FileUtil.createJobsDir(this.abilityContext?.filesDir)
1427c36cf2e9Sopenharmony_ci        let uri = this.abilityContext?.filesDir + Constants.FILE_SEPARATOR + Constants.TEMP_JOB_FOLDER + Constants.FILE_SEPARATOR + fileName
1428c36cf2e9Sopenharmony_ci        await FileUtil.saveImageToJpeg(canvasPixelMap, uri, orientation);
1429c36cf2e9Sopenharmony_ci        Log.debug(TAG, 'end saveImageToJpeg');
1430c36cf2e9Sopenharmony_ci        jobFiles.push(uri);
1431c36cf2e9Sopenharmony_ci      } catch (error) {
1432c36cf2e9Sopenharmony_ci        Log.error(TAG, 'error happened: ' + JSON.stringify(error))
1433c36cf2e9Sopenharmony_ci      } finally {
1434c36cf2e9Sopenharmony_ci        //释放资源
1435c36cf2e9Sopenharmony_ci        if (pixelMap !== undefined) {
1436c36cf2e9Sopenharmony_ci          pixelMap.release();
1437c36cf2e9Sopenharmony_ci        }
1438c36cf2e9Sopenharmony_ci        if (canvasPixelMap !== undefined) {
1439c36cf2e9Sopenharmony_ci          canvasPixelMap.release();
1440c36cf2e9Sopenharmony_ci        }
1441c36cf2e9Sopenharmony_ci        if (imageSource !== undefined) {
1442c36cf2e9Sopenharmony_ci          imageSource.release();
1443c36cf2e9Sopenharmony_ci        }
1444c36cf2e9Sopenharmony_ci      }
1445c36cf2e9Sopenharmony_ci    }
1446c36cf2e9Sopenharmony_ci    Log.info(TAG, 'exit saveImage');
1447c36cf2e9Sopenharmony_ci    fileList = FileUtil.getFdList(jobFiles);
1448c36cf2e9Sopenharmony_ci    this.jobNum = fileList.length
1449c36cf2e9Sopenharmony_ci    this.jobName = this.getJobName(this.jobNum)
1450c36cf2e9Sopenharmony_ci
1451c36cf2e9Sopenharmony_ci    return fileList;
1452c36cf2e9Sopenharmony_ci  }
1453c36cf2e9Sopenharmony_ci
1454c36cf2e9Sopenharmony_ci  /**
1455c36cf2e9Sopenharmony_ci   * 开始打印
1456c36cf2e9Sopenharmony_ci   *
1457c36cf2e9Sopenharmony_ci   */
1458c36cf2e9Sopenharmony_ci  startPrint() {
1459c36cf2e9Sopenharmony_ci    Log.info(TAG, 'startPrint')
1460c36cf2e9Sopenharmony_ci    this.isGlobalDisable = true
1461c36cf2e9Sopenharmony_ci    this.saveLastedUsedPrinter(this.printer)
1462c36cf2e9Sopenharmony_ci    if (this.printRangeType === PrintRangeType.CUSTOM) {
1463c36cf2e9Sopenharmony_ci      this.checkCustomRangeTextInput(false)
1464c36cf2e9Sopenharmony_ci    }
1465c36cf2e9Sopenharmony_ci
1466c36cf2e9Sopenharmony_ci    let jobFiles = new Array<string>()
1467c36cf2e9Sopenharmony_ci    this.saveImage(jobFiles).then((fileList) => {
1468c36cf2e9Sopenharmony_ci      let ops: PrintJobOptions = {
1469c36cf2e9Sopenharmony_ci        jobName: this.jobName,
1470c36cf2e9Sopenharmony_ci        jobNum: this.jobNum * this.printCount,
1471c36cf2e9Sopenharmony_ci        jobDescription: this.jobDes,
1472c36cf2e9Sopenharmony_ci        mediaType: this.getMediaType(SelectionModel.getSelectionValue<number>(this.currentMediaType.name)!),
1473c36cf2e9Sopenharmony_ci        documentCategory: SelectionModel.getSelectionValue<number>(this.currentMediaType.name) === MediaType.PHOTO ? Constants.NUMBER_1 : Constants.NUMBER_0,
1474c36cf2e9Sopenharmony_ci        printQuality: SelectionModel.getSelectionValue<number>(this.currentQuality.name)!.toString(),
1475c36cf2e9Sopenharmony_ci        printerName: this.removeSpaces(this.printer?.printerName),
1476c36cf2e9Sopenharmony_ci        printerUri: this.getPrinterUri(),
1477c36cf2e9Sopenharmony_ci        documentFormat: 'image/jpeg',
1478c36cf2e9Sopenharmony_ci        files: jobFiles
1479c36cf2e9Sopenharmony_ci      }
1480c36cf2e9Sopenharmony_ci      let options = JSON.stringify(ops);
1481c36cf2e9Sopenharmony_ci      this.printJob = new PrintJob(jobFiles,fileList,this.jobId, this.printer!.printerId, print.PrintJobState.PRINT_JOB_PREPARE, print.PrintJobSubState.PRINT_JOB_COMPLETED_SUCCESS,
1482c36cf2e9Sopenharmony_ci        this.printCount,this.printerRange!,true,this.printerPageSize!,true,this.colorMode,SelectionModel.getSelectionValue<number>(this.currentDuplex.name)!,new PrintMargin(Constants.NUMBER_0, Constants.NUMBER_0, Constants.NUMBER_0, Constants.NUMBER_0),
1483c36cf2e9Sopenharmony_ci      new PreviewAttribute(this.printerRange!, Constants.NUMBER_1), options);
1484c36cf2e9Sopenharmony_ci
1485c36cf2e9Sopenharmony_ci      startPrintJob(this.printJob).then((result) => {
1486c36cf2e9Sopenharmony_ci        if (result) {
1487c36cf2e9Sopenharmony_ci          this.startJobAbility();
1488c36cf2e9Sopenharmony_ci        } else { // 任务下发失败
1489c36cf2e9Sopenharmony_ci          this.showToast($r('app.string.error_task_send_msg'));
1490c36cf2e9Sopenharmony_ci        }
1491c36cf2e9Sopenharmony_ci      });
1492c36cf2e9Sopenharmony_ci    });
1493c36cf2e9Sopenharmony_ci  }
1494c36cf2e9Sopenharmony_ci
1495c36cf2e9Sopenharmony_ci  startJobAbility(){
1496c36cf2e9Sopenharmony_ci    let jobAbilityWant: Want = {
1497c36cf2e9Sopenharmony_ci      bundleName: Constants.BUNDLE_NAME,
1498c36cf2e9Sopenharmony_ci      abilityName: Constants.JOB_MANAGER_ABILITY_NAME,
1499c36cf2e9Sopenharmony_ci      parameters: {
1500c36cf2e9Sopenharmony_ci        jobId: this.jobId
1501c36cf2e9Sopenharmony_ci      },
1502c36cf2e9Sopenharmony_ci    }
1503c36cf2e9Sopenharmony_ci
1504c36cf2e9Sopenharmony_ci    this.abilityContext?.startAbility(jobAbilityWant).then(() => {
1505c36cf2e9Sopenharmony_ci      Log.info(TAG,'startJobManagerAbility')
1506c36cf2e9Sopenharmony_ci      this.canPrint = false;
1507c36cf2e9Sopenharmony_ci      this.session?.terminateSelf().then(() => {
1508c36cf2e9Sopenharmony_ci        console.info('===>terminateSelfCallBack===>: ');
1509c36cf2e9Sopenharmony_ci      });
1510c36cf2e9Sopenharmony_ci    }).catch((err: BusinessError) => {
1511c36cf2e9Sopenharmony_ci      Log.error(TAG, 'fail to startAbility, err =' + JSON.stringify(err));
1512c36cf2e9Sopenharmony_ci    })
1513c36cf2e9Sopenharmony_ci  }
1514c36cf2e9Sopenharmony_ci
1515c36cf2e9Sopenharmony_ci  removeSpaces(name: string | undefined) {
1516c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.checkStrIsEmpty(name)) {
1517c36cf2e9Sopenharmony_ci      return "";
1518c36cf2e9Sopenharmony_ci    }
1519c36cf2e9Sopenharmony_ci    let regex: RegExp = new RegExp('\\s+', 'g');
1520c36cf2e9Sopenharmony_ci    return name!.replace(regex, '_');
1521c36cf2e9Sopenharmony_ci  }
1522c36cf2e9Sopenharmony_ci
1523c36cf2e9Sopenharmony_ci  getMediaType(selectType: number): string {
1524c36cf2e9Sopenharmony_ci    if (MediaTypes.sCodeToStringMap.has(selectType)) {
1525c36cf2e9Sopenharmony_ci      return MediaTypes.sCodeToStringMap.get(selectType)!;
1526c36cf2e9Sopenharmony_ci    }
1527c36cf2e9Sopenharmony_ci    return MediaTypes.sCodeToStringMap.get(MediaTypeCode.MEDIA_PLAIN)!;
1528c36cf2e9Sopenharmony_ci  }
1529c36cf2e9Sopenharmony_ci
1530c36cf2e9Sopenharmony_ci  getPrinterUri(): string {
1531c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmpty(this.printer)) {
1532c36cf2e9Sopenharmony_ci      return '';
1533c36cf2e9Sopenharmony_ci    }
1534c36cf2e9Sopenharmony_ci    let options = this.printer!.options;
1535c36cf2e9Sopenharmony_ci    let optionObject: PrinterCapsOptions = JSON.parse(options!);
1536c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.checkStrIsEmpty(optionObject.printerUri)) {
1537c36cf2e9Sopenharmony_ci      return '';
1538c36cf2e9Sopenharmony_ci    }
1539c36cf2e9Sopenharmony_ci    return optionObject.printerUri;
1540c36cf2e9Sopenharmony_ci  }
1541c36cf2e9Sopenharmony_ci
1542c36cf2e9Sopenharmony_ci  connectionFailed() {
1543c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmpty(this.printer)) {
1544c36cf2e9Sopenharmony_ci      Log.error(TAG, 'connectionFailed, invalid printer!');
1545c36cf2e9Sopenharmony_ci      return;
1546c36cf2e9Sopenharmony_ci    }
1547c36cf2e9Sopenharmony_ci    clearInterval(this.ConnectTimer)
1548c36cf2e9Sopenharmony_ci    this.alarmText = StringUtil.getString('alarm_dialog_connect_failed')
1549c36cf2e9Sopenharmony_ci    this.alarmDialogCtl.open()
1550c36cf2e9Sopenharmony_ci    this.printer!.printerId = Constants.STRING_NEGATIVE_ONE
1551c36cf2e9Sopenharmony_ci    this.connectingPrinterId = Constants.DEFAULT_CONNECTING_PRINTER_ID
1552c36cf2e9Sopenharmony_ci    Log.info(TAG, 'connectCountDown setPrinterId:' + this.printer!.printerId)
1553c36cf2e9Sopenharmony_ci    this.setSelectDefault(true)
1554c36cf2e9Sopenharmony_ci  }
1555c36cf2e9Sopenharmony_ci
1556c36cf2e9Sopenharmony_ci  getJobName(fileCount: number): string {
1557c36cf2e9Sopenharmony_ci    Log.info(TAG, 'getJobName: COUNT' + fileCount)
1558c36cf2e9Sopenharmony_ci    let jobName: string = this.firstFileName
1559c36cf2e9Sopenharmony_ci    if (fileCount > 1) {
1560c36cf2e9Sopenharmony_ci      let nameExt = StringUtil.getString('print_job_name_plurals',fileCount)
1561c36cf2e9Sopenharmony_ci      jobName = jobName + nameExt
1562c36cf2e9Sopenharmony_ci    }
1563c36cf2e9Sopenharmony_ci    Log.debug(TAG,'jobName: ',jobName)
1564c36cf2e9Sopenharmony_ci    return jobName
1565c36cf2e9Sopenharmony_ci  }
1566c36cf2e9Sopenharmony_ci
1567c36cf2e9Sopenharmony_ci  getJobDescription() {
1568c36cf2e9Sopenharmony_ci
1569c36cf2e9Sopenharmony_ci    let color = Constants.STRING_NONE
1570c36cf2e9Sopenharmony_ci    switch (this.colorMode) {
1571c36cf2e9Sopenharmony_ci      case ColorCode.COLOR:
1572c36cf2e9Sopenharmony_ci        color = StringUtil.getString('ColorMode_COLOR') + StringUtil.getString('pauseMark')
1573c36cf2e9Sopenharmony_ci        break;
1574c36cf2e9Sopenharmony_ci      case ColorCode.MONOCHROME:
1575c36cf2e9Sopenharmony_ci        color = StringUtil.getString('ColorMode_MONOCHROME') + StringUtil.getString('pauseMark')
1576c36cf2e9Sopenharmony_ci        break;
1577c36cf2e9Sopenharmony_ci    }
1578c36cf2e9Sopenharmony_ci    let mediaType = Constants.STRING_NONE
1579c36cf2e9Sopenharmony_ci    switch (SelectionModel.getSelectionValue<number>(this.currentMediaType.name)) {
1580c36cf2e9Sopenharmony_ci      case MediaType.NORMAL:
1581c36cf2e9Sopenharmony_ci        mediaType = StringUtil.getString('MediaType_NORMAL') + StringUtil.getString('pauseMark')
1582c36cf2e9Sopenharmony_ci        break;
1583c36cf2e9Sopenharmony_ci      case MediaType.PHOTO:
1584c36cf2e9Sopenharmony_ci        mediaType = StringUtil.getString('MediaType_PHOTO') + StringUtil.getString('pauseMark')
1585c36cf2e9Sopenharmony_ci        break;
1586c36cf2e9Sopenharmony_ci    }
1587c36cf2e9Sopenharmony_ci    let borderless = Constants.STRING_NONE
1588c36cf2e9Sopenharmony_ci    if (this.isBorderless) {
1589c36cf2e9Sopenharmony_ci      borderless = StringUtil.getString('pauseMark') + StringUtil.getString('JobDes_BorderLess')
1590c36cf2e9Sopenharmony_ci    }
1591c36cf2e9Sopenharmony_ci    let quality = Constants.STRING_NONE
1592c36cf2e9Sopenharmony_ci    switch (SelectionModel.getSelectionValue<number>(this.currentQuality.name)) {
1593c36cf2e9Sopenharmony_ci      case PrintQuality.ECONOMY:
1594c36cf2e9Sopenharmony_ci        quality = StringUtil.getString('PrintQuality_ECONOMY') + StringUtil.getString('pauseMark')
1595c36cf2e9Sopenharmony_ci        break;
1596c36cf2e9Sopenharmony_ci      case PrintQuality.STANDARD:
1597c36cf2e9Sopenharmony_ci        quality = StringUtil.getString('PrintQuality_STANDARD') + StringUtil.getString('pauseMark')
1598c36cf2e9Sopenharmony_ci        break;
1599c36cf2e9Sopenharmony_ci      case PrintQuality.BEST:
1600c36cf2e9Sopenharmony_ci        quality = StringUtil.getString('PrintQuality_BEST') + StringUtil.getString('pauseMark')
1601c36cf2e9Sopenharmony_ci        break;
1602c36cf2e9Sopenharmony_ci    }
1603c36cf2e9Sopenharmony_ci    let direction = Constants.STRING_NONE
1604c36cf2e9Sopenharmony_ci    switch (SelectionModel.getSelectionValue<number>(this.currentDirection.name)) {
1605c36cf2e9Sopenharmony_ci      case PageDirection.AUTO:
1606c36cf2e9Sopenharmony_ci        direction = StringUtil.getString('PageDirection_AUTO') + StringUtil.getString('pauseMark')
1607c36cf2e9Sopenharmony_ci        break;
1608c36cf2e9Sopenharmony_ci      case PageDirection.LANDSCAPE:
1609c36cf2e9Sopenharmony_ci        direction = StringUtil.getString('PageDirection_LANDSCAPE') + StringUtil.getString('pauseMark')
1610c36cf2e9Sopenharmony_ci        break;
1611c36cf2e9Sopenharmony_ci      case PageDirection.VERTICAL:
1612c36cf2e9Sopenharmony_ci        direction = StringUtil.getString('PageDirection_VERTICAL') + StringUtil.getString('pauseMark')
1613c36cf2e9Sopenharmony_ci        break;
1614c36cf2e9Sopenharmony_ci    }
1615c36cf2e9Sopenharmony_ci    let duplex = Constants.STRING_NONE
1616c36cf2e9Sopenharmony_ci
1617c36cf2e9Sopenharmony_ci    let size = this.currentMediaSize.res
1618c36cf2e9Sopenharmony_ci    let sizeStr =size.toString().split(' ')[0]
1619c36cf2e9Sopenharmony_ci    this.jobDes = `${color}${quality}${direction}${mediaType}${sizeStr}${borderless}`
1620c36cf2e9Sopenharmony_ci  }
1621c36cf2e9Sopenharmony_ci
1622c36cf2e9Sopenharmony_ci  checkCustomRange(value:string){
1623c36cf2e9Sopenharmony_ci    this.cusRangeArr = []
1624c36cf2e9Sopenharmony_ci    this.isCusRangeError = false
1625c36cf2e9Sopenharmony_ci    this.isCusRangeMax = false
1626c36cf2e9Sopenharmony_ci    this.cusRangeBorderColor = $r('app.color.border_line')
1627c36cf2e9Sopenharmony_ci
1628c36cf2e9Sopenharmony_ci    if (value === Constants.STRING_NONE) {
1629c36cf2e9Sopenharmony_ci      return
1630c36cf2e9Sopenharmony_ci    }
1631c36cf2e9Sopenharmony_ci
1632c36cf2e9Sopenharmony_ci    let prePageArray = new Array<string>();
1633c36cf2e9Sopenharmony_ci    let pageArray = new Array<string>();
1634c36cf2e9Sopenharmony_ci    prePageArray = value.split(Constants.EU_COMMA)
1635c36cf2e9Sopenharmony_ci    prePageArray.forEach((prePage:string)=>{
1636c36cf2e9Sopenharmony_ci      pageArray.push(...prePage.split(Constants.CN_COMMA));
1637c36cf2e9Sopenharmony_ci    })
1638c36cf2e9Sopenharmony_ci
1639c36cf2e9Sopenharmony_ci    for (let index = 0; index < pageArray.length; index++){
1640c36cf2e9Sopenharmony_ci      let range =pageArray[index].split(Constants.HYPHEN)
1641c36cf2e9Sopenharmony_ci      if (range.length === Constants.NUMBER_2) {
1642c36cf2e9Sopenharmony_ci        let startNum =  this.checkNum(range[0])
1643c36cf2e9Sopenharmony_ci        let endNum =  this.checkNum(range[1])
1644c36cf2e9Sopenharmony_ci        if (!(startNum && endNum)){
1645c36cf2e9Sopenharmony_ci          this.cusRangeArr = []
1646c36cf2e9Sopenharmony_ci          return
1647c36cf2e9Sopenharmony_ci        }
1648c36cf2e9Sopenharmony_ci        if (startNum>endNum) {
1649c36cf2e9Sopenharmony_ci          this.setInvalidRange()
1650c36cf2e9Sopenharmony_ci          this.cusRangeArr = []
1651c36cf2e9Sopenharmony_ci          return
1652c36cf2e9Sopenharmony_ci        }else{
1653c36cf2e9Sopenharmony_ci          for (let index:number = startNum; index <= endNum; index++) {
1654c36cf2e9Sopenharmony_ci            this.cusRangeArr.push(index);
1655c36cf2e9Sopenharmony_ci          }
1656c36cf2e9Sopenharmony_ci        }
1657c36cf2e9Sopenharmony_ci        continue;
1658c36cf2e9Sopenharmony_ci      }
1659c36cf2e9Sopenharmony_ci
1660c36cf2e9Sopenharmony_ci      let num = this.checkNum(pageArray[index])
1661c36cf2e9Sopenharmony_ci
1662c36cf2e9Sopenharmony_ci      if (num){
1663c36cf2e9Sopenharmony_ci        this.cusRangeArr.push(num);
1664c36cf2e9Sopenharmony_ci      }else{
1665c36cf2e9Sopenharmony_ci        this.cusRangeArr = []
1666c36cf2e9Sopenharmony_ci        return
1667c36cf2e9Sopenharmony_ci      }
1668c36cf2e9Sopenharmony_ci
1669c36cf2e9Sopenharmony_ci    }
1670c36cf2e9Sopenharmony_ci    const set = new Set(this.cusRangeArr)
1671c36cf2e9Sopenharmony_ci    this.cusRangeArr =  Array.from(set)
1672c36cf2e9Sopenharmony_ci    let length = value.length
1673c36cf2e9Sopenharmony_ci    if (length >= Constants.MAX_CUSTOM_PRINT_RANGE_LENGTH) {
1674c36cf2e9Sopenharmony_ci      this.errorMessage = $r('app.string.cus_range_error_words_limit')
1675c36cf2e9Sopenharmony_ci      this.cusRangeBorderColor = $r('app.color.border_line_error')
1676c36cf2e9Sopenharmony_ci      this.isCusRangeMax = true
1677c36cf2e9Sopenharmony_ci      return
1678c36cf2e9Sopenharmony_ci    }
1679c36cf2e9Sopenharmony_ci    Log.info(TAG,'checkCustomRange this.cusRangeArr = ',JSON.stringify(this.cusRangeArr))
1680c36cf2e9Sopenharmony_ci  }
1681c36cf2e9Sopenharmony_ci
1682c36cf2e9Sopenharmony_ci  checkNum(numStr:string):number | undefined{
1683c36cf2e9Sopenharmony_ci    if (numStr.includes('.')||numStr.startsWith('0')){
1684c36cf2e9Sopenharmony_ci      this.setInvalidRange()
1685c36cf2e9Sopenharmony_ci      return
1686c36cf2e9Sopenharmony_ci    }
1687c36cf2e9Sopenharmony_ci    let num = Number(numStr)
1688c36cf2e9Sopenharmony_ci    if (Number.isNaN(num)||num < 1){
1689c36cf2e9Sopenharmony_ci      this.setInvalidRange()
1690c36cf2e9Sopenharmony_ci      return undefined
1691c36cf2e9Sopenharmony_ci    }else if (num > this.totalPage) {
1692c36cf2e9Sopenharmony_ci      this.errorMessage = $r('app.string.cus_range_error_max_image_count',this.totalPage.toString())
1693c36cf2e9Sopenharmony_ci      this.cusRangeBorderColor = $r('app.color.border_line_error')
1694c36cf2e9Sopenharmony_ci      this.isCusRangeError = true
1695c36cf2e9Sopenharmony_ci      return undefined
1696c36cf2e9Sopenharmony_ci    }
1697c36cf2e9Sopenharmony_ci    return num
1698c36cf2e9Sopenharmony_ci  }
1699c36cf2e9Sopenharmony_ci
1700c36cf2e9Sopenharmony_ci  setInvalidRange(){
1701c36cf2e9Sopenharmony_ci    this.errorMessage = $r('app.string.cus_range_error_invalid_range')
1702c36cf2e9Sopenharmony_ci    this.cusRangeBorderColor = $r('app.color.border_line_error')
1703c36cf2e9Sopenharmony_ci    this.isCusRangeError = true
1704c36cf2e9Sopenharmony_ci  }
1705c36cf2e9Sopenharmony_ci
1706c36cf2e9Sopenharmony_ci  needDuplexChange(){
1707c36cf2e9Sopenharmony_ci    Log.info(TAG,'needDuplexChange ')
1708c36cf2e9Sopenharmony_ci    if(!this.needDuplex && !(this.currentDuplex === SelectionModel.DuplexMode_SINGLE)){
1709c36cf2e9Sopenharmony_ci      this.currentDuplex = SelectionModel.DuplexMode_SINGLE
1710c36cf2e9Sopenharmony_ci    }
1711c36cf2e9Sopenharmony_ci  }
1712c36cf2e9Sopenharmony_ci
1713c36cf2e9Sopenharmony_ci  setStartPageStr(){
1714c36cf2e9Sopenharmony_ci    this.startPageStr = ''
1715c36cf2e9Sopenharmony_ci    this.startPageStr = this.startPage.toString();
1716c36cf2e9Sopenharmony_ci  }
1717c36cf2e9Sopenharmony_ci  setEndPageStr(){
1718c36cf2e9Sopenharmony_ci    this.endPageStr = ''
1719c36cf2e9Sopenharmony_ci    this.endPageStr = this.endPage.toString();
1720c36cf2e9Sopenharmony_ci  }
1721c36cf2e9Sopenharmony_ci  /**
1722c36cf2e9Sopenharmony_ci   * 检查传入图片数量,大于100时不与加载
1723c36cf2e9Sopenharmony_ci   *
1724c36cf2e9Sopenharmony_ci   */
1725c36cf2e9Sopenharmony_ci  checkMaxPages(fileList: Array<string>):  Array<string>{
1726c36cf2e9Sopenharmony_ci    let returnList:  Array<string>;
1727c36cf2e9Sopenharmony_ci    if (fileList.length > Constants.MAX_PAGES) {
1728c36cf2e9Sopenharmony_ci      returnList = fileList.slice(0,Constants.MAX_PAGES);
1729c36cf2e9Sopenharmony_ci      setTimeout(() => {//延迟弹窗,否则会概率弹窗失败
1730c36cf2e9Sopenharmony_ci        this.showToast($r('app.string.toast_max_copies'));
1731c36cf2e9Sopenharmony_ci      }, Constants.SHOW_TOAST_TIMEOUT);
1732c36cf2e9Sopenharmony_ci    } else {
1733c36cf2e9Sopenharmony_ci      returnList = fileList
1734c36cf2e9Sopenharmony_ci    }
1735c36cf2e9Sopenharmony_ci    return returnList
1736c36cf2e9Sopenharmony_ci  }
1737c36cf2e9Sopenharmony_ci
1738c36cf2e9Sopenharmony_ci  checkCustomRangeTextInput(isChangeRangeType: boolean){
1739c36cf2e9Sopenharmony_ci    if (!isChangeRangeType && this.printRangeType === PrintRangeType.ALL){
1740c36cf2e9Sopenharmony_ci      return;
1741c36cf2e9Sopenharmony_ci    }
1742c36cf2e9Sopenharmony_ci    if (isChangeRangeType) {
1743c36cf2e9Sopenharmony_ci      this.editCusRangeFlag = false
1744c36cf2e9Sopenharmony_ci      this.cusRangeText = ''
1745c36cf2e9Sopenharmony_ci      this.cusRangeArr = []
1746c36cf2e9Sopenharmony_ci      this.isCusRangeError = false
1747c36cf2e9Sopenharmony_ci      this.isCusRangeMax = false
1748c36cf2e9Sopenharmony_ci      this.cusRangeBorderColor = $r('app.color.border_line')
1749c36cf2e9Sopenharmony_ci    } else {
1750c36cf2e9Sopenharmony_ci      if (CheckEmptyUtils.isEmpty(this.cusRangeText)) {
1751c36cf2e9Sopenharmony_ci        if (this.totalPage > Constants.NUMBER_1) {
1752c36cf2e9Sopenharmony_ci          if (this.isAbovePageLimit) {
1753c36cf2e9Sopenharmony_ci            this.cusRangeText = Constants.NUMBER_1+Constants.HYPHEN+Constants.MAX_PAGES.toString()
1754c36cf2e9Sopenharmony_ci          }else{
1755c36cf2e9Sopenharmony_ci            this.cusRangeText = Constants.NUMBER_1+Constants.HYPHEN+this.totalPage.toString()
1756c36cf2e9Sopenharmony_ci          }
1757c36cf2e9Sopenharmony_ci        }else{
1758c36cf2e9Sopenharmony_ci          this.cusRangeText = Constants.STRING_ONE
1759c36cf2e9Sopenharmony_ci        }
1760c36cf2e9Sopenharmony_ci      }
1761c36cf2e9Sopenharmony_ci    }
1762c36cf2e9Sopenharmony_ci
1763c36cf2e9Sopenharmony_ci    if (this.cusRangeArr.length === 0 ) {
1764c36cf2e9Sopenharmony_ci      this.printRangeType = PrintRangeType.ALL;
1765c36cf2e9Sopenharmony_ci      this.updatePrintRange()
1766c36cf2e9Sopenharmony_ci    }
1767c36cf2e9Sopenharmony_ci  }
1768c36cf2e9Sopenharmony_ci
1769c36cf2e9Sopenharmony_ci  checkPrintRange(): Array<number>{
1770c36cf2e9Sopenharmony_ci    let returnList = new Array<number>();
1771c36cf2e9Sopenharmony_ci    if (this.printRange.length>100) {
1772c36cf2e9Sopenharmony_ci      returnList = PrintUtil.getDefaultArray(100);
1773c36cf2e9Sopenharmony_ci    }else{
1774c36cf2e9Sopenharmony_ci      returnList = CopyUtil.deepClone(this.printRange);
1775c36cf2e9Sopenharmony_ci    }
1776c36cf2e9Sopenharmony_ci    if (this.printerRange === undefined) {//下发打印参数需要
1777c36cf2e9Sopenharmony_ci      this.printerRange = {
1778c36cf2e9Sopenharmony_ci        startPage: this.startPage,
1779c36cf2e9Sopenharmony_ci        endPage: this.endPage,
1780c36cf2e9Sopenharmony_ci        pages: returnList.slice()
1781c36cf2e9Sopenharmony_ci      };
1782c36cf2e9Sopenharmony_ci    }else{
1783c36cf2e9Sopenharmony_ci      this.printerRange.startPage = this.startPage;
1784c36cf2e9Sopenharmony_ci      this.printerRange.endPage = this.endPage;
1785c36cf2e9Sopenharmony_ci      this.printerRange.pages = returnList.slice();
1786c36cf2e9Sopenharmony_ci    }
1787c36cf2e9Sopenharmony_ci    return returnList;
1788c36cf2e9Sopenharmony_ci  }
1789c36cf2e9Sopenharmony_ci}
1790c36cf2e9Sopenharmony_ci
1791