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}