1 /* 2 * Copyright (c) 2025 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 "input_method_tools.h" 17 18 namespace OHOS { 19 namespace MiscServices { 20 GetInstance()21InputMethodTools &InputMethodTools::GetInstance() 22 { 23 static InputMethodTools instance; 24 return instance; 25 } 26 AttributeToInner(const InputAttribute & attribute)27InputAttributeInner InputMethodTools::AttributeToInner(const InputAttribute &attribute) 28 { 29 InputAttributeInner inner; 30 inner.inputPattern = attribute.inputPattern; 31 inner.inputOption = attribute.inputOption; 32 inner.enterKeyType = attribute.enterKeyType; 33 inner.isTextPreviewSupported = attribute.isTextPreviewSupported; 34 inner.bundleName = attribute.bundleName; 35 inner.immersiveMode = attribute.immersiveMode; 36 inner.gradientMode = attribute.gradientMode; 37 inner.fluidLightMode = attribute.fluidLightMode; 38 inner.windowId = attribute.windowId; 39 inner.callingDisplayId = attribute.callingDisplayId; 40 inner.placeholder = attribute.placeholder; 41 inner.abilityName = attribute.abilityName; 42 inner.capitalizeMode = attribute.capitalizeMode; 43 inner.needAutoInputNumkey = attribute.needAutoInputNumkey; 44 return inner; 45 } 46 InnerToAttribute(const InputAttributeInner & inner)47InputAttribute InputMethodTools::InnerToAttribute(const InputAttributeInner &inner) 48 { 49 InputAttribute inputAttribute; 50 inputAttribute.inputPattern = inner.inputPattern; 51 inputAttribute.inputOption = inner.inputOption; 52 inputAttribute.enterKeyType = inner.enterKeyType; 53 inputAttribute.isTextPreviewSupported = inner.isTextPreviewSupported; 54 inputAttribute.bundleName = inner.bundleName; 55 inputAttribute.immersiveMode = inner.immersiveMode; 56 inputAttribute.gradientMode = inner.gradientMode; 57 inputAttribute.fluidLightMode = inner.fluidLightMode; 58 inputAttribute.windowId = inner.windowId; 59 inputAttribute.callingDisplayId = inner.callingDisplayId; 60 inputAttribute.placeholder = inner.placeholder; 61 inputAttribute.abilityName = inner.abilityName; 62 inputAttribute.capitalizeMode = inner.capitalizeMode; 63 inputAttribute.needAutoInputNumkey = inner.needAutoInputNumkey; 64 return inputAttribute; 65 } 66 CursorInfoToInner(const CursorInfo & cursorInfo)67CursorInfoInner InputMethodTools::CursorInfoToInner(const CursorInfo &cursorInfo) 68 { 69 CursorInfoInner inner; 70 inner.left = cursorInfo.left; 71 inner.top = cursorInfo.top; 72 inner.width = cursorInfo.width; 73 inner.height = cursorInfo.height; 74 return inner; 75 } 76 InnerToCursorInfo(const CursorInfoInner & inner)77CursorInfo InputMethodTools::InnerToCursorInfo(const CursorInfoInner &inner) 78 { 79 CursorInfo cursorInfo; 80 cursorInfo.left = inner.left; 81 cursorInfo.top = inner.top; 82 cursorInfo.width = inner.width; 83 cursorInfo.height = inner.height; 84 return cursorInfo; 85 } 86 RangeToInner(const Range & range)87RangeInner InputMethodTools::RangeToInner(const Range &range) 88 { 89 RangeInner inner; 90 inner.start = range.start; 91 inner.end = range.end; 92 return inner; 93 } InnerToRange(const RangeInner & inner)94Range InputMethodTools::InnerToRange(const RangeInner &inner) 95 { 96 Range range; 97 range.start = inner.start; 98 range.end = inner.end; 99 return range; 100 } 101 TextSelectionToInner(const TextSelection & textSelection)102TextSelectionInner InputMethodTools::TextSelectionToInner(const TextSelection &textSelection) 103 { 104 TextSelectionInner inner; 105 inner.oldBegin = textSelection.oldBegin; 106 inner.oldEnd = textSelection.oldEnd; 107 inner.newBegin = textSelection.newBegin; 108 inner.newEnd = textSelection.newEnd; 109 return inner; 110 } InnerToSelection(const TextSelectionInner & inner)111TextSelection InputMethodTools::InnerToSelection(const TextSelectionInner &inner) 112 { 113 TextSelection textSelection; 114 textSelection.oldBegin = inner.oldBegin; 115 textSelection.oldEnd = inner.oldEnd; 116 textSelection.newBegin = inner.newBegin; 117 textSelection.newEnd = inner.newEnd; 118 return textSelection; 119 } 120 TextTotalConfigToInner(const TextTotalConfig & textTotalConfig)121TextTotalConfigInner InputMethodTools::TextTotalConfigToInner(const TextTotalConfig &textTotalConfig) 122 { 123 TextTotalConfigInner inner; 124 inner.inputAttribute = AttributeToInner(textTotalConfig.inputAttribute); 125 inner.cursorInfo = CursorInfoToInner(textTotalConfig.cursorInfo); 126 inner.textSelection = TextSelectionToInner(textTotalConfig.textSelection); 127 inner.windowId = textTotalConfig.windowId; 128 inner.positionY = textTotalConfig.positionY; 129 inner.height = textTotalConfig.height; 130 inner.commandValue.valueMap = textTotalConfig.privateCommand; 131 inner.requestKeyboardReason = textTotalConfig.requestKeyboardReason; 132 inner.abilityToken = textTotalConfig.abilityToken; 133 inner.isSimpleKeyboardEnabled = textTotalConfig.isSimpleKeyboardEnabled; 134 return inner; 135 } 136 InnerToTextTotalConfig(const TextTotalConfigInner & inner)137TextTotalConfig InputMethodTools::InnerToTextTotalConfig(const TextTotalConfigInner &inner) 138 { 139 TextTotalConfig textTotalConfig; 140 textTotalConfig.inputAttribute = InnerToAttribute(inner.inputAttribute); 141 textTotalConfig.cursorInfo = InnerToCursorInfo(inner.cursorInfo); 142 textTotalConfig.textSelection = InnerToSelection(inner.textSelection); 143 textTotalConfig.windowId = inner.windowId; 144 textTotalConfig.positionY = inner.positionY; 145 textTotalConfig.height = inner.height; 146 textTotalConfig.privateCommand = inner.commandValue.valueMap; 147 textTotalConfig.requestKeyboardReason = inner.requestKeyboardReason; 148 textTotalConfig.abilityToken = inner.abilityToken; 149 textTotalConfig.isSimpleKeyboardEnabled = inner.isSimpleKeyboardEnabled; 150 return textTotalConfig; 151 } 152 InputClientInfoToInner(const InputClientInfo & inputClientInfo)153InputClientInfoInner InputMethodTools::InputClientInfoToInner(const InputClientInfo &inputClientInfo) 154 { 155 InputClientInfoInner inner; 156 inner.pid = inputClientInfo.pid; 157 inner.uid = inputClientInfo.uid; 158 inner.userID = inputClientInfo.userID; 159 inner.isShowKeyboard = inputClientInfo.isShowKeyboard; 160 inner.bindImeType = inputClientInfo.bindImeType; 161 inner.config = TextTotalConfigToInner(inputClientInfo.config); 162 inner.eventFlag = inputClientInfo.eventFlag; 163 inner.attribute = AttributeToInner(inputClientInfo.attribute); 164 inner.client = inputClientInfo.client; 165 inner.channel = inputClientInfo.channel; 166 inner.deathRecipient = inputClientInfo.deathRecipient; 167 inner.state = inputClientInfo.state; 168 inner.isNotifyInputStart = inputClientInfo.isNotifyInputStart; 169 inner.needHide = inputClientInfo.needHide; 170 inner.uiExtensionTokenId = inputClientInfo.uiExtensionTokenId; 171 inner.requestKeyboardReason = inputClientInfo.requestKeyboardReason; 172 inner.type = inputClientInfo.type; 173 inner.name = inputClientInfo.name; 174 return inner; 175 } 176 InnerToInputClientInfo(const InputClientInfoInner & inner)177InputClientInfo InputMethodTools::InnerToInputClientInfo(const InputClientInfoInner &inner) 178 { 179 InputClientInfo inputClientInfo; 180 inputClientInfo.pid = inner.pid; 181 inputClientInfo.uid = inner.uid; 182 inputClientInfo.userID = inner.userID; 183 inputClientInfo.isShowKeyboard = inner.isShowKeyboard; 184 inputClientInfo.bindImeType = inner.bindImeType; 185 inputClientInfo.config = InnerToTextTotalConfig(inner.config); 186 inputClientInfo.eventFlag = inner.eventFlag; 187 inputClientInfo.attribute = InnerToAttribute(inner.attribute); 188 inputClientInfo.client = inner.client; 189 inputClientInfo.channel = inner.channel; 190 inputClientInfo.deathRecipient = inner.deathRecipient; 191 inputClientInfo.state = inner.state; 192 inputClientInfo.isNotifyInputStart = inner.isNotifyInputStart; 193 inputClientInfo.needHide = inner.needHide; 194 inputClientInfo.uiExtensionTokenId = inner.uiExtensionTokenId; 195 inputClientInfo.requestKeyboardReason = inner.requestKeyboardReason; 196 inputClientInfo.type = inner.type; 197 inputClientInfo.name = inner.name; 198 return inputClientInfo; 199 } 200 PanelStatusInfoToInner(const PanelStatusInfo & panelStatusInfo)201PanelStatusInfoInner InputMethodTools::PanelStatusInfoToInner(const PanelStatusInfo &panelStatusInfo) 202 { 203 PanelStatusInfoInner inner; 204 inner.panelInfo = panelStatusInfo.panelInfo; 205 inner.visible = panelStatusInfo.visible; 206 inner.trigger = panelStatusInfo.trigger; 207 inner.sessionId = panelStatusInfo.sessionId; 208 return inner; 209 } 210 InnerToPanelStatusInfo(const PanelStatusInfoInner & inner)211PanelStatusInfo InputMethodTools::InnerToPanelStatusInfo(const PanelStatusInfoInner &inner) 212 { 213 PanelStatusInfo panelStatusInfo; 214 panelStatusInfo.panelInfo = inner.panelInfo; 215 panelStatusInfo.visible = inner.visible; 216 panelStatusInfo.trigger = inner.trigger; 217 panelStatusInfo.sessionId = inner.sessionId; 218 return panelStatusInfo; 219 } 220 } // namespace MiscServices 221 } // namespace OHOS