1df226684Sopenharmony_ci/*
2df226684Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3df226684Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4df226684Sopenharmony_ci * you may not use this file except in compliance with the License.
5df226684Sopenharmony_ci * You may obtain a copy of the License at
6df226684Sopenharmony_ci *
7df226684Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8df226684Sopenharmony_ci *
9df226684Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10df226684Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11df226684Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12df226684Sopenharmony_ci * See the License for the specific language governing permissions and
13df226684Sopenharmony_ci * limitations under the License.
14df226684Sopenharmony_ci */
15df226684Sopenharmony_ciimport configPolicy from '@ohos.configPolicy';
16df226684Sopenharmony_ciimport fs from '@ohos.file.fs'
17df226684Sopenharmony_ciimport common from '@ohos.app.ability.common';
18df226684Sopenharmony_ciimport resourceManager from '@ohos.resourceManager';
19df226684Sopenharmony_ciimport util from '@ohos.util';
20df226684Sopenharmony_ciimport osAccount from '@ohos.account.osAccount';
21df226684Sopenharmony_ciimport { BusinessError } from '@ohos.base';
22df226684Sopenharmony_ciimport GlobalContext from './GlobalContext';
23df226684Sopenharmony_ciimport I18n from '@ohos.i18n';
24df226684Sopenharmony_ciimport { HiLog } from '../common/HiLog';
25df226684Sopenharmony_ci
26df226684Sopenharmony_ciconst TAG = 'ATC';
27df226684Sopenharmony_ciconst SYS_LANGUAGE: string = 'zh-Hans';
28df226684Sopenharmony_ci
29df226684Sopenharmony_ciexport interface AccountTips {
30df226684Sopenharmony_ci  key: string;
31df226684Sopenharmony_ci  description: string;
32df226684Sopenharmony_ci  descriptionEn: string;
33df226684Sopenharmony_ci  isShow: boolean;
34df226684Sopenharmony_ci  value: string;
35df226684Sopenharmony_ci  isTextContent?: boolean;
36df226684Sopenharmony_ci}
37df226684Sopenharmony_ci
38df226684Sopenharmony_ciexport class AccountTipsConfig {
39df226684Sopenharmony_ci  public static configTipsArray: AccountTips[] = [];
40df226684Sopenharmony_ci  public static showContentKey: string = '';
41df226684Sopenharmony_ci  private static ccmConfigPath: string = 'etc/dlp_manager/account_tips.json';
42df226684Sopenharmony_ci  private static configName: string = 'account_tips.json';
43df226684Sopenharmony_ci
44df226684Sopenharmony_ci  public static getConfigTips(): Promise<Array<AccountTips>> {
45df226684Sopenharmony_ci    return new Promise((resolve, reject) => {
46df226684Sopenharmony_ci      try {
47df226684Sopenharmony_ci        if (AccountTipsConfig.configTipsArray?.length === 0) {
48df226684Sopenharmony_ci          AccountTipsConfig.loadCcmConfigs().then((accountTipsArray: Array<AccountTips>) => {
49df226684Sopenharmony_ci            AccountTipsConfig.configTipsArray = accountTipsArray;
50df226684Sopenharmony_ci            resolve(AccountTipsConfig.configTipsArray);
51df226684Sopenharmony_ci          }).catch((err: BusinessError) => {
52df226684Sopenharmony_ci            HiLog.error(TAG, `getConfigTips failed, error: ${JSON.stringify(err)}`);
53df226684Sopenharmony_ci            reject(err);
54df226684Sopenharmony_ci          });
55df226684Sopenharmony_ci        } else {
56df226684Sopenharmony_ci          let accountTipsArray: AccountTips[] = JSON.parse(JSON.stringify(AccountTipsConfig.configTipsArray));
57df226684Sopenharmony_ci          resolve(accountTipsArray);
58df226684Sopenharmony_ci        }
59df226684Sopenharmony_ci      } catch (error) {
60df226684Sopenharmony_ci        HiLog.error(TAG, `getConfigTips error: ${JSON.stringify(error)}`);
61df226684Sopenharmony_ci        reject(error);
62df226684Sopenharmony_ci      }
63df226684Sopenharmony_ci    })
64df226684Sopenharmony_ci  }
65df226684Sopenharmony_ci
66df226684Sopenharmony_ci  public static isSysLanguage(): boolean {
67df226684Sopenharmony_ci    let systemLanguage: string = I18n.System.getSystemLanguage();
68df226684Sopenharmony_ci    return systemLanguage.indexOf(SYS_LANGUAGE) > -1;
69df226684Sopenharmony_ci  }
70df226684Sopenharmony_ci
71df226684Sopenharmony_ci  public static getAccountInfo(authAccount: string): Promise<osAccount.DomainAccountInfo> {
72df226684Sopenharmony_ci    return new Promise(async (resolve, reject) => {
73df226684Sopenharmony_ci      try {
74df226684Sopenharmony_ci        if (!authAccount) {
75df226684Sopenharmony_ci          HiLog.error(TAG, `getAccount failed, authAccount is null.`);
76df226684Sopenharmony_ci          reject();
77df226684Sopenharmony_ci          return;
78df226684Sopenharmony_ci        }
79df226684Sopenharmony_ci        let accountDomain = AppStorage.get('accountDomain') as string;
80df226684Sopenharmony_ci        let domainAccountInfo: osAccount.GetDomainAccountInfoOptions = {
81df226684Sopenharmony_ci          domain: accountDomain,
82df226684Sopenharmony_ci          accountName: authAccount.toLocaleLowerCase().trim()
83df226684Sopenharmony_ci        };
84df226684Sopenharmony_ci        let result = await osAccount.DomainAccountManager.getAccountInfo(domainAccountInfo);
85df226684Sopenharmony_ci        resolve(result);
86df226684Sopenharmony_ci      } catch (error) {
87df226684Sopenharmony_ci        HiLog.error(TAG, `getAccountInfo error: ${JSON.stringify(error)}`);
88df226684Sopenharmony_ci        reject(error);
89df226684Sopenharmony_ci      }
90df226684Sopenharmony_ci    });
91df226684Sopenharmony_ci  }
92df226684Sopenharmony_ci
93df226684Sopenharmony_ci  private static loadCcmConfigs(): Promise<Array<AccountTips>> {
94df226684Sopenharmony_ci    return new Promise((resolve, reject) => {
95df226684Sopenharmony_ci      try {
96df226684Sopenharmony_ci        let filePath: string = configPolicy.getOneCfgFileSync(AccountTipsConfig.ccmConfigPath);
97df226684Sopenharmony_ci        let isExistFile: boolean = fs.accessSync(filePath);
98df226684Sopenharmony_ci        let configStr: string = '';
99df226684Sopenharmony_ci        if (isExistFile) {
100df226684Sopenharmony_ci          configStr = fs.readTextSync(filePath);
101df226684Sopenharmony_ci        } else {
102df226684Sopenharmony_ci          let context: common.UIAbilityContext = getContext() as common.UIAbilityContext;
103df226684Sopenharmony_ci          let resourceManager: resourceManager.ResourceManager = context?.resourceManager;
104df226684Sopenharmony_ci          if (resourceManager === null) {
105df226684Sopenharmony_ci            HiLog.error(TAG, `loadCcmConfigs failed. resourceManager is null.`);
106df226684Sopenharmony_ci            reject();
107df226684Sopenharmony_ci            return;
108df226684Sopenharmony_ci          }
109df226684Sopenharmony_ci          let contentArray: Uint8Array = resourceManager.getRawFileContentSync(AccountTipsConfig.configName);
110df226684Sopenharmony_ci          let textDecoder: util.TextDecoder = util.TextDecoder.create('utf-8', { ignoreBOM: true });
111df226684Sopenharmony_ci          configStr = textDecoder.decodeWithStream(contentArray, { stream: false });
112df226684Sopenharmony_ci        }
113df226684Sopenharmony_ci
114df226684Sopenharmony_ci        let accountTipsArray: AccountTips[] = [];
115df226684Sopenharmony_ci        if (configStr) {
116df226684Sopenharmony_ci          let jsonArray: Object[] = JSON.parse(configStr);
117df226684Sopenharmony_ci          for (let jsonObj of jsonArray) {
118df226684Sopenharmony_ci            let accountTips: AccountTips = jsonObj as AccountTips;
119df226684Sopenharmony_ci            if (accountTips.isTextContent) {
120df226684Sopenharmony_ci              AccountTipsConfig.showContentKey = accountTips.key;
121df226684Sopenharmony_ci            }
122df226684Sopenharmony_ci            accountTipsArray.push(accountTips);
123df226684Sopenharmony_ci          }
124df226684Sopenharmony_ci        }
125df226684Sopenharmony_ci        resolve(accountTipsArray);
126df226684Sopenharmony_ci      } catch (error) {
127df226684Sopenharmony_ci        HiLog.error(TAG, `loadCcmConfigs error: ${JSON.stringify(error)}`);
128df226684Sopenharmony_ci        reject(error);
129df226684Sopenharmony_ci      }
130df226684Sopenharmony_ci    });
131df226684Sopenharmony_ci  }
132df226684Sopenharmony_ci}