• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2* Copyright (c) 2023 Huawei Device Co., Ltd.
3* Licensed under the Apache License, Version 2.0 (the "License");
4* you may not use this file except in compliance with the License.
5* You may obtain a copy of the License at
6*
7*     http://www.apache.org/licenses/LICENSE-2.0
8*
9* Unless required by applicable law or agreed to in writing, software
10* distributed under the License is distributed on an "AS IS" BASIS,
11* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12* See the License for the specific language governing permissions and
13* limitations under the License.
14*/
15
16import UIAbility from '@ohos.app.ability.UIAbility';
17import hilog from '@ohos.hilog';
18import type window from '@ohos.window';
19import commonEvent from '@ohos.commonEventManager';
20import fs, { type Filter } from '@ohos.file.fs';
21
22const BUFSIZE = 1024;
23let DELAY_TIME = 100;
24let CLEAN_TEMP_DELAY_TIME = 1000;
25let OFFSETNUMBER = 0;
26
27let message;
28let secondMessage;
29let result;
30let files;
31let secFiles;
32let commonEventData = {
33  parameters: {
34    message: message,
35    secondMessage: secondMessage,
36    result: result,
37    files: files,
38    secFiles: secFiles
39  }
40};
41let actionStr;
42let tempDir;
43let applicationContext;
44let applicationTempDir;
45let currentContext;
46
47function getListFile(dir): number {
48  class ListFileOption {
49    public recursion: boolean = false;
50    public listNum: number = 0;
51    public filter: Filter = {};
52  }
53
54  let option = new ListFileOption();
55  option.filter.displayName = ['temp_useless*'];
56  let files = fs.listFileSync(dir, option);
57  for (let i = 0; i < files.length; i++) {
58    console.info(`The name of file: ${files[i]}`);
59  }
60  return files.length;
61}
62
63function startAndTerminate(action): void {
64  setTimeout(() => {
65    currentContext.startAbility(
66      {
67        bundleName: 'com.acts.cleancachefilesreply',
68        abilityName: 'SecondAbility',
69        parameters: {
70          key: action
71        }
72      }, (err) => {
73      console.log(action + ' startAbility err: ' + JSON.stringify(err));
74      if (action !== 'Acts_CleanTempFiles_0203') {
75        setTimeout(() => {
76          currentContext.terminateSelf().then(() => {
77            console.log(action + 'rely terminateSelf end');
78          }).catch((err) => {
79            console.log(action + 'rely terminateSelf err: ' + JSON.stringify(err));
80          });
81        }, DELAY_TIME);
82      }
83    });
84  }, DELAY_TIME);
85}
86
87function onForegroundInner(actionStr): void {
88  if (actionStr === 'Acts_CleanTempFiles_0201') {
89    let file = fs.openSync(tempDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
90    let writeLen = fs.writeSync(file.fd, 'Try to write str.');
91    let buf = new ArrayBuffer(BUFSIZE);
92    let readLen = fs.readSync(file.fd, buf, {
93      offset: OFFSETNUMBER
94    });
95    let readBuf = String.fromCharCode.apply(null, new Uint8Array(buf.slice(OFFSETNUMBER, readLen)));
96    console.log('Acts_CleanTempFiles_0201 writeLen is: ' + writeLen + 'readBuf is: ' + readBuf);
97    fs.closeSync(file);
98    commonEventData.parameters.message = readBuf;
99
100    let applicationFile = fs.openSync(applicationTempDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
101    let applicationWriteLen = fs.writeSync(applicationFile.fd, 'Try to write application str.');
102    let applicationReadLen = fs.readSync(applicationFile.fd, buf, {
103      offset: OFFSETNUMBER
104    });
105    let applicReadBuf = String.fromCharCode.apply(null, new Uint8Array(buf.slice(OFFSETNUMBER, applicationReadLen)));
106    console.log('Acts_CleanTempFiles_0201 secWriteLen is: ' + applicationWriteLen + 'secreadBuf is: ' + applicReadBuf);
107    fs.closeSync(applicationFile);
108    commonEventData.parameters.secondMessage = applicReadBuf;
109    commonEvent.publish('Acts_CleanTempFiles_0201', commonEventData, (err) => {
110      console.log('Acts_CleanTempFiles_0201 publish err: ' + JSON.stringify(err));
111      startAndTerminate('Acts_CleanTempFiles_0203');
112    });
113  } else if (actionStr === 'Acts_CleanTempFiles_0202') {
114    setTimeout(() => {
115      let file = fs.openSync(tempDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
116      let buf = new ArrayBuffer(BUFSIZE);
117      let readLen = fs.readSync(file.fd, buf, {
118        offset: OFFSETNUMBER
119      });
120      fs.closeSync(file);
121      let readBuf = String.fromCharCode.apply(null, new Uint8Array(buf.slice(OFFSETNUMBER, readLen)));
122      commonEventData.parameters.message = readBuf;
123
124      let applicationFile = fs.openSync(applicationTempDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
125      let applicationReadLen = fs.readSync(applicationFile.fd, buf, {
126        offset: OFFSETNUMBER
127      });
128      fs.closeSync(applicationFile);
129      let applicaReadBuf = String.fromCharCode.apply(null, new Uint8Array(buf.slice(OFFSETNUMBER, applicationReadLen)));
130      console.log('Acts_CleanTempFiles_0202 application Message: ' + JSON.stringify(applicationReadLen));
131      commonEventData.parameters.secondMessage = applicaReadBuf;
132      commonEvent.publish('Acts_CleanTempFiles_0202', commonEventData, (err) => {
133        console.log('Acts_CleanTempFiles_0202 publish err: ' + JSON.stringify(err));
134        startAndTerminate('Acts_CleanTempFiles_0204');
135      });
136    }, CLEAN_TEMP_DELAY_TIME)
137  }
138  cleanTempFiles(actionStr);
139}
140
141function cleanTempFiles(actionStr): void {
142  if (actionStr === 'Acts_CleanTempFiles_0301') {
143    AppStorage.setOrCreate('message', actionStr);
144    let file = fs.openSync(tempDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
145    let writeLen = fs.writeSync(file.fd, 'Try to write Acts_CleanTempFiles_0301 str.');
146    console.log('Acts_CleanTempFiles_0301 The length of str is: ' + writeLen);
147    let buf = new ArrayBuffer(BUFSIZE);
148    let readLen = fs.readSync(file.fd, buf, {
149      offset: OFFSETNUMBER
150    });
151    let readBuf = String.fromCharCode.apply(null, new Uint8Array(buf.slice(OFFSETNUMBER, readLen)));
152    console.log('Acts_CleanTempFiles_0301 the content of file: ' + readBuf);
153    fs.closeSync(file);
154    console.log('Acts_CleanTempFiles_0301 Message: ' + JSON.stringify(readBuf));
155    commonEventData.parameters.message = readBuf;
156    commonEvent.publish('Acts_CleanTempFiles_0301', commonEventData, (err) => {
157      console.log('Acts_CleanTempFiles_0301 publish err: ' + JSON.stringify(err));
158      setTimeout(() => {
159        this.context.terminateSelf();
160      }, DELAY_TIME);
161    });
162  } else if (actionStr === 'Acts_CleanTempFiles_0302') {
163    setTimeout(() => {
164      AppStorage.setOrCreate('message', actionStr);
165      let file = fs.openSync(tempDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
166      let buf = new ArrayBuffer(BUFSIZE);
167      let readLen = fs.readSync(file.fd, buf, {
168        offset: OFFSETNUMBER
169      });
170      fs.closeSync(file);
171      let readBuf = String.fromCharCode.apply(null, new Uint8Array(buf.slice(OFFSETNUMBER, readLen)));
172      console.log('Acts_CleanTempFiles_0302 Message: ' + JSON.stringify(readLen));
173      commonEventData.parameters.message = readBuf;
174      commonEvent.publish('Acts_CleanTempFiles_0302', commonEventData, (err) => {
175        console.log('Acts_CleanTempFiles_0302 publish err: ' + JSON.stringify(err));
176        currentContext.terminateSelf();
177      });
178    }, CLEAN_TEMP_DELAY_TIME)
179  }
180}
181
182export default class EntryAbility extends UIAbility {
183  onCreate(want): void {
184    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
185    actionStr = want.parameters.key;
186    tempDir = this.context.tempDir;
187    currentContext = this.context;
188    applicationContext = this.context.getApplicationContext();
189    applicationTempDir = applicationContext.tempDir;
190  }
191  onNewWant(want): void {
192    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onNewWant');
193    actionStr = want.parameters.key;
194    tempDir = this.context.tempDir;
195    currentContext = this.context;
196    applicationContext = this.context.getApplicationContext();
197    applicationTempDir = applicationContext.tempDir;
198    onForegroundInner(actionStr);
199  }
200  onDestroy(): void {
201    hilog.info(0x0000, 'EntryAbility', '%{public}s', 'Ability onDestroy');
202  }
203
204  onWindowStageCreate(windowStage: window.WindowStage): void {
205    hilog.info(0x0000, 'EntryAbility', '%{public}s', 'Ability onWindowStageCreate');
206
207    windowStage.loadContent('pages/Index', (err, data) => {
208      if (err.code) {
209        hilog.error(0x0000, 'EntryAbility', 'Failed to load the content. Cause: ', JSON.stringify(err) ?? '');
210        return;
211      }
212      hilog.info(0x0000, 'EntryAbility', 'Succeeded in loading the content. Data: ', JSON.stringify(data) ?? '');
213    });
214  }
215
216  onWindowStageDestroy(): void {
217    hilog.info(0x0000, 'EntryAbility', '%{public}s', 'Ability onWindowStageDestroy');
218  }
219
220  onForeground(): void {
221    if (actionStr === 'Acts_CleanTempFiles_0101') {
222      let file = fs.openSync(tempDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
223      let writeLen = fs.writeSync(file.fd, 'Try to write str.');
224      let buf = new ArrayBuffer(BUFSIZE);
225      let readLen = fs.readSync(file.fd, buf, {
226        offset: OFFSETNUMBER
227      });
228      let readBuf = String.fromCharCode.apply(null, new Uint8Array(buf.slice(OFFSETNUMBER, readLen)));
229      console.log('Acts_CleanTempFiles_0101 writeLen is: ' + writeLen + 'readBuf is: ' + readBuf);
230      fs.closeSync(file);
231      commonEventData.parameters.message = readBuf;
232      let applicationFile = fs.openSync(applicationTempDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
233      let applicationWriteLen = fs.writeSync(applicationFile.fd, 'Try to write application str.');
234      let applicationReadLen = fs.readSync(applicationFile.fd, buf, {
235        offset: OFFSETNUMBER
236      });
237      let applicaReadBuf = String.fromCharCode.apply(null, new Uint8Array(buf.slice(OFFSETNUMBER, applicationReadLen)));
238      fs.closeSync(applicationFile);
239      console.log('Acts_CleanTempFiles_0101 secWriteLen: ' + applicationWriteLen + 'secreadBuf: ' + applicaReadBuf);
240      commonEventData.parameters.secondMessage = applicaReadBuf;
241      commonEvent.publish('Acts_CleanTempFiles_0101', commonEventData, (err) => {
242        console.log('Acts_CleanTempFiles_0101 publish err: ' + JSON.stringify(err));
243        startAndTerminate('Acts_CleanTempFiles_0103');
244      });
245    } else if (actionStr === 'Acts_CleanTempFiles_0102') {
246      setTimeout(() => {
247        let file = fs.openSync(tempDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
248        let buf = new ArrayBuffer(BUFSIZE);
249        let readLen = fs.readSync(file.fd, buf, {
250          offset: OFFSETNUMBER
251        });
252        fs.closeSync(file);
253        commonEventData.parameters.message = readLen;
254        let dir = tempDir.split('temp');
255        commonEventData.parameters.files = getListFile(dir[0]);
256        let applicationFile =
257          fs.openSync(applicationTempDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
258        let applicationReadLen = fs.readSync(applicationFile.fd, buf, {
259          offset: OFFSETNUMBER
260        });
261        fs.closeSync(applicationFile);
262        commonEventData.parameters.secondMessage = applicationReadLen;
263        let secDir = tempDir.split('temp');
264        commonEventData.parameters.secFiles = getListFile(secDir[0]);
265        commonEvent.publish('Acts_CleanTempFiles_0102', commonEventData, (err) => {
266          console.log('Acts_CleanTempFiles_0102 publish err: ' + JSON.stringify(err));
267          startAndTerminate('Acts_CleanTempFiles_0104');
268        });
269      }, CLEAN_TEMP_DELAY_TIME)
270    }
271    onForegroundInner(actionStr);
272  }
273
274  onBackground(): void {
275    hilog.info(0x0000, 'EntryAbility', '%{public}s', 'Ability onBackground');
276  }
277}