/**
* Copyright (c) 2021-2024 Huawei Device Co., Ltd.
* 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 StaticSubscriberExtensionAbility from '@ohos.application.StaticSubscriberExtensionAbility';
import commonEventManager from '@ohos.commonEventManager';
import { Log, CommonEventData} from '../Utils/Log';
import SettingsDataConfig from '../Utils/SettingsDataConfig';
import SettingsDBHelper from '../Utils/SettingsDBHelper';
import { IContent, TableType } from '../common/Common';
import { GlobalContext } from '../Utils/GlobalContext';
const CURRENT_USER_TABLE_DROP: string = `DROP TABLE IF EXISTS ${SettingsDataConfig.USER_TABLE_NAME}_`;
const CURRENT_SECURE_USER_TABLE_DROP: string = `DROP TABLE IF EXISTS ${SettingsDataConfig.SECURE_TABLE_NAME}_`;
const TAG: string = 'UserChangeStaticSubscriber : '
export default class UserChangeStaticSubscriber extends StaticSubscriberExtensionAbility {
private init() {
Log.info('UserChangeStaticSubscriber start')
GlobalContext.getContext().setObject('abilityContext', this.context);
this.context.area = SettingsDBHelper.getInstance().getArea();
}
async onReceiveEvent(event: CommonEventData) {
if (!event || !event.code) {
Log.error('invalid parameters')
return;
}
Log.info(`onReceiveEvent, event: ${event.event}, userId: ${event.code}`);
this.init();
let rdb = await SettingsDBHelper.getInstance().getRdbStore();
switch (event.event) {
case commonEventManager.Support.COMMON_EVENT_USER_ADDED:
// 创建对应用户的数据表
await rdb?.executeSql(SettingsDBHelper.CURRENT_USER_TABLE_CREATE_PREFIX + event.code +
SettingsDBHelper.TABLE_CREATE_SUFFIX, []);
await rdb?.executeSql(SettingsDBHelper.CURRENT_SECURE_TABLE_CREATE_PREFIX + event.code +
SettingsDBHelper.TABLE_CREATE_SUFFIX, []);
Log.info('create settings data table success!')
// 加载用户数据表的默认值
try {
let content = await SettingsDBHelper.getInstance().readDefaultFile() as IContent;
if (!content) {
Log.error('readDefaultFile is failed!');
return
}
// 初始化用户表数据
await SettingsDBHelper.getInstance().initialInsert(SettingsDataConfig.USER_TABLE_NAME + '_' + event.code);
await SettingsDBHelper.getInstance().initialInsert(SettingsDataConfig.SECURE_TABLE_NAME + '_' + event.code);
// 用户数据表包含USER、USER_SECURE
await SettingsDBHelper.getInstance().loadTableData({ settings: content.settings,
user: content.user,
userSecure: content.userSecure }, TableType.USER, event.code as number);
await SettingsDBHelper.getInstance().loadTableData({ settings: content.settings,
user: content.user,
userSecure: content.userSecure }, TableType.USER_SECURE, event.code as number);
} catch (err) {
Log.error('loadDefaultSettingsData failed! err = ' + err);
}
break
case commonEventManager.Support.COMMON_EVENT_USER_REMOVED:
// 删除对应用户数据表
rdb?.executeSql(CURRENT_USER_TABLE_DROP + event.code, []);
rdb?.executeSql(CURRENT_SECURE_USER_TABLE_DROP + event.code, []);
break
default:
break
}
}
}