1 /*
2  * Copyright (c) 2023-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 
16 #ifndef OHOS_ABILITY_RUNTIME_AUTO_FILL_MANAGER_H
17 #define OHOS_ABILITY_RUNTIME_AUTO_FILL_MANAGER_H
18 
19 #include <string>
20 
21 #include "auto_fill_custom_config.h"
22 #include "auto_fill_event_handler.h"
23 #include "auto_fill_extension_callback.h"
24 #include "fill_request_callback_interface.h"
25 #include "nocopyable.h"
26 #include "save_request_callback_interface.h"
27 #include "task_handler_wrap.h"
28 #include "ui_content.h"
29 
30 namespace OHOS {
31 namespace AbilityRuntime {
32 class AutoFillManager {
33 public:
34     static AutoFillManager &GetInstance();
35 
36     int32_t RequestAutoFill(Ace::UIContent *uiContent, const AutoFill::AutoFillRequest &request,
37         const std::shared_ptr<IFillRequestCallback> &fillCallback, AutoFill::AutoFillResult &result);
38 
39     bool IsNeedToCreatePopupWindow(const AbilityBase::AutoFillType &autoFillType);
40 
41     int32_t RequestAutoSave(Ace::UIContent *uiContent, const AutoFill::AutoFillRequest &request,
42         const std::shared_ptr<ISaveRequestCallback> &saveCallback, AutoFill::AutoFillResult &result);
43 
44     void UpdateCustomPopupUIExtension(uint32_t autoFillSessionId, const AbilityBase::ViewData &viewData);
45 
46     void CloseUIExtension(uint32_t autoFillSessionId);
47 
48     void HandleTimeOut(uint32_t eventId);
49     void SetTimeOutEvent(uint32_t eventId);
50     void RemoveEvent(uint32_t eventId);
51 
52     void BindModalUIExtensionCallback(const std::shared_ptr<AutoFillExtensionCallback> &extensionCallback,
53         Ace::ModalUIExtensionCallbacks &callback);
54     void RemoveAutoFillExtensionCallback(uint32_t callbackId);
55 private:
56     AutoFillManager();
57     ~AutoFillManager();
58     DISALLOW_COPY_AND_MOVE(AutoFillManager);
59 
60     int32_t HandleRequestExecuteInner(Ace::UIContent *uiContent, const AutoFill::AutoFillRequest &request,
61         const std::shared_ptr<IFillRequestCallback> &fillCallback,
62         const std::shared_ptr<ISaveRequestCallback> &saveCallback,
63         AutoFill::AutoFillResult &result);
64 
65     int32_t CreateAutoFillExtension(Ace::UIContent *uiContent,
66         const AutoFill::AutoFillRequest &request,
67         const Ace::ModalUIExtensionCallbacks &callback,
68         const AutoFill::AutoFillWindowType &autoFillWindowType,
69         bool isSmartAutoFill);
70     bool ConvertAutoFillWindowType(const AutoFill::AutoFillRequest &request,
71         bool &isSmartAutoFill, AutoFill::AutoFillWindowType &autoFillWindowType);
72     std::shared_ptr<AutoFillExtensionCallback> GetAutoFillExtensionCallback(uint32_t callbackId);
73     bool IsPreviousRequestFinished(Ace::UIContent *uiContent);
74     bool IsNeed2SaveRequest(const AbilityBase::ViewData &viewData, bool &isSmartAutoFill);
75 
76     std::mutex extensionCallbacksMutex_;
77     std::map<uint32_t, std::shared_ptr<AutoFillExtensionCallback>> extensionCallbacks_;
78 
79     std::shared_ptr<AutoFillEventHandler> eventHandler_;
80 };
81 } // AbilityRuntime
82 } // OHOS
83 #endif // OHOS_ABILITY_RUNTIME_AUTO_FILL_MANAGER_H