适配应用分身

Signed-off-by: fanchenxuan <fanchenxuan@huawei.com>
This commit is contained in:
fanchenxuan 2024-11-16 09:02:27 +08:00
parent 2348ce4192
commit f4306b2e47
5 changed files with 45 additions and 13 deletions

View File

@ -17,9 +17,12 @@ import extension from '@ohos.app.ability.ServiceExtensionAbility';
import window from '@ohos.window';
import display from '@ohos.display';
import { GlobalContext } from '../common/utils/globalContext';
import { preferences } from '@kit.ArkData';
import { Configuration } from '@ohos.app.ability.Configuration';
const TAG = 'PermissionManager_Log:';
const BG_COLOR = '#00000000';
let dataPreferences: preferences.Preferences | null = null;
export default class SecurityExtensionAbility extends extension {
/**
@ -46,6 +49,8 @@ export default class SecurityExtensionAbility extends extension {
width: dis.width,
height: dis.height
};
let options: preferences.Options = { name: 'myStore' };
dataPreferences = preferences.getPreferencesSync(this.context, options);
this.createWindow('SecurityDialog' + startId, window.WindowType.TYPE_DIALOG, navigationBarRect, want);
} catch (exception) {
console.error(TAG + 'Failed to obtain the default display object. Code: ' + JSON.stringify(exception));
@ -59,6 +64,14 @@ export default class SecurityExtensionAbility extends extension {
console.info(TAG + 'SecurityExtensionAbility onDestroy.');
}
onConfigurationUpdate(newConfig: Configuration): void {
console.info(TAG + 'onConfigurationUpdate: ' + JSON.stringify(newConfig));
dataPreferences?.putSync('language', newConfig.language);
dataPreferences?.flush(() => {
console.info(TAG + 'dataPreferences update.');
});
}
private async createWindow(name: string, windowType, rect, want): Promise<void> {
console.info(TAG + 'create securityWindow');
let dialogSet: Set<number> = GlobalContext.load('dialogSet');
@ -74,7 +87,7 @@ export default class SecurityExtensionAbility extends extension {
}
try {
const win = await window.createWindow({ ctx: this.context, name, windowType });
let storage: LocalStorage = new LocalStorage({ 'want': want, 'win': win });
let storage: LocalStorage = new LocalStorage({ 'want': want, 'win': win, 'dataPreferences': dataPreferences });
await win.bindDialogTarget(want.parameters['ohos.ability.params.token'].value, () => {
win.destroyWindow();
let dialogSet: Set<number> = GlobalContext.load('dialogSet');

View File

@ -26,10 +26,10 @@ import {
} from '../common/utils/utils';
import { Param, WantInfo } from '../common/model/typedef';
import { GlobalContext } from '../common/utils/globalContext';
import { preferences } from '@kit.ArkData';
import bundleResourceManager from '@ohos.bundle.bundleResourceManager';
let storage = LocalStorage.getShared();
const TAG = 'PermissionManager_Log:';
const RESOURCE_TYPE: number = 10003;
@Entry(storage)
@Component
@ -37,7 +37,9 @@ struct SecurityDialog {
private context = getContext(this) as common.ServiceExtensionContext;
@LocalStorageLink('want') want: WantInfo = new WantInfo([]);
@LocalStorageLink('win') win: window.Window = {} as window.Window;
@State appName: ResourceStr = 'ToBeInstead';
@LocalStorageLink('dataPreferences') dataPreferences: preferences.Preferences | null = null;
@State appName: ResourceStr = 'Application';
@State refreshAppName: boolean = false;
@State index: number = 0;
@State scrollBarWidth: number = Constants.SCROLL_BAR_WIDTH_DEFAULT;
@ -201,6 +203,11 @@ struct SecurityDialog {
this.GetAppName();
this.index = this.want.parameters['ohos.user.security.type'];
this.dialogController?.open();
this.dataPreferences?.on('change', (key: string) => {
Log.info('dataPreferences change.');
this.refreshAppName = true;
this.GetAppName();
})
}
aboutToDisappear() {
@ -208,16 +215,22 @@ struct SecurityDialog {
}
GetAppName() {
let bundleName: string = this.want.parameters['ohos.aafwk.param.callerBundleName'];
bundleManager.getApplicationInfo(bundleName, bundleManager.ApplicationFlag.GET_APPLICATION_INFO_DEFAULT)
.then(data => {
data.labelResource.params = [];
data.labelResource.type = RESOURCE_TYPE;
this.appName = data.labelResource;
let resourceFlag = bundleResourceManager.ResourceFlag.GET_RESOURCE_INFO_ALL;
let uid: number = this.want.parameters['ohos.caller.uid'];
try {
bundleManager.getAppCloneIdentity(uid).then(cloneInfo => {
Log.info(`getAppCloneIdentity: ${JSON.stringify(cloneInfo)}`);
let resourceInfo =
bundleResourceManager.getBundleResourceInfo(cloneInfo.bundleName, resourceFlag, cloneInfo.appIndex);
this.appName === resourceInfo?.label && this.refreshAppName ?
this.GetAppName() : this.appName = resourceInfo?.label;
this.refreshAppName = false;
}).catch((err: BusinessError) => {
Log.error(`getAppCloneIdentity failed: ${JSON.stringify(err)}`);
})
.catch((error: BusinessError) => {
Log.error('getApplicationInfo failed. err is ' + JSON.stringify(error));
});
} catch (err) {
Log.error(`get appName failed: ${JSON.stringify(err)}`);
}
}
destruction() {

View File

@ -99,6 +99,9 @@
{
"name": "ohos.permission.GET_BUNDLE_INFO"
},
{
"name": "ohos.permission.GET_BUNDLE_RESOURCES"
},
{
"name": "ohos.permission.PERMISSION_USED_STATS"
},

View File

@ -111,6 +111,9 @@
{
"name": "ohos.permission.GET_BUNDLE_INFO"
},
{
"name": "ohos.permission.GET_BUNDLE_RESOURCES"
},
{
"name": "ohos.permission.PERMISSION_USED_STATS"
},

Binary file not shown.