• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2024 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 { autoFillManager, AutoFillExtensionAbility, UIExtensionContentSession } from '@kit.AbilityKit';
17import { hilog } from '@kit.PerformanceAnalysisKit';
18
19const TAG: string = 'autoFill';
20const DOMAIN_NUMBER: number = 0xFF00;
21const BOTTOM_LEFT: number = 6;
22
23function suggestWords(input: string, words: string[]): string[] {
24  if (input.length < 1) {
25    return []; // 如果输入的字符少于1个,则不提供联想
26  }
27  return words.filter(word => word.includes(input));
28}
29
30export default class TextAutoFillAbility extends AutoFillExtensionAbility {
31  onCreate(): void {
32    hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'autofill onCreate');
33    AppStorage.setOrCreate('contextEvent', this.context);
34  }
35
36  onDestroy(): void {
37    hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'autofill onDestroy');
38  }
39
40  onSessionDestroy(session: UIExtensionContentSession) {
41    hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'autofill onSessionDestroy');
42    hilog.info(DOMAIN_NUMBER, TAG, 'session content: %{public}s', JSON.stringify(session));
43  }
44
45  onForeground(): void {
46    hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'autofill onForeground');
47  }
48
49  onBackground(): void {
50    hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'autofill onBackground');
51  }
52
53  onUpdateRequest(request: autoFillManager.UpdateRequest): void {
54    hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'autofill onUpdateRequest');
55    let storage = LocalStorage.getShared();
56    let fillCallback = storage.get<autoFillManager.FillRequestCallback>('fillCallback');
57    let size: autoFillManager.PopupSize = {
58      width: 656,
59      height: 149
60    };
61    fillCallback.setAutoFillPopupConfig({
62      popupSize: size,
63      placement: BOTTOM_LEFT
64    });
65    let nameList: string = '';
66    for (let i = 0; i < request.viewData.pageNodeInfos.length; i++) {
67      nameList = request.viewData.pageNodeInfos[i].value;
68    }
69    const words = ['lily', 'linda', 'john', 'tom', 'peter'];
70    let suggestions: Array<string> = suggestWords(nameList, words);
71
72    request.viewData.pageNodeInfos.find((item) => {
73      if (item.isFocus && item.value.length != 0 && item.autoFillType == autoFillManager.AutoFillType.PERSON_FULL_NAME) {
74        this.context.eventHub.emit('updateRequestData', suggestions);
75      }
76    })
77  }
78
79  onFillRequest(session: UIExtensionContentSession, request: autoFillManager.FillRequest, callback: autoFillManager.FillRequestCallback) {
80    hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'autofill onFillRequest');
81    AppStorage.setOrCreate('interface', 'actionStr');
82    try {
83      let storage_fill = new LocalStorage(
84        {
85          'session': session,
86          'message': 'AutoFill Page',
87          'fillCallback': callback,
88          'viewData': request.viewData,
89          'pageNodeInfos': request.viewData.pageNodeInfos,
90          'autoFillType': request.type
91        });
92      let size: autoFillManager.PopupSize = {
93        width: 656,
94        height: 220
95      };
96      callback.setAutoFillPopupConfig({
97        popupSize: size,
98        placement: BOTTOM_LEFT
99      });
100      session.loadContent('autofillpages/SelectorList', storage_fill);
101    } catch (err) {
102      hilog.error(DOMAIN_NUMBER, TAG, '%{public}s', 'autofill failed to load content');
103    }
104  }
105
106  onSaveRequest(session: UIExtensionContentSession, request: autoFillManager.SaveRequest, callback: autoFillManager.SaveRequestCallback) {
107    hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'autofill onSaveRequest');
108    let storage_save = new LocalStorage(
109      {
110        'session': session,
111        'message': 'AutoFill Page',
112        'saveCallback': callback,
113        'viewData': request.viewData
114      });
115    session.loadContent('autofillpages/SavePage', storage_save);
116  }
117}