WindowModel.ets 3.06 KB
import window from '@ohos.window';
import { BusinessError } from '@ohos.base';
import deviceInfo from '@ohos.deviceInfo'
import display from '@ohos.display';

export class Size {
  width: number = 0
  height: number = 0

  constructor(width: number, height: number) {
    this.width = width;
    this.height = height;
  }
}

export class WindowModel {
  private windowStage?: window.WindowStage;

  static shared: WindowModel = new WindowModel()

  static TAG = "WindowModel";

  setWindowStage(windowStage: window.WindowStage) {
    this.windowStage = windowStage;
  }

  setMainWindowFullScreen(fullScreen: boolean) {
    if (deviceInfo.deviceType != "phone") {
      return
    }
    if (this.windowStage === undefined) {
      return;
    }
    this.windowStage.getMainWindow((err, windowClass: window.Window) => {
      if (err.code) {
        return;
      }
      windowClass.setWindowLayoutFullScreen(fullScreen, (err) => {
        if (err.code) {
          return;
        }
      });
      windowClass.setWindowSystemBarEnable(fullScreen ? [] : ['status', 'navigation'], (err) => {
        if (err.code) {
          return;
        }
      });
    });
  }

  getWindowSize(): Promise<Size> {
    return new Promise((resolve, reject) => {
      if (!this.windowStage) {
        let dis = display.getDefaultDisplaySync();
        reject(new Size(dis.width, dis.height))
        return;
      }
      let rect = this.windowStage.getMainWindowSync().getWindowProperties().windowRect;
      resolve(new Size(rect.width, rect.height));
    });
  }

  setWindowKeepScreenOn(isKeepScreenOn: boolean) {
    this.windowStage?.getMainWindow((err, windowClass: window.Window) => {
      windowClass.setWindowKeepScreenOn(isKeepScreenOn, (err: BusinessError) => {
        const errCode: number = err.code;
        if (errCode) {
          console.error(WindowModel.TAG +'设置屏幕常亮:' + isKeepScreenOn + ',失败: ' + JSON.stringify(err));
          return;
        }
        console.info(WindowModel.TAG +'设置屏幕常亮:' + isKeepScreenOn + ",成功");
      })
    })
  }

  /**
   * 设置窗口的显示方向属性
   * @param orientation
   */
  setPreferredOrientation(orientation: window.Orientation): Promise<void> {
    return new Promise((resolve, reject) => {
      if (!this.windowStage) {
        console.error('Failed, the main window is empty');
        reject("Failed, the main window is empty")
        return;
      }
      this.windowStage.getMainWindow((err: BusinessError, windowClass: window.Window) => {
        if (err.code) {
          console.error('Failed to obtain the main window. Cause: ' + err.message);
          reject(err)
          return;
        }
        // 2.设置窗口的显示方向属性,使用Promise异步回调。
        windowClass.setPreferredOrientation(orientation).then(() => {
          console.info('Succeeded in setting the window orientation.');
          resolve()
        }).catch((err: BusinessError) => {
          console.error('Failed to set the window orientation. Cause: ' + err.message);
          reject(err)
        });
      });
    })
  }
}