142365ec6Sopenharmony_ci/*
242365ec6Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
342365ec6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
442365ec6Sopenharmony_ci * you may not use this file except in compliance with the License.
542365ec6Sopenharmony_ci * You may obtain a copy of the License at
642365ec6Sopenharmony_ci *
742365ec6Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
842365ec6Sopenharmony_ci *
942365ec6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1042365ec6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1142365ec6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1242365ec6Sopenharmony_ci * See the License for the specific language governing permissions and
1342365ec6Sopenharmony_ci * limitations under the License.
1442365ec6Sopenharmony_ci */
1542365ec6Sopenharmony_ci
1642365ec6Sopenharmony_ciimport display from '@ohos.display';
1742365ec6Sopenharmony_ciimport type common from '@ohos.app.ability.common';
1842365ec6Sopenharmony_ciimport type Want from '@ohos.app.ability.Want';
1942365ec6Sopenharmony_ciimport type window from '@ohos.window';
2042365ec6Sopenharmony_ciimport UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession';
2142365ec6Sopenharmony_ciimport { Log } from './Log';
2242365ec6Sopenharmony_ci
2342365ec6Sopenharmony_ciexport class GlobalContext {
2442365ec6Sopenharmony_ci  private static TAG: string = '[GlobalContext]:';
2542365ec6Sopenharmony_ci
2642365ec6Sopenharmony_ci  private constructor() {
2742365ec6Sopenharmony_ci  }
2842365ec6Sopenharmony_ci
2942365ec6Sopenharmony_ci  private static instance: GlobalContext;
3042365ec6Sopenharmony_ci  private _objects = new Map<string, Object>();
3142365ec6Sopenharmony_ci  private mDisplay: display.Display | undefined = undefined;
3242365ec6Sopenharmony_ci  private mCutoutInfo: display.CutoutInfo | undefined = undefined;
3342365ec6Sopenharmony_ci  private cameraAbilityContext;
3442365ec6Sopenharmony_ci  private cameraAbilityStageContext: common.AbilityStageContext;
3542365ec6Sopenharmony_ci  private cameraAbilityWant: Want;
3642365ec6Sopenharmony_ci  private cameraNewWant: Want;
3742365ec6Sopenharmony_ci  private windowStage: window.WindowStage;
3842365ec6Sopenharmony_ci  private cameraWinClass: window.Window;
3942365ec6Sopenharmony_ci  private cameraSettingContext: common.UIAbilityContext;
4042365ec6Sopenharmony_ci  private cameraWindowStageEvent: window.WindowStageEventType;
4142365ec6Sopenharmony_ci  private xComponentController;
4242365ec6Sopenharmony_ci  private cameraFormParam;
4342365ec6Sopenharmony_ci  private isPicker: boolean = false;
4442365ec6Sopenharmony_ci  private cameraUIExtensionContentSession: UIExtensionContentSession;
4542365ec6Sopenharmony_ci  private pickerUri: string;
4642365ec6Sopenharmony_ci
4742365ec6Sopenharmony_ci  public static get(): GlobalContext {
4842365ec6Sopenharmony_ci    if (!Boolean(GlobalContext.instance).valueOf()) {
4942365ec6Sopenharmony_ci      GlobalContext.instance = new GlobalContext();
5042365ec6Sopenharmony_ci    }
5142365ec6Sopenharmony_ci    return GlobalContext.instance;
5242365ec6Sopenharmony_ci  }
5342365ec6Sopenharmony_ci
5442365ec6Sopenharmony_ci  getObject(value: string): Object {
5542365ec6Sopenharmony_ci    return this._objects.get(value);
5642365ec6Sopenharmony_ci  }
5742365ec6Sopenharmony_ci
5842365ec6Sopenharmony_ci  getT<T>(value: string): T {
5942365ec6Sopenharmony_ci    return this._objects.get(value) as T;
6042365ec6Sopenharmony_ci  }
6142365ec6Sopenharmony_ci
6242365ec6Sopenharmony_ci  setObject(key: string, objectClass: Object): void {
6342365ec6Sopenharmony_ci    this._objects.set(key, objectClass);
6442365ec6Sopenharmony_ci  }
6542365ec6Sopenharmony_ci
6642365ec6Sopenharmony_ci  apply(value: string): void {
6742365ec6Sopenharmony_ci    const func = this._objects.get(value);
6842365ec6Sopenharmony_ci    if (func) {
6942365ec6Sopenharmony_ci      (func as Function)();
7042365ec6Sopenharmony_ci    }
7142365ec6Sopenharmony_ci  }
7242365ec6Sopenharmony_ci
7342365ec6Sopenharmony_ci  // 显示实例,在 phone设备上用 display获得的长宽与 State变量中 windowSize一致。
7442365ec6Sopenharmony_ci  public getDisplayInfo(): display.Display {
7542365ec6Sopenharmony_ci    if (!this.mDisplay) {
7642365ec6Sopenharmony_ci      this.mDisplay = display.getDefaultDisplaySync();
7742365ec6Sopenharmony_ci    }
7842365ec6Sopenharmony_ci    return this.mDisplay;
7942365ec6Sopenharmony_ci  }
8042365ec6Sopenharmony_ci
8142365ec6Sopenharmony_ci  public async getCutoutInfo(): Promise<display.CutoutInfo> {
8242365ec6Sopenharmony_ci    if (!this.mCutoutInfo) {
8342365ec6Sopenharmony_ci      this.mCutoutInfo = await this.getDisplayInfo().getCutoutInfo();
8442365ec6Sopenharmony_ci    }
8542365ec6Sopenharmony_ci    return this.mCutoutInfo;
8642365ec6Sopenharmony_ci  }
8742365ec6Sopenharmony_ci
8842365ec6Sopenharmony_ci  public getCameraAbilityContext() {
8942365ec6Sopenharmony_ci    return this.cameraAbilityContext;
9042365ec6Sopenharmony_ci  }
9142365ec6Sopenharmony_ci
9242365ec6Sopenharmony_ci  public setCameraAbilityContext(context): void {
9342365ec6Sopenharmony_ci    this.cameraAbilityContext = context;
9442365ec6Sopenharmony_ci  }
9542365ec6Sopenharmony_ci
9642365ec6Sopenharmony_ci  public getCameraAbilityWant(): Want {
9742365ec6Sopenharmony_ci    return this.cameraAbilityWant;
9842365ec6Sopenharmony_ci  }
9942365ec6Sopenharmony_ci
10042365ec6Sopenharmony_ci  public setCameraAbilityWant(want: Want): void {
10142365ec6Sopenharmony_ci    this.cameraAbilityWant = want;
10242365ec6Sopenharmony_ci  }
10342365ec6Sopenharmony_ci
10442365ec6Sopenharmony_ci  public getCameraNewWant(): Want {
10542365ec6Sopenharmony_ci    return this.cameraNewWant;
10642365ec6Sopenharmony_ci  }
10742365ec6Sopenharmony_ci
10842365ec6Sopenharmony_ci  public setCameraNewWant(want: Want): void {
10942365ec6Sopenharmony_ci    this.cameraNewWant = want;
11042365ec6Sopenharmony_ci  }
11142365ec6Sopenharmony_ci
11242365ec6Sopenharmony_ci  public getWindowStage(): window.WindowStage {
11342365ec6Sopenharmony_ci    return this.windowStage;
11442365ec6Sopenharmony_ci  }
11542365ec6Sopenharmony_ci
11642365ec6Sopenharmony_ci  public setWindowStage(stage: window.WindowStage): void {
11742365ec6Sopenharmony_ci    this.windowStage = stage;
11842365ec6Sopenharmony_ci  }
11942365ec6Sopenharmony_ci
12042365ec6Sopenharmony_ci  public getCameraAbilityStageContext(): common.AbilityStageContext {
12142365ec6Sopenharmony_ci    return this.cameraAbilityStageContext;
12242365ec6Sopenharmony_ci  }
12342365ec6Sopenharmony_ci
12442365ec6Sopenharmony_ci  public setCameraAbilityStageContext(context: common.AbilityStageContext): void {
12542365ec6Sopenharmony_ci    this.cameraAbilityStageContext = context;
12642365ec6Sopenharmony_ci  }
12742365ec6Sopenharmony_ci
12842365ec6Sopenharmony_ci  public getCameraWinClass(): window.Window {
12942365ec6Sopenharmony_ci    return this.cameraWinClass;
13042365ec6Sopenharmony_ci  }
13142365ec6Sopenharmony_ci
13242365ec6Sopenharmony_ci  public setCameraWinClass(win: window.Window): void {
13342365ec6Sopenharmony_ci    this.cameraWinClass = win;
13442365ec6Sopenharmony_ci  }
13542365ec6Sopenharmony_ci
13642365ec6Sopenharmony_ci  public getCameraSettingContext(): common.UIAbilityContext {
13742365ec6Sopenharmony_ci    return this.cameraSettingContext;
13842365ec6Sopenharmony_ci  }
13942365ec6Sopenharmony_ci
14042365ec6Sopenharmony_ci  public setCameraSettingContext(context: common.UIAbilityContext): void {
14142365ec6Sopenharmony_ci    this.cameraSettingContext = context;
14242365ec6Sopenharmony_ci  }
14342365ec6Sopenharmony_ci
14442365ec6Sopenharmony_ci  public getCameraWindowStageEvent(): window.WindowStageEventType {
14542365ec6Sopenharmony_ci    return this.cameraWindowStageEvent;
14642365ec6Sopenharmony_ci  }
14742365ec6Sopenharmony_ci
14842365ec6Sopenharmony_ci  public setCameraWindowStageEvent(event: window.WindowStageEventType): void {
14942365ec6Sopenharmony_ci    this.cameraWindowStageEvent = event;
15042365ec6Sopenharmony_ci  }
15142365ec6Sopenharmony_ci
15242365ec6Sopenharmony_ci  public getXComponentController() {
15342365ec6Sopenharmony_ci    return this.xComponentController;
15442365ec6Sopenharmony_ci  }
15542365ec6Sopenharmony_ci
15642365ec6Sopenharmony_ci  public setXComponentController(controller): void {
15742365ec6Sopenharmony_ci    this.xComponentController = controller;
15842365ec6Sopenharmony_ci  }
15942365ec6Sopenharmony_ci
16042365ec6Sopenharmony_ci  public getCameraFormParam() {
16142365ec6Sopenharmony_ci    return this.cameraFormParam;
16242365ec6Sopenharmony_ci  }
16342365ec6Sopenharmony_ci
16442365ec6Sopenharmony_ci  public setCameraFormParam(cameraParam): void {
16542365ec6Sopenharmony_ci    this.cameraFormParam = cameraParam;
16642365ec6Sopenharmony_ci  }
16742365ec6Sopenharmony_ci
16842365ec6Sopenharmony_ci  public setIsPicker(isPicker: boolean): void {
16942365ec6Sopenharmony_ci    this.isPicker = isPicker;
17042365ec6Sopenharmony_ci  }
17142365ec6Sopenharmony_ci
17242365ec6Sopenharmony_ci  public getIsPicker(isPicker: boolean): void {
17342365ec6Sopenharmony_ci    this.isPicker = isPicker;
17442365ec6Sopenharmony_ci  }
17542365ec6Sopenharmony_ci
17642365ec6Sopenharmony_ci  public setSession(session: UIExtensionContentSession): void {
17742365ec6Sopenharmony_ci    Log.info('setSession' + session)
17842365ec6Sopenharmony_ci    this.cameraUIExtensionContentSession = session;
17942365ec6Sopenharmony_ci  }
18042365ec6Sopenharmony_ci
18142365ec6Sopenharmony_ci  public getSession(): UIExtensionContentSession {
18242365ec6Sopenharmony_ci    return this.cameraUIExtensionContentSession;
18342365ec6Sopenharmony_ci  }
18442365ec6Sopenharmony_ci
18542365ec6Sopenharmony_ci  public setPickerUri(pickerUri: string): void {
18642365ec6Sopenharmony_ci    if (pickerUri) {
18742365ec6Sopenharmony_ci      this.pickerUri = pickerUri;
18842365ec6Sopenharmony_ci    } else {
18942365ec6Sopenharmony_ci      this.pickerUri = '';
19042365ec6Sopenharmony_ci    }
19142365ec6Sopenharmony_ci  }
19242365ec6Sopenharmony_ci
19342365ec6Sopenharmony_ci  public getPickerUri(): string {
19442365ec6Sopenharmony_ci    return this.pickerUri;
19542365ec6Sopenharmony_ci  }
19642365ec6Sopenharmony_ci}