1# AutoFillRequest (System API) 2 3 4The module provides page data and callbacks when a callback is triggered for the AutoFillExtensionAbility. 5 6> **NOTE** 7> 8> The initial APIs of this module are supported since API version 11. Newly added APIs will be marked with a superscript to indicate their earliest API version. 9> The APIs provided by this module are system APIs. 10> The APIs of this module can be used only in the stage model. 11 12## Modules to Import 13 14```ts 15import { autoFillManager } from '@kit.AbilityKit'; 16``` 17 18## FillRequest 19 20Defines the information about an auto-fill request. 21 22**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 23 24| Name | Type | Read-Only| Optional| Description | 25| ----------- | -------------------- | ---- | ---- | ------------------------------------------------------------ | 26| type | [AutoFillType](js-apis-inner-application-autoFillType-sys.md) | No | No | Type of the element to be automatically filled in. | 27| viewData | [ViewData](js-apis-inner-application-viewData-sys.md) | No | No | Page data. | 28| customData<sup>13+</sup> | [CustomData](js-apis-inner-application-customData-sys.md) | No | No | Custom data. | 29| isPopup<sup>12+</sup> | boolean | No | No | Whether a dialog box is displayed for the auto-fill request.<br>**true**: A dialog box is displayed<br>**false**: A modal window is displayed | 30 31## SaveRequest 32 33Defines the information about an auto-saving request. 34 35**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 36 37| Name | Type | Read-Only| Optional| Description | 38| ----------- | -------------------- | ---- | ---- | ------------------------------------------------------------ | 39| viewData | [ViewData](js-apis-inner-application-viewData-sys.md) | No | No | Page data. | 40 41## UpdateRequest<sup>12+</sup> 42 43Defines the information about an auto-update request. 44 45**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 46 47| Name | Type | Read-Only| Optional| Description | 48| ----------- | -------------------- | ---- | ---- | ------------------------------------------------------------ | 49| viewData | [ViewData](js-apis-inner-application-viewData-sys.md) | No | No | Page data. | 50 51## FillResponse 52 53Defines the information about the response to an auto-fill request. 54 55**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 56 57| Name | Type | Read-Only| Optional| Description | 58| ----------- | -------------------- | ---- | ---- | ------------------------------------------------------------ | 59| viewData | [ViewData](js-apis-inner-application-viewData-sys.md) | No | No | Page data. | 60 61## FillRequestCallback 62 63Implements callbacks for an auto-fill request, which is used to automatically fill in or generate a password. The callbacks can be used to notify the client of the success or failure of the request. 64 65### onSuccess 66 67onSuccess(response: FillResponse): void 68 69Called when an auto-fill request is successfully processed. 70 71**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 72 73**Parameters** 74 75| Name| Type| Mandatory| Description| 76| -------- | -------- | -------- | ------------------------------ | 77| response | [FillResponse](#fillresponse) | Yes| Information about the response to the auto-fill request.| 78 79**Error codes** 80 81For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md). 82 83| ID| Error Message| 84| ------- | -------------------------------- | 85| 202 | Permission denied, non-system app called system api. | 86| 401 | Mandatory parameters are left unspecified. | 87| 16000050 | Internal error. | 88 89**Example** 90 91```ts 92// MyAutoFillExtensionAbility.ts 93import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 94import { hilog } from '@kit.PerformanceAnalysisKit'; 95 96class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 97 onFillRequest(session: UIExtensionContentSession, 98 request: autoFillManager.FillRequest, 99 callback: autoFillManager.FillRequestCallback) { 100 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest'); 101 try { 102 let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = { 103 'fillCallback': callback, 104 'message': 'AutoFill Page', 105 'viewData': request.viewData, 106 } 107 let storage_fill = new LocalStorage(storageData); 108 if (session) { 109 session.loadContent('pages/AutoFillPage', storage_fill); 110 } else { 111 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 112 } 113 } catch (err) { 114 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 115 } 116 } 117} 118``` 119 120```ts 121// AutoFillPage.ets 122import { autoFillManager } from '@kit.AbilityKit'; 123import { BusinessError } from '@kit.BasicServicesKit'; 124import { hilog } from '@kit.PerformanceAnalysisKit'; 125 126@Entry 127@Component 128struct AutoFillPage { 129 storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage(); 130 fillCallback: autoFillManager.FillRequestCallback | undefined = 131 this.storage?.get<autoFillManager.FillRequestCallback>('fillCallback'); 132 viewData: autoFillManager.ViewData | undefined = this.storage?.get<autoFillManager.ViewData>('viewData'); 133 134 build() { 135 Row() { 136 Column() { 137 Text('AutoFill Page') 138 .fontSize(50) 139 .fontWeight(FontWeight.Bold) 140 } 141 142 Button('onSuccess') 143 .onClick(() => { 144 if (this.viewData) { 145 this.viewData.pageNodeInfos[0].value = 'user1'; 146 this.viewData.pageNodeInfos[1].value = 'user1 password'; 147 this.viewData.pageNodeInfos[2].value = 'user1 generate new password'; 148 hilog.info(0x0000, 'testTag', 'autofill success with viewData: %{public}s', JSON.stringify(this.viewData)); 149 try { 150 this.fillCallback?.onSuccess({ viewData: this.viewData }); 151 } catch (error) { 152 console.error(`catch error, code: ${(error as BusinessError).code}, 153 message: ${(error as BusinessError).message}`); 154 } 155 } 156 }) 157 .width('100%') 158 } 159 .height('100%') 160 } 161} 162``` 163 164### onFailure 165 166onFailure(): void 167 168Called when an auto-fill request fails to be processed. 169 170**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 171 172**Error codes** 173 174For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md). 175 176| ID| Error Message| 177| ------- | -------------------------------- | 178| 202 | Permission denied, non-system app called system api. | 179| 16000050 | Internal error. | 180 181**Example** 182 183```ts 184// MyAutoFillExtensionAbility.ts 185import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 186import { hilog } from '@kit.PerformanceAnalysisKit'; 187 188class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 189 onFillRequest(session: UIExtensionContentSession, 190 request: autoFillManager.FillRequest, 191 callback: autoFillManager.FillRequestCallback) { 192 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest'); 193 try { 194 let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = { 195 'fillCallback': callback, 196 'message': 'AutoFill Page', 197 'viewData': request.viewData, 198 } 199 let storage_fill = new LocalStorage(storageData); 200 if (session) { 201 session.loadContent('pages/AutoFill Page', storage_fill); 202 } else { 203 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 204 } 205 } catch (err) { 206 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 207 } 208 } 209} 210``` 211 212```ts 213// AutoFillPage.ets 214import { autoFillManager } from '@kit.AbilityKit'; 215import { BusinessError } from '@kit.BasicServicesKit'; 216import { hilog } from '@kit.PerformanceAnalysisKit'; 217 218@Entry 219@Component 220struct AutoFillPage { 221 storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage(); 222 fillCallback: autoFillManager.FillRequestCallback | undefined = 223 this.storage?.get<autoFillManager.FillRequestCallback>('fillCallback'); 224 225 build() { 226 Row() { 227 Column() { 228 Text('AutoFill Page') 229 .fontSize(50) 230 .fontWeight(FontWeight.Bold) 231 } 232 233 Button('onFailure') 234 .onClick(() => { 235 hilog.info(0x0000, 'testTag', 'autofill failure'); 236 try { 237 this.fillCallback?.onFailure(); 238 } catch (error) { 239 console.error(`catch error, code: ${(error as BusinessError).code}, 240 message: ${(error as BusinessError).message}`); 241 } 242 }) 243 .width('100%') 244 } 245 .height('100%') 246 } 247} 248``` 249 250### onCancel<sup>11+</sup> 251 252onCancel(fillContent?: string): void 253 254Called when an auto-fill request is canceled. 255 256**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 257 258**Parameters** 259 260| Name | Type | Mandatory| Description | 261| ------------------------- | ------ | ---- | -------------------- | 262| fillContent | string | No | Content returned to the input method framework when the auto-fill request is canceled.| 263 264**Error codes** 265 266For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md). 267 268| ID| Error Message| 269| ------- | -------------------------------- | 270| 202 | Permission denied, non-system app called system api. | 271| 401 | Parameter error. Possible causes: 1. The input parameter is not valid parameter;2. Mandatory parameters are left unspecified. | 272| 16000050 | Internal error. | 273 274**Example** 275 276```ts 277// MyAutoFillExtensionAbility.ts 278import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 279import { hilog } from '@kit.PerformanceAnalysisKit'; 280 281class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 282 onFillRequest(session: UIExtensionContentSession, 283 request: autoFillManager.FillRequest, 284 callback: autoFillManager.FillRequestCallback) { 285 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest'); 286 try { 287 let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = { 288 'fillCallback': callback, 289 'message': 'AutoFill Page', 290 'viewData': request.viewData, 291 } 292 let storage_fill = new LocalStorage(storageData); 293 if (session) { 294 session.loadContent('pages/AutoFillPage', storage_fill); 295 } else { 296 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 297 } 298 } catch (err) { 299 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 300 } 301 } 302} 303``` 304 305```ts 306// AutoFillPage.ets 307import { autoFillManager } from '@kit.AbilityKit'; 308import { BusinessError } from '@kit.BasicServicesKit'; 309import { hilog } from '@kit.PerformanceAnalysisKit'; 310 311@Entry 312@Component 313struct AutoFillPage { 314 storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage(); 315 fillCallback: autoFillManager.FillRequestCallback | undefined = 316 this.storage?.get<autoFillManager.FillRequestCallback>('fillCallback'); 317 318 build() { 319 Row() { 320 Column() { 321 Text('Hello World') 322 .fontSize(50) 323 .fontWeight(FontWeight.Bold) 324 } 325 326 Button('onCancel') 327 .onClick(() => { 328 hilog.info(0x0000, 'testTag', 'autofill cancel'); 329 try { 330 this.fillCallback?.onCancel(); 331 } catch (error) { 332 console.error(`catch error, code: ${(error as BusinessError).code}, 333 message: ${(error as BusinessError).message}`); 334 } 335 }) 336 .width('100%') 337 } 338 .height('100%') 339 } 340} 341``` 342 343### setAutoFillPopupConfig<sup>12+</sup> 344 345setAutoFillPopupConfig(autoFillPopupConfig: AutoFillPopupConfig ): void 346 347Sets the size and position of an auto-fill pop-up. 348 349**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 350 351**Parameters** 352 353| Name| Type| Mandatory| Description| 354| -------- | -------- | -------- | ------------------------------ | 355| autoFillPopupConfig | [AutoFillPopupConfig](js-apis-inner-application-autoFillPopupConfig-sys.md) | Yes| Size and position of the auto-fill pop-up.| 356 357**Error codes** 358 359For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md). 360 361| ID| Error Message| 362| ------- | -------------------------------- | 363| 202 | Permission denied, non-system app called system api. | 364| 401 | Mandatory parameters are left unspecified. | 365| 16000050 | Internal error. | 366 367**Example** 368 369```ts 370// MyAutoFillExtensionAbility.ts 371// MyAutoFillExtensionAbility.ts 372import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 373import { hilog } from '@kit.PerformanceAnalysisKit'; 374 375export default class AutoFillAbility extends AutoFillExtensionAbility { 376 storage: LocalStorage = new LocalStorage(); 377 378 onCreate(): void { 379 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onCreate'); 380 } 381 382 onDestroy(): void { 383 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onDestroy'); 384 } 385 386 onSessionDestroy(session: UIExtensionContentSession) { 387 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onSessionDestroy'); 388 hilog.info(0x0000, 'testTag', 'session content: %{public}s', JSON.stringify(session)); 389 } 390 391 onForeground(): void { 392 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onForeground'); 393 } 394 395 onBackground(): void { 396 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onBackground'); 397 } 398 399 onUpdateRequest(request: autoFillManager.UpdateRequest): void { 400 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onUpdateRequest'); 401 console.info(`get fill request viewData: ${JSON.stringify(request.viewData)}.`); 402 let fillCallback = this.storage.get<autoFillManager.FillRequestCallback>('fillCallback'); 403 404 if (fillCallback) { 405 try { 406 hilog.info(0x0000, 'testTag', 'pageNodeInfos.value: ' + JSON.stringify(request.viewData.pageNodeInfos[0].value)); 407 fillCallback.setAutoFillPopupConfig({ 408 popupSize: { 409 width: 400 + request.viewData.pageNodeInfos[0].value.length * 10, 410 height: 200 + request.viewData.pageNodeInfos[0].value.length * 10 411 }, 412 placement: autoFillManager.PopupPlacement.TOP 413 }); 414 } catch (err) { 415 hilog.info(0x0000, 'testTag', 'autoFillPopupConfig err: ' + err.code); 416 } 417 } 418 } 419 420 onFillRequest(session: UIExtensionContentSession, request: autoFillManager.FillRequest, callback: autoFillManager.FillRequestCallback) { 421 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest'); 422 hilog.info(0x0000, 'testTag', 'Fill RequestCallback: %{public}s ', JSON.stringify(callback)); 423 console.info(`testTag. Get fill request viewData: ${JSON.stringify(request.viewData)}.`); 424 console.info(`testTag. Get fill request type: ${JSON.stringify(request.type)}.`); 425 426 try { 427 let localStorageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData | autoFillManager.AutoFillType> = { 428 'message': 'AutoFill Page', 429 'fillCallback': callback, 430 'viewData': request.viewData, 431 'autoFillType': request.type 432 } 433 let storage_fill = new LocalStorage(localStorageData); 434 console.info(`testTag. Session: ${JSON.stringify(session)}.`); 435 let size: autoFillManager.PopupSize = { 436 width: 400, 437 height: 200 438 }; 439 callback.setAutoFillPopupConfig({ 440 popupSize: size 441 }); 442 session.loadContent('pages/SelectorList', storage_fill); 443 } catch (err) { 444 hilog.error(0x0000, 'testTag', '%{public}s', 'autofill failed to load content: ' + JSON.stringify(err)); 445 } 446 } 447 448 onSaveRequest(session: UIExtensionContentSession, request: autoFillManager.SaveRequest, callback: autoFillManager.SaveRequestCallback) { 449 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onSaveRequest'); 450 try { 451 let localStorageData: Record<string, string | autoFillManager.SaveRequestCallback> = { 452 'message': 'AutoFill Page', 453 'saveCallback': callback 454 }; 455 let storage_save = new LocalStorage(localStorageData); 456 if (session) { 457 session.loadContent('pages/SavePage', storage_save); 458 } else { 459 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 460 } 461 } catch (err) { 462 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 463 } 464 } 465} 466``` 467 468## SaveRequestCallback 469 470Implements callbacks for an automatic or a manual saving request. 471 472### SaveRequestCallback.onSuccess 473 474onSuccess(): void 475 476Called when a saving request is successfully processed. 477 478**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 479 480**Error codes** 481 482For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md). 483 484| ID| Error Message| 485| ------- | -------------------------------- | 486| 202 | Permission denied, non-system app called system api. | 487| 16000050 | Internal error. | 488 489**Example** 490 491```ts 492// MyAutoFillExtensionAbility.ts 493import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 494import { hilog } from '@kit.PerformanceAnalysisKit'; 495class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 496 onSaveRequest(session: UIExtensionContentSession, 497 request: autoFillManager.SaveRequest, 498 callback: autoFillManager.SaveRequestCallback) { 499 hilog.info(0x0000, 'testTag', '%{public}s', 'onSaveRequest'); 500 try { 501 let storageData: Record<string, string | autoFillManager.SaveRequestCallback | autoFillManager.ViewData> = { 502 'message': 'AutoFill Page', 503 'saveCallback': callback, 504 'viewData': request.viewData 505 }; 506 let storage_save = new LocalStorage(storageData); 507 if (session) { 508 session.loadContent('pages/SavePage', storage_save); 509 } else { 510 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 511 } 512 } catch (err) { 513 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 514 } 515 } 516} 517``` 518 519```ts 520// SavePage.ets 521import { autoFillManager } from '@kit.AbilityKit'; 522import { BusinessError } from '@kit.BasicServicesKit'; 523import { hilog } from '@kit.PerformanceAnalysisKit'; 524 525@Entry 526@Component 527struct SavePage { 528 storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage(); 529 saveCallback: autoFillManager.SaveRequestCallback | undefined = 530 this.storage?.get<autoFillManager.SaveRequestCallback>('saveCallback'); 531 532 build() { 533 Row() { 534 Column() { 535 Text('SavePage') 536 .fontSize(50) 537 .fontWeight(FontWeight.Bold) 538 } 539 540 Button('onSuccess') 541 .onClick(() => { 542 hilog.info(0x0000, 'testTag', 'autosave success'); 543 try { 544 this.saveCallback?.onSuccess(); 545 } catch (error) { 546 console.error(`catch error, code: ${(error as BusinessError).code}, 547 message: ${(error as BusinessError).message}`); 548 } 549 }) 550 .width('100%') 551 } 552 .height('100%') 553 } 554} 555``` 556 557### SaveRequestCallback.onFailure 558 559onFailure(): void 560 561Called when a saving request fails to be processed. 562 563**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 564 565**Error codes** 566 567For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md). 568 569| ID| Error Message| 570| ------- | -------------------------------- | 571| 202 | Permission denied, non-system app called system api. | 572| 16000050 | Internal error. | 573 574**Example** 575 576```ts 577// MyAutoFillExtensionAbility.ts 578import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 579import { hilog } from '@kit.PerformanceAnalysisKit'; 580 581class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 582 onSaveRequest(session: UIExtensionContentSession, 583 request: autoFillManager.SaveRequest, 584 callback: autoFillManager.SaveRequestCallback) { 585 hilog.info(0x0000, 'testTag', '%{public}s', 'onSaveRequest'); 586 try { 587 let storageData: Record<string, string | autoFillManager.SaveRequestCallback | autoFillManager.ViewData> = { 588 'message': 'AutoFill Page', 589 'saveCallback': callback, 590 'viewData': request.viewData 591 } 592 let storage_save = new LocalStorage(storageData); 593 if (session) { 594 session.loadContent('pages/SavePage', storage_save); 595 } else { 596 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 597 } 598 } catch (err) { 599 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 600 } 601 } 602} 603``` 604 605```ts 606// SavePage.ets 607import { autoFillManager } from '@kit.AbilityKit'; 608import { BusinessError } from '@kit.BasicServicesKit'; 609import { hilog } from '@kit.PerformanceAnalysisKit'; 610 611@Entry 612@Component 613struct SavePage { 614 storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage(); 615 saveCallback: autoFillManager.SaveRequestCallback | undefined = 616 this.storage?.get<autoFillManager.SaveRequestCallback>('saveCallback'); 617 618 build() { 619 Row() { 620 Column() { 621 Text('Save Page') 622 .fontSize(50) 623 .fontWeight(FontWeight.Bold) 624 } 625 626 Button('onFailure') 627 .onClick(() => { 628 hilog.error(0x0000, 'testTag', 'autofill onFailure'); 629 try { 630 this.saveCallback?.onFailure(); 631 } catch (error) { 632 console.error(`catch error, code: ${(error as BusinessError).code}, 633 message: ${(error as BusinessError).message}`); 634 } 635 }) 636 .width('100%') 637 } 638 .height('100%') 639 } 640} 641``` 642