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 
16 #include "auto_fill_manager_util.h"
17 
18 #include "hilog_tag_wrapper.h"
19 
20 namespace OHOS {
21 namespace AbilityRuntime {
ConvertToPopupUIExtensionConfig(const AutoFill::AutoFillCustomConfig & config,Ace::CustomPopupUIExtensionConfig & popupConfig)22 void AutoFillManagerUtil::ConvertToPopupUIExtensionConfig(const AutoFill::AutoFillCustomConfig &config,
23     Ace::CustomPopupUIExtensionConfig &popupConfig)
24 {
25     popupConfig.isShowInSubWindow = config.isShowInSubWindow;
26     popupConfig.inspectorId = config.inspectorId;
27     popupConfig.nodeId = config.nodeId;
28     popupConfig.isAutoCancel = config.isAutoCancel;
29     popupConfig.isEnableArrow = config.isEnableArrow;
30     popupConfig.isFocusable = false;
31     if (config.targetSize.has_value()) {
32         Ace::PopupSize popupSize;
33         AutoFill::PopupSize targetSize = config.targetSize.value();
34         popupSize.unit = ConvertPopupUnit(targetSize.unit);
35         popupSize.width = static_cast<double>(targetSize.width);
36         popupSize.height = static_cast<double>(targetSize.height);
37         popupConfig.targetSize = popupSize;
38     }
39 
40     if (config.targetOffset.has_value()) {
41         Ace::PopupOffset popupOffset;
42         AutoFill::PopupOffset targetOffset = config.targetOffset.value();
43         popupOffset.unit = ConvertPopupUnit(targetOffset.unit);
44         popupOffset.deltaX = static_cast<double>(targetOffset.deltaX);
45         popupOffset.deltaY = static_cast<double>(targetOffset.deltaY);
46         popupConfig.targetOffset = popupOffset;
47     }
48 
49     Ace::PopupLength popupLength;
50     if (config.targetSpace.has_value()) {
51         AutoFill::PopupLength targetSpace = config.targetSpace.value();
52         popupLength.unit = ConvertPopupUnit(targetSpace.unit);
53         popupLength.length = static_cast<double>(targetSpace.length);
54         popupConfig.targetSpace = popupLength;
55     }
56     if (config.arrowOffset.has_value()) {
57         AutoFill::PopupLength arrowOffset = config.arrowOffset.value();
58         popupLength.unit = ConvertPopupUnit(arrowOffset.unit);
59         popupLength.length = static_cast<double>(arrowOffset.length);
60         popupConfig.arrowOffset = popupLength;
61     }
62 
63     if (config.placement.has_value()) {
64         popupConfig.placement = ConvertPopupPlacement(config.placement.value());
65     }
66 
67     popupConfig.backgroundColor = config.backgroundColor;
68     popupConfig.maskColor = config.maskColor;
69     popupConfig.onStateChange = config.onStateChange;
70 }
71 
ConvertPopupUnit(const AutoFill::PopupDimensionUnit & unit)72 Ace::PopupDimensionUnit AutoFillManagerUtil::ConvertPopupUnit(const AutoFill::PopupDimensionUnit &unit)
73 {
74     Ace::PopupDimensionUnit popupUnit = Ace::PopupDimensionUnit::PX;
75     switch (unit) {
76         case AutoFill::PopupDimensionUnit::VP:
77             popupUnit = Ace::PopupDimensionUnit::VP;
78             break;
79         case AutoFill::PopupDimensionUnit::FP:
80             popupUnit = Ace::PopupDimensionUnit::FP;
81             break;
82         case AutoFill::PopupDimensionUnit::PERCENT:
83             popupUnit = Ace::PopupDimensionUnit::PERCENT;
84             break;
85         case AutoFill::PopupDimensionUnit::LPX:
86             popupUnit = Ace::PopupDimensionUnit::LPX;
87             break;
88         case AutoFill::PopupDimensionUnit::AUTO:
89             popupUnit = Ace::PopupDimensionUnit::AUTO;
90             break;
91         case AutoFill::PopupDimensionUnit::CALC:
92             popupUnit = Ace::PopupDimensionUnit::CALC;
93             break;
94         default:
95             break;
96     }
97     return popupUnit;
98 }
99 
ConvertPopupPlacement(const AutoFill::PopupPlacement & placement)100 Ace::PopupPlacement AutoFillManagerUtil::ConvertPopupPlacement(const AutoFill::PopupPlacement &placement)
101 {
102     Ace::PopupPlacement popupPlacement = Ace::PopupPlacement::NONE;
103     switch (placement) {
104         case AutoFill::PopupPlacement::LEFT:
105             popupPlacement = Ace::PopupPlacement::LEFT;
106             break;
107         case AutoFill::PopupPlacement::RIGHT:
108             popupPlacement = Ace::PopupPlacement::RIGHT;
109             break;
110         case AutoFill::PopupPlacement::TOP_LEFT:
111             popupPlacement = Ace::PopupPlacement::TOP_LEFT;
112             break;
113         case AutoFill::PopupPlacement::TOP_RIGHT:
114             popupPlacement = Ace::PopupPlacement::TOP_RIGHT;
115             break;
116         case AutoFill::PopupPlacement::BOTTOM_LEFT:
117             popupPlacement = Ace::PopupPlacement::BOTTOM_LEFT;
118             break;
119         case AutoFill::PopupPlacement::BOTTOM_RIGHT:
120             popupPlacement = Ace::PopupPlacement::BOTTOM_RIGHT;
121             break;
122         case AutoFill::PopupPlacement::LEFT_TOP:
123             popupPlacement = Ace::PopupPlacement::LEFT_TOP;
124             break;
125         case AutoFill::PopupPlacement::LEFT_BOTTOM:
126             popupPlacement = Ace::PopupPlacement::LEFT_BOTTOM;
127             break;
128         case AutoFill::PopupPlacement::RIGHT_TOP:
129             popupPlacement = Ace::PopupPlacement::RIGHT_TOP;
130             break;
131         case AutoFill::PopupPlacement::RIGHT_BOTTOM:
132             popupPlacement = Ace::PopupPlacement::RIGHT_BOTTOM;
133             break;
134         default:
135             TAG_LOGE(AAFwkTag::AUTOFILLMGR, "Popup placement invalid");
136             break;
137     }
138     return popupPlacement;
139 }
140 } // namespace AbilityRuntime
141 } // namespace OHOS
142