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 {Log} from '../utils/Log'; 17c36cf2e9Sopenharmony_ciimport {GlobalThisStorageKey} from './GlobalThisStorageKey'; 18c36cf2e9Sopenharmony_ci 19c36cf2e9Sopenharmony_ciconst TAG = 'GlobalThisHelper'; 20c36cf2e9Sopenharmony_ci 21c36cf2e9Sopenharmony_ciexport class GlobalThisHelper { 22c36cf2e9Sopenharmony_ci private static registerKeys = [ 23c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_PRINT_ADAPTER, 24c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_MEDIA_SIZE_UTIL, 25c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_MAIN_ABILITY_CONTEXT, 26c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_MAIN_ABILITY_WINDOW_STAGE, 27c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_JOB_MANAGER_ABILITY_CONTEXT, 28c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_NOTIFICATION_PRINTER_NAME, 29c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_SERVICE_FIRST_START, 30c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_PRINTER_SELECT_DIALOG_OPEN, 31c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_CURRENT_PIXELMAP, 32c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_PREFERENCES_ADAPTER, 33c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_SECURITY_GUARD, 34c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_IMAGE_ERROR_COUNT, 35c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_IMAGE_ERROR_NAME, 36c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_ABILITY_CONTEXT, 37c36cf2e9Sopenharmony_ci GlobalThisStorageKey.KEY_FILES_DIR 38c36cf2e9Sopenharmony_ci ]; 39c36cf2e9Sopenharmony_ci 40c36cf2e9Sopenharmony_ci /** 41c36cf2e9Sopenharmony_ci * 将变量value挂载到globalThis实例上,key需要先注册到registerKeys,否则挂载失败 42c36cf2e9Sopenharmony_ci * 注意本接口可保存原对象 43c36cf2e9Sopenharmony_ci * 44c36cf2e9Sopenharmony_ci * @param value 变量值 45c36cf2e9Sopenharmony_ci * @param storageKey 保存的key值 46c36cf2e9Sopenharmony_ci * @param forceChange 47c36cf2e9Sopenharmony_ci * @returns 挂载成功返回value,失败返回undefined 48c36cf2e9Sopenharmony_ci */ 49c36cf2e9Sopenharmony_ci public static createValue<T>(value: T, storageKey: string, forceChange: boolean = false): T { 50c36cf2e9Sopenharmony_ci const element = GlobalThisHelper.registerKeys.find((ele) => ele === storageKey); 51c36cf2e9Sopenharmony_ci if (element === undefined) { 52c36cf2e9Sopenharmony_ci Log.error(TAG, 'Can not find register storageKey: ' + JSON.stringify(storageKey)); 53c36cf2e9Sopenharmony_ci return undefined; 54c36cf2e9Sopenharmony_ci } 55c36cf2e9Sopenharmony_ci if ((globalThis[storageKey] === undefined) || forceChange) { 56c36cf2e9Sopenharmony_ci globalThis[storageKey] = value; 57c36cf2e9Sopenharmony_ci Log.error(TAG, 'GlobalThisHelper Create key of ' + JSON.stringify(storageKey)); 58c36cf2e9Sopenharmony_ci } 59c36cf2e9Sopenharmony_ci return <T>(globalThis[storageKey]); 60c36cf2e9Sopenharmony_ci } 61c36cf2e9Sopenharmony_ci 62c36cf2e9Sopenharmony_ci /** 63c36cf2e9Sopenharmony_ci * 将变量value挂载到AppStorage实例上,key需要先注册到registerKeys,否则挂载失败 64c36cf2e9Sopenharmony_ci * 注意本接口重新new了一个新对象,如需保存原对象不要使用本接口 65c36cf2e9Sopenharmony_ci * 66c36cf2e9Sopenharmony_ci * @returns 挂载成功返回value,失败返回undefined 67c36cf2e9Sopenharmony_ci */ 68c36cf2e9Sopenharmony_ci public static createObject<T>(objectClass: { new(...input): T }, storageKey: string, ...input): T { 69c36cf2e9Sopenharmony_ci const element = GlobalThisHelper.registerKeys.find((ele) => ele === storageKey); 70c36cf2e9Sopenharmony_ci if (element === undefined) { 71c36cf2e9Sopenharmony_ci Log.error(TAG, 'Can not find register storageKey: ' + JSON.stringify(storageKey)); 72c36cf2e9Sopenharmony_ci return undefined; 73c36cf2e9Sopenharmony_ci } 74c36cf2e9Sopenharmony_ci if (globalThis[storageKey] === undefined) { 75c36cf2e9Sopenharmony_ci globalThis[storageKey] = new objectClass(...input); 76c36cf2e9Sopenharmony_ci Log.error(TAG, 'GlobalThisHelper Create key of ' + JSON.stringify(storageKey)); 77c36cf2e9Sopenharmony_ci } 78c36cf2e9Sopenharmony_ci 79c36cf2e9Sopenharmony_ci // 通过globalThis存取值 80c36cf2e9Sopenharmony_ci return (globalThis[storageKey] as T); 81c36cf2e9Sopenharmony_ci } 82c36cf2e9Sopenharmony_ci 83c36cf2e9Sopenharmony_ci /** 84c36cf2e9Sopenharmony_ci * 获取挂载到globalThis上的全局变量 85c36cf2e9Sopenharmony_ci * 86c36cf2e9Sopenharmony_ci * @returns 成功返回value,若之前未挂载则返回undefined 87c36cf2e9Sopenharmony_ci */ 88c36cf2e9Sopenharmony_ci public static getValue<T>(storageKey: string): T { 89c36cf2e9Sopenharmony_ci if (globalThis[storageKey] === undefined) { 90c36cf2e9Sopenharmony_ci Log.error(TAG, 'The storageKey is not exist, key = ' + storageKey); 91c36cf2e9Sopenharmony_ci return undefined; 92c36cf2e9Sopenharmony_ci } 93c36cf2e9Sopenharmony_ci return (globalThis[storageKey] as T); 94c36cf2e9Sopenharmony_ci } 95c36cf2e9Sopenharmony_ci}