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