1bea4f105Sopenharmony_ci/*
2bea4f105Sopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3bea4f105Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4bea4f105Sopenharmony_ci * you may not use this file except in compliance with the License.
5bea4f105Sopenharmony_ci * You may obtain a copy of the License at
6bea4f105Sopenharmony_ci *
7bea4f105Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8bea4f105Sopenharmony_ci *
9bea4f105Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10bea4f105Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11bea4f105Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12bea4f105Sopenharmony_ci * See the License for the specific language governing permissions and
13bea4f105Sopenharmony_ci * limitations under the License.
14bea4f105Sopenharmony_ci */
15bea4f105Sopenharmony_ci
16bea4f105Sopenharmony_ciimport { common, Context, UIExtensionContentSession } from '@kit.AbilityKit';
17bea4f105Sopenharmony_ciimport { PickerWindowType, SelectMode, UnityStartMode } from '../constants/FilePickerItems';
18bea4f105Sopenharmony_ci
19bea4f105Sopenharmony_ciexport class StartModeOptions {
20bea4f105Sopenharmony_ci  /****************************    picker  *********************************/
21bea4f105Sopenharmony_ci  /**************    common  *******************/
22bea4f105Sopenharmony_ci  /**
23bea4f105Sopenharmony_ci   * picker场景下,界面模式
24bea4f105Sopenharmony_ci   */
25bea4f105Sopenharmony_ci  public windowType = PickerWindowType.ABILITY;
26bea4f105Sopenharmony_ci
27bea4f105Sopenharmony_ci  public session: UIExtensionContentSession;
28bea4f105Sopenharmony_ci
29bea4f105Sopenharmony_ci  /**
30bea4f105Sopenharmony_ci   * want对应的action
31bea4f105Sopenharmony_ci   */
32bea4f105Sopenharmony_ci  public action: string = '';
33bea4f105Sopenharmony_ci
34bea4f105Sopenharmony_ci  /**
35bea4f105Sopenharmony_ci   * 拉起picker的应用ability名
36bea4f105Sopenharmony_ci   */
37bea4f105Sopenharmony_ci  public callerAbilityName: string = '';
38bea4f105Sopenharmony_ci
39bea4f105Sopenharmony_ci  /**
40bea4f105Sopenharmony_ci   * 拉起picker的包名
41bea4f105Sopenharmony_ci   */
42bea4f105Sopenharmony_ci  public callerBundleName: string = '';
43bea4f105Sopenharmony_ci
44bea4f105Sopenharmony_ci  /**
45bea4f105Sopenharmony_ci   * 选择器callerId
46bea4f105Sopenharmony_ci   */
47bea4f105Sopenharmony_ci  public callerUid: number = 0;
48bea4f105Sopenharmony_ci
49bea4f105Sopenharmony_ci  /**
50bea4f105Sopenharmony_ci   * 拉起picker的默认文件或者指定目录
51bea4f105Sopenharmony_ci   */
52bea4f105Sopenharmony_ci  public defaultFilePathUri: string = '';
53bea4f105Sopenharmony_ci
54bea4f105Sopenharmony_ci  /**
55bea4f105Sopenharmony_ci   * 代表拉起sysPicker/filePicker类型的ExtensionAbility
56bea4f105Sopenharmony_ci   */
57bea4f105Sopenharmony_ci  public extType: string = '';
58bea4f105Sopenharmony_ci
59bea4f105Sopenharmony_ci  /**
60bea4f105Sopenharmony_ci   * UIExtensionContext
61bea4f105Sopenharmony_ci   */
62bea4f105Sopenharmony_ci  public uiExtContext: common.UIExtensionContext;
63bea4f105Sopenharmony_ci
64bea4f105Sopenharmony_ci  /**
65bea4f105Sopenharmony_ci   * UIExtensionContext
66bea4f105Sopenharmony_ci   */
67bea4f105Sopenharmony_ci  public uiContext: common.UIAbilityContext;
68bea4f105Sopenharmony_ci
69bea4f105Sopenharmony_ci  /**
70bea4f105Sopenharmony_ci   * context
71bea4f105Sopenharmony_ci   */
72bea4f105Sopenharmony_ci  public context: Context;
73bea4f105Sopenharmony_ci
74bea4f105Sopenharmony_ci
75bea4f105Sopenharmony_ci  /**
76bea4f105Sopenharmony_ci   * 用来区分选择,保存还是下载模式
77bea4f105Sopenharmony_ci   * 当pickerType设置为downloadAuth时,用户配置的参数newFileNames、defaultFilePathUri和fileSuffixChoices将不会生效
78bea4f105Sopenharmony_ci   */
79bea4f105Sopenharmony_ci  public pickerType: string = 'DEFAULT';
80bea4f105Sopenharmony_ci
81bea4f105Sopenharmony_ci  /**************    select  *******************/
82bea4f105Sopenharmony_ci  /**
83bea4f105Sopenharmony_ci   * 选择文件的后缀类型
84bea4f105Sopenharmony_ci   */
85bea4f105Sopenharmony_ci  public fileSuffixFilters: string[] = [];
86bea4f105Sopenharmony_ci
87bea4f105Sopenharmony_ci  /**
88bea4f105Sopenharmony_ci   * 选择文件最大个数,上限500, 默认为1
89bea4f105Sopenharmony_ci   */
90bea4f105Sopenharmony_ci  public maxSelectNumber: number = 1;
91bea4f105Sopenharmony_ci
92bea4f105Sopenharmony_ci  /**
93bea4f105Sopenharmony_ci   * 支持选择的资源类型,比如:文件、文件夹和二者混合
94bea4f105Sopenharmony_ci   */
95bea4f105Sopenharmony_ci  public selectMode: SelectMode = SelectMode.FILE;
96bea4f105Sopenharmony_ci
97bea4f105Sopenharmony_ci  /**
98bea4f105Sopenharmony_ci   * 当为授权模式,defaultFilePathUri必填,表明待授权uri
99bea4f105Sopenharmony_ci   */
100bea4f105Sopenharmony_ci  public isAuthMode: boolean = false;
101bea4f105Sopenharmony_ci
102bea4f105Sopenharmony_ci  /**
103bea4f105Sopenharmony_ci   * 调用方传入文件类型(兼容双框架action)
104bea4f105Sopenharmony_ci   */
105bea4f105Sopenharmony_ci  public phonePickerType: string = '';
106bea4f105Sopenharmony_ci
107bea4f105Sopenharmony_ci  /**
108bea4f105Sopenharmony_ci   * 调用方传入文件类型列表
109bea4f105Sopenharmony_ci   */
110bea4f105Sopenharmony_ci  public phonePickerTypeList: string[] = [];
111bea4f105Sopenharmony_ci
112bea4f105Sopenharmony_ci
113bea4f105Sopenharmony_ci  /**************    save  *******************/
114bea4f105Sopenharmony_ci  /**
115bea4f105Sopenharmony_ci   * 进行保存的文件名列表
116bea4f105Sopenharmony_ci   */
117bea4f105Sopenharmony_ci  public newFileNames: string[] = [];
118bea4f105Sopenharmony_ci
119bea4f105Sopenharmony_ci  /**
120bea4f105Sopenharmony_ci   * 保存文件的后缀类型
121bea4f105Sopenharmony_ci   */
122bea4f105Sopenharmony_ci  public fileSuffixChoices: string[] = [];
123bea4f105Sopenharmony_ci
124bea4f105Sopenharmony_ci  /**
125bea4f105Sopenharmony_ci   * 手机保存文件的后缀类型
126bea4f105Sopenharmony_ci   */
127bea4f105Sopenharmony_ci  public PhoneFileSuffixChoices: string = '';
128bea4f105Sopenharmony_ci
129bea4f105Sopenharmony_ci
130bea4f105Sopenharmony_ci  /****************************    主界面模式  *********************************/
131bea4f105Sopenharmony_ci  /**
132bea4f105Sopenharmony_ci   * 文管启动模式,只允许初始化过程修改一次,默认为主界面模式
133bea4f105Sopenharmony_ci   */
134bea4f105Sopenharmony_ci  public startMode: UnityStartMode = UnityStartMode.NORMAL;
135bea4f105Sopenharmony_ci
136bea4f105Sopenharmony_ci  public getFileSuffixFilterList(): string[] {
137bea4f105Sopenharmony_ci    if (this.fileSuffixFilters.length === 0) {
138bea4f105Sopenharmony_ci      this.fileSuffixFilters.push('.*');
139bea4f105Sopenharmony_ci    }
140bea4f105Sopenharmony_ci    return this.fileSuffixFilters;
141bea4f105Sopenharmony_ci  }
142bea4f105Sopenharmony_ci
143bea4f105Sopenharmony_ci  public setSelectMode(mode: number | undefined): void {
144bea4f105Sopenharmony_ci    if (mode === undefined) {
145bea4f105Sopenharmony_ci      this.selectMode = SelectMode.FILE;
146bea4f105Sopenharmony_ci      return;
147bea4f105Sopenharmony_ci    }
148bea4f105Sopenharmony_ci    if ((mode < SelectMode.FILE) || (mode > SelectMode.MIXED)) {
149bea4f105Sopenharmony_ci      this.selectMode = SelectMode.FILE;
150bea4f105Sopenharmony_ci      return;
151bea4f105Sopenharmony_ci    }
152bea4f105Sopenharmony_ci    this.selectMode = mode;
153bea4f105Sopenharmony_ci  }
154bea4f105Sopenharmony_ci
155bea4f105Sopenharmony_ci  public setNewFileNames(names: string[] | undefined): void {
156bea4f105Sopenharmony_ci    if (names === undefined) {
157bea4f105Sopenharmony_ci      this.newFileNames = [];
158bea4f105Sopenharmony_ci      return;
159bea4f105Sopenharmony_ci    }
160bea4f105Sopenharmony_ci    if (names.length === 0) {
161bea4f105Sopenharmony_ci      this.newFileNames = [''];
162bea4f105Sopenharmony_ci      return;
163bea4f105Sopenharmony_ci    }
164bea4f105Sopenharmony_ci    this.newFileNames = names;
165bea4f105Sopenharmony_ci  }
166bea4f105Sopenharmony_ci
167bea4f105Sopenharmony_ci  public isDownloadMode(): boolean {
168bea4f105Sopenharmony_ci    return this.pickerType === 'downloadAuth';
169bea4f105Sopenharmony_ci  }
170bea4f105Sopenharmony_ci
171bea4f105Sopenharmony_ci  public isGrantPermissionMode(): boolean {
172bea4f105Sopenharmony_ci    return this.isAuthMode;
173bea4f105Sopenharmony_ci  }
174bea4f105Sopenharmony_ci
175bea4f105Sopenharmony_ci  public isSelectFolderMode(): boolean {
176bea4f105Sopenharmony_ci    return this.startMode === UnityStartMode.FILE_PICKER_OPEN_FOLDER;
177bea4f105Sopenharmony_ci  }
178bea4f105Sopenharmony_ci
179bea4f105Sopenharmony_ci  public isOpenFileMode(): boolean {
180bea4f105Sopenharmony_ci    // 新方案需要通过pickerType区分
181bea4f105Sopenharmony_ci    return this.action === 'ohos.want.action.OPEN_FILE_SERVICE' || this.action === 'ohos.want.action.OPEN_FILE';
182bea4f105Sopenharmony_ci  }
183bea4f105Sopenharmony_ci
184bea4f105Sopenharmony_ci  public isCreateFileMode(): boolean {
185bea4f105Sopenharmony_ci    // 新方案需要通过pickerType区分
186bea4f105Sopenharmony_ci    return this.action === 'ohos.want.action.CREATE_FILE_SERVICE' || this.action === 'ohos.want.action.CREATE_FILE';
187bea4f105Sopenharmony_ci  }
188bea4f105Sopenharmony_ci
189bea4f105Sopenharmony_ci  public isUxt(): boolean {
190bea4f105Sopenharmony_ci    return this.windowType === PickerWindowType.UI;
191bea4f105Sopenharmony_ci  }
192bea4f105Sopenharmony_ci
193bea4f105Sopenharmony_ci  public setUiExtContext(context: common.UIExtensionContext): void {
194bea4f105Sopenharmony_ci    this.uiExtContext = context;
195bea4f105Sopenharmony_ci  }
196bea4f105Sopenharmony_ci}