/*
* Copyright (c) Huawei Technologies Co., Ltd. 2024-2025. All rights reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Settings from '@ohos.settings';
import { LogUtil } from '../utils/LogUtil';
import { SettingsDataUtils } from '../utils/SettingsDataUtils';
import { PreferencesUtil } from '../utils/PreferencesUtil';
import { DisplayArrayIndex } from './types';
const SETTINGS_DISPLAY_DATA_KEY: string = 'settings.display.allData';
const DISPLAY_EYESHIELD: string = 'settings.eyeshield.enable';
const DISPLAY_DPI: string = 'system_default_dpi_value';
const EXTEND_DPI: string = 'extend_dpi_value';
const DISPLAY_SLEEP_TIME: string = Settings.display.SCREEN_OFF_TIMEOUT;
const DISPLAY_RESOLUTION_STYLE: string = 'settings.display.resolution_style';
const DISPLAY_RESOLUTION_MODE: string = 'settings.display.resolution_mode';
const SETTINGS_CLONED: string = 'settingsCloned';
const THIRTY_SECONDS: string = '30000';
const SMART_RESOLUTION_TYPE: string = '0';
const SCREEN_RESOLUTION_HIGH: string = '3';
const TAG = 'DisplayDataManager : ';
/**
* 设置显示与亮度数据库工具类,用于优化加载显示和亮度数据时耗时过长问题
*
* @author openharmony
* @since 2023-12-29
*/
export class DisplayDataManager {
/**
* 设置数据库-默认DPI数值
*/
public defaultDpiValue: string = '';
/**
* 设置数据库-外屏默认DPI数值
*/
public extendDpiValue: string = '';
/**
* 设置数据库-休眠时间数值
*/
public sleepTime: string = '';
/**
* 设置数据库-屏幕分辨率
*/
public resolutionStyle: string = '';
/**
* 设置数据库-屏幕刷新率
*/
public resolutionMode: string = '';
/**
* 设置数据库-设置搬迁标志
*/
public flagClone: boolean = false;
/**
* 从preference中获取显示与亮度所有数据
*/
public async getDisplayAllSettingsData(): Promise<void> {
LogUtil.info(`${TAG} getDisplayAllSettingsData`);
let keyExist: boolean = await PreferencesUtil.has(SETTINGS_DISPLAY_DATA_KEY);
LogUtil.info(`${TAG} keyExist: ${keyExist}`);
if (!keyExist) {
this.getDisplaySettingData();
SettingsDataUtils.setSettingsData(SETTINGS_CLONED, '0');
return;
}
this.flagClone = SettingsDataUtils.getSettingsData(SETTINGS_CLONED, '1') === '1';
LogUtil.info(`${TAG} flagClone: ${this.flagClone}`);
if (this.flagClone) {
this.getDisplaySettingData();
SettingsDataUtils.setSettingsData(SETTINGS_CLONED, '0');
return;
}
let allData: string = String(await PreferencesUtil.get(SETTINGS_DISPLAY_DATA_KEY, ''));
LogUtil.info(`${TAG} allData: ${allData}`);
let dataArray: string[] = [];
dataArray = allData.split('_');
if (dataArray.length < DisplayArrayIndex.INDEX_6) {
this.getDisplaySettingData();
return;
}
this.defaultDpiValue = dataArray[DisplayArrayIndex.INDEX_1];
this.sleepTime = dataArray[DisplayArrayIndex.INDEX_2];
this.resolutionStyle = dataArray[DisplayArrayIndex.INDEX_3];
this.resolutionMode = dataArray[DisplayArrayIndex.INDEX_4];
this.extendDpiValue = dataArray[DisplayArrayIndex.INDEX_5];
}
public getDefaultDPI(): string {
if (this.defaultDpiValue === '') {
this.defaultDpiValue = SettingsDataUtils.getSettingsData(DISPLAY_DPI, '');
}
return this.defaultDpiValue;
}
public updateDefaultDPI(): void {
this.defaultDpiValue = SettingsDataUtils.getSettingsData(DISPLAY_DPI, '');
PreferencesUtil.put(SETTINGS_DISPLAY_DATA_KEY, this.handleSettingData());
return;
}
public getExtendDPI(): string {
if (this.extendDpiValue === '') {
this.extendDpiValue = SettingsDataUtils.getSettingsData(EXTEND_DPI, '');
}
return this.extendDpiValue;
}
public updateExtendDPI(): void {
this.extendDpiValue = SettingsDataUtils.getSettingsData(EXTEND_DPI, '');
PreferencesUtil.put(SETTINGS_DISPLAY_DATA_KEY, this.handleSettingData());
return;
}
public getSleepTime(): string {
if (this.sleepTime === '') {
this.getDisplaySettingData();
}
return this.sleepTime;
}
public updateSleepTime(): void {
this.sleepTime = SettingsDataUtils.getSettingsData(DISPLAY_SLEEP_TIME, THIRTY_SECONDS);
PreferencesUtil.put(SETTINGS_DISPLAY_DATA_KEY, this.handleSettingData());
return;
}
public getSettingsDataResolutionStyle(): string {
this.updateResolutionStyle();
return this.resolutionStyle;
}
public getResolutionStyle(): string {
if (this.resolutionStyle === '') {
this.getDisplaySettingData();
}
return this.resolutionStyle;
}
public updateResolutionStyle(): void {
this.resolutionStyle = SettingsDataUtils.getSettingsData(DISPLAY_RESOLUTION_STYLE, SMART_RESOLUTION_TYPE);
PreferencesUtil.put(SETTINGS_DISPLAY_DATA_KEY, this.handleSettingData());
return;
}
public getResolutionMode(): string {
if (this.resolutionMode === '') {
this.getDisplaySettingData();
}
return this.resolutionMode;
}
public updateResolutionMode(): void {
this.resolutionMode = SettingsDataUtils.getSettingsData(DISPLAY_RESOLUTION_MODE, SCREEN_RESOLUTION_HIGH);
PreferencesUtil.put(SETTINGS_DISPLAY_DATA_KEY, this.handleSettingData());
return;
}
public getDisplaySettingData(): void {
this.defaultDpiValue = SettingsDataUtils.getSettingsData(DISPLAY_DPI, '');
this.sleepTime = SettingsDataUtils.getSettingsData(DISPLAY_SLEEP_TIME, THIRTY_SECONDS);
this.resolutionStyle = SettingsDataUtils.getSettingsData(DISPLAY_RESOLUTION_STYLE, SMART_RESOLUTION_TYPE);
this.resolutionMode = SettingsDataUtils.getSettingsData(DISPLAY_RESOLUTION_MODE, SCREEN_RESOLUTION_HIGH);
this.extendDpiValue = SettingsDataUtils.getSettingsData(EXTEND_DPI, '');
PreferencesUtil.put(SETTINGS_DISPLAY_DATA_KEY, this.handleSettingData());
return;
}
private handleSettingData(): string {
let dataArray: string[] = [];
dataArray.push(this.defaultDpiValue);
dataArray.push(this.sleepTime);
dataArray.push(this.resolutionStyle);
dataArray.push(this.resolutionMode);
dataArray.push(this.extendDpiValue);
LogUtil.info(`${TAG} handleSettingData: ${dataArray.join('_')}`);
return dataArray.join('_');
}
}
export let displayDataManager = new DisplayDataManager();