- import { hilog } from '@kit.PerformanceAnalysisKit';
- import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
- import { commonType, distributedDataObject } from '@kit.ArkData';
- import { BusinessError } from '@kit.BasicServicesKit';
-
- export class ContentInfo {
- public mainTitle: string | undefined;
- public textContent: string | undefined;
- public imageUriArray: Array<ImageInfo> | undefined;
- public isShowLocalInfo: boolean | undefined;
- public isAddLocalInfo: boolean | undefined;
- public selectLocalInfo: string | undefined;
- public attachments?: commonType.Assets | undefined;
-
- constructor(
- mainTitle: string | undefined,
- textContent: string | undefined,
- imageUriArray: Array<ImageInfo> | undefined,
- isShowLocalInfo: boolean | undefined,
- isAddLocalInfo: boolean | undefined,
- selectLocalInfo: string | undefined,
- attachments?: commonType.Assets | undefined
- ) {
- this.mainTitle = mainTitle;
- this.textContent = textContent;
- this.imageUriArray = imageUriArray;
- this.isShowLocalInfo = isShowLocalInfo;
- this.isAddLocalInfo = isAddLocalInfo;
- this.selectLocalInfo = selectLocalInfo;
- this.attachments = attachments;
- }
-
- flatAssets(): object {
- let obj: object = this;
- if (!this.attachments) {
- return obj;
- }
- for (let i = 0; i < this.attachments.length; i++) {
- obj[`attachments${i}`] = this.attachments[i];
- }
- return obj;
- }
- }
-
- export interface ImageInfo {
-
- imagePixelMap: PixelMap;
-
-
- imageName: string;
- }
-
- const DOMAIN: number = 0x0000;
- const TAG: string = '[DistributedDataObject]';
- let dataObject: distributedDataObject.DataObject;
-
- export default class EntryAbility extends UIAbility {
- private imageUriArray: Array<ImageInfo> = [];
- private distributedObject: distributedDataObject.DataObject | undefined = undefined;
-
-
- async onContinue(wantParam: Record<string, Object | undefined>): Promise<AbilityConstant.OnContinueResult> {
-
- try {
- let sessionId: string = distributedDataObject.genSessionId();
- wantParam.distributedSessionId = sessionId;
-
- let distrUriArray: string[] = [];
- let assetUriArray = AppStorage.get<Array<string>>('assetUriArray');
- if (assetUriArray) {
- distrUriArray = assetUriArray;
- }
-
- let contentInfo: ContentInfo = new ContentInfo(
- AppStorage.get('mainTitle'),
- AppStorage.get('textContent'),
- AppStorage.get('imageUriArray'),
- AppStorage.get('isShowLocalInfo'),
- AppStorage.get('isAddLocalInfo'),
- AppStorage.get('selectLocalInfo'),
- );
- let source = contentInfo.flatAssets();
- this.distributedObject = distributedDataObject.create(this.context, source);
-
-
- if (assetUriArray?.length === 1) {
- this.distributedObject?.setAsset('attachments', distrUriArray[0]).then(() => {
- hilog.info(DOMAIN, TAG, 'OnContinue setAsset');
- })
- } else {
- this.distributedObject?.setAssets('attachments', distrUriArray).then(() => {
- hilog.info(DOMAIN, TAG, 'OnContinue setAssets');
- })
- }
-
- this.distributedObject?.setSessionId(sessionId);
- this.distributedObject?.save(wantParam.targetDevice as string).catch((err: BusinessError) => {
- hilog.error(DOMAIN, TAG, 'OnContinue failed to save. code: ', err.code);
- hilog.error(DOMAIN, TAG, 'OnContinue failed to save. message: ', err.message);
- });
- } catch (error) {
- hilog.error(DOMAIN, TAG, 'OnContinue failed code: ', error.code);
- hilog.error(DOMAIN, TAG, 'OnContinue failed message: ', error.message);
- }
- hilog.info(DOMAIN, TAG, 'OnContinue success!');
- return AbilityConstant.OnContinueResult.AGREE;
- }
-
-
- onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
- if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION) {
- if (want.parameters && want.parameters.distributedSessionId) {
- this.restoreDistributedObject(want);
- }
- }
- }
-
-
- onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
- if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION) {
- if (want.parameters && want.parameters.distributedSessionId) {
- this.restoreDistributedObject(want);
- }
- }
- }
-
- async restoreDistributedObject(want: Want): Promise<void> {
- if (!want.parameters || !want.parameters.distributedSessionId) {
- hilog.error(DOMAIN, TAG, 'missing sessionId');
- return;
- }
-
-
- let mailInfo: ContentInfo = new ContentInfo(undefined, undefined, [], undefined, undefined, undefined, undefined);
- dataObject = distributedDataObject.create(this.context, mailInfo);
-
-
- dataObject.on('status', (sessionId: string, networkId: string, status: string) => {
- hilog.info(DOMAIN, TAG, `status change, sessionId: ${sessionId}`);
- hilog.info(DOMAIN, TAG, `status change, networkId: ${networkId}`);
- if (status === 'restored') {
- hilog.info(DOMAIN, TAG, `title: ${dataObject['title']}, text: ${dataObject['text']}`);
- AppStorage.setOrCreate('mainTitle', dataObject['mainTitle']);
- AppStorage.setOrCreate('textContent', dataObject['textContent']);
- AppStorage.setOrCreate('imageUriArray', dataObject['imageUriArray']);
- AppStorage.setOrCreate('isShowLocalInfo', dataObject['isShowLocalInfo']);
- AppStorage.setOrCreate('isAddLocalInfo', dataObject['isAddLocalInfo']);
- AppStorage.setOrCreate('selectLocalInfo', dataObject['selectLocalInfo']);
- AppStorage.setOrCreate<Array<ImageInfo>>('imageUriArray', this.imageUriArray);
- }
- });
-
-
- let sessionId = want.parameters.distributedSessionId as string;
- hilog.info(DOMAIN, TAG, `get sessionId: ${sessionId}`);
- dataObject.setSessionId(sessionId);
- }
- }