2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 using System.Collections.Generic;
20 using System.Runtime.InteropServices;
21 using System.ComponentModel;
22 using static Interop.InputMethod;
24 namespace Tizen.Uix.InputMethod
27 /// Enumeration for the key codes.
28 /// If keycode & 0xff000000 == 0x01000000 then this key code is directly encoded to 24-bit UCS character. The UCS value is keycode & 0x00ffffff.
29 /// Defines the list of keys supported by the system. Note that certain keys may not be available on all the devices.
31 /// <since_tizen> 4 </since_tizen>
35 /// The Backspace key.
59 /// The Scroll lock key.
63 /// The System Request key.
75 /* Cursor control & motion */
81 /// The Left directional key.
85 /// The Up directional key.
89 /// The Right directional key.
93 /// The Down directional key.
97 /// The Prior, Previous key.
109 /// The Page Down key.
131 /// The Execute, Run, Do key.
155 /// The Cancel, Stop, Abort, Exit key.
167 /// The character set switch key.
169 Mode_switch = 0xFF7E,
171 /// The Number Lock key.
177 /// The Numpad Space key.
181 /// The Numpad Tab key.
185 /// The Numpad Enter key.
189 /// The Numpad Function 1 key.
193 /// The Numpad Function 2 key.
197 /// The Numpad Function 3 key.
201 /// The Numpad Function 4 key.
205 /// The Numpad Home key.
209 /// The Numpad Left key.
213 /// The Numpad Up key.
217 /// The Numpad Right key.
221 /// The Numpad Down key.
225 /// The Numpad Prior, Previous key.
229 /// The Numpad Page Up key.
233 /// The Numpad Next key.
237 /// The Numpad Page Down key.
239 KPPage_Down = 0xFF9B,
241 /// The Numpad End key.
245 /// The Numpad Begin key.
249 /// The Numpad Insert key.
253 /// The Numpad Delete key.
257 /// The Numpad Equal key.
261 /// The Numpad Multiply key.
265 /// The Numpad Add key.
269 /// The Numpad Separator key.
271 KPSeparator = 0xFFAC,
273 /// The Numpad Subtract key.
277 /// The Numpad Decimal key.
281 /// The Numpad Divide key.
285 /// The Numpad 0 key.
289 /// The Numpad 1 key.
293 /// The Numpad 2 key.
297 /// The Numpad 3 key.
301 /// The Numpad 4 key.
305 /// The Numpad 5 key.
309 /// The Numpad 6 key.
313 /// The Numpad 7 key.
317 /// The Numpad 8 key.
321 /// The Numpad 9 key.
325 /* Auxiliary Functions */
327 /// The Function 1 key.
331 /// The Function 2 key.
335 /// The Function 3 key.
339 /// The Function 4 key.
343 /// The Function 5 key.
347 /// The Function 6 key.
351 /// The Function 7 key.
355 /// The Function 8 key.
359 /// The Function 9 key.
363 /// The Function 10 key.
367 /// The Function 11 key.
371 /// The Function 12 key.
375 /// The Function 13 key.
379 /// The Function 14 key.
383 /// The Function 15 key.
387 /// The Function 16 key.
391 /// The Function 17 key.
395 /// The Function 18 key.
399 /// The Function 19 key.
403 /// The Function 20 key.
407 /// The Function 21 key.
411 /// The Function 22 key.
415 /// The Function 23 key.
419 /// The Function 24 key.
423 /// The Function 25 key.
427 /// The Function 26 key.
431 /// The Function 27 key.
435 /// The Function 28 key.
439 /// The Function 29 key.
443 /// The Function 30 key.
447 /// The Function 31 key.
451 /// The Function 32 key.
455 /// The Function 33 key.
459 /// The Function 34 key.
463 /// The Function 35 key.
469 /// The Left Shift key.
473 /// The Right Shift key.
477 /// The Left Control key.
481 /// The Right Control key.
485 /// The Caps Lock key.
489 /// The Shift Lock key.
493 /// The Left Meta key.
497 /// The Right Meta key.
501 /// The Left Alt key.
505 /// The Right Alt key.
509 /// The Left Super key.
513 /// The Right Super key.
517 /// The Left Hyper key.
521 /// The Right Hyper key.
531 /// The Exclamation key.
535 /// The Quotedbl key.
539 /// The Number Sign key.
551 /// The Ampersand key.
555 /// The Apostrophe key.
559 /// The Parenleft key.
563 /// The Parenright key.
567 /// The Asterisk key.
635 /// The Semicolon key.
651 /// The Question key.
763 /// The Left Bracket key.
767 /// The Backslash key.
771 /// The Right Bracket key.
773 BracketRight = 0x05d,
775 /// The Circumflex key.
779 /// The Underscore key.
891 /// The Left Brace key.
899 /// The Right Brace key.
909 /// Enumeration for the key masks.
910 /// The key masks indicate which modifier keys are pressed down during the keyboard hit. The special MASK_RELEASED indicates the key release event.
912 /// <since_tizen> 4 </since_tizen>
916 /// Key press event without the modifier key.
920 /// The Shift key is pressed down.
924 /// The CapsLock key is pressed down.
928 /// The Control key is pressed down.
932 /// The Alt key is pressed down.
936 /// The Meta key is pressed down.
940 /// The Win key (between Control and Alt) is pressed down.
944 /// The Hyper key is pressed down.
948 /// The NumLock key is pressed down.
952 /// Key release event.
954 Released = (1 << 15),
958 /// This class contains the API's related to the IME (Input method editor).
960 /// <since_tizen> 4 </since_tizen>
961 public static class InputMethodEditor
963 private static Object thisLock = new Object();
964 private static ImeCallbackStructGCHandle _imeCallbackStructGCHandle = new ImeCallbackStructGCHandle();
965 private static event EventHandler<FocusedInEventArgs> _focusIn;
966 private static ImeFocusedInCb _imeFocusedInDelegate;
967 private static event EventHandler<FocusedOutEventArgs> _focusOut;
968 private static ImeFocusedOutCb _imeFocusedOutDelegate;
969 private static event EventHandler<SurroundingTextUpdatedEventArgs> _surroundingTextUpdated;
970 private static ImeSurroundingTextUpdatedCb _imeSurroundingTextUpdatedDelegate;
971 private static event EventHandler<EventArgs> _inputContextReset;
972 private static ImeInputContextResetCb _imeInputContextResetDelegate;
973 private static event EventHandler<CursorPositionUpdatedEventArgs> _cursorPositionUpdated;
974 private static ImeCursorPositionUpdatedCb _imeCursorPositionUpdatedDelegate;
975 private static event EventHandler<LanguageSetEventArgs> _langaugeSet;
976 private static ImeLanguageSetCb _imeLanguageSetDelegate;
977 private static event EventHandler<SetDataEventArgs> _imDataSet;
978 private static ImeImdataSetCb _imeDataSetDelegate;
979 private static event EventHandler<LayoutSetEventArgs> _layoutSet;
980 private static ImeLayoutSetCb _imeLayoutSetDelegate;
981 private static event EventHandler<ReturnKeySetEventArgs> _returnKeyTypeSet;
982 private static ImeReturnKeySetCb _imeReturnKeySetDelegate;
983 private static event EventHandler<ReturnKeyStateSetEventArgs> _returnKeyStateSet;
984 private static ImeReturnKeyStateSetCb _imeReturnKeyStateSetDelegate;
985 private static ImeProcessKeyEventCb _imeProcessKeyDelegate;
986 private static event EventHandler<DisplayLanguageChangedEventArgs> _displayLanguageChanged;
987 private static ImeDisplayLanguageChangedCb _imeDisplayLanguageChangedDelegate;
988 private static event EventHandler<RotationChangedEventArgs> _rotationDegreeChanged;
989 private static ImeRotationChangedCb _imeRotationChangedDelegate;
990 private static event EventHandler<AccessibilityStateChangedEventArgs> _accessibilityStateChanged;
991 private static ImeAccessibilityStateChangedCb _imeAccessibilityStateChangedDelegate;
992 private static event EventHandler<PredictionHintUpdatedEventArgs> _predictionHintUpdated;
993 private static ImePredictionHintSetCb _imePredictionHintSetDelegate;
994 private static event EventHandler<PredictionHintDataUpdatedEventArgs> _predictionHintDataUpdated;
995 private static ImePredictionHintDataSetCb _imePredictionHintDataSetDelegate;
996 private static event EventHandler<MimeTypeUpdateRequestedEventArgs> _mimeTypeUpdateRequested;
997 private static ImeMimeTypeSetRequestCb _imeMimeTypeSetRequestDelegate;
998 private static ImeLanguageRequestedCb _imeLanguageRequestedDelegate;
999 private static OutAction<string> _languageRequestedDelegate;
1000 private static BoolAction<KeyCode, KeyMask, InputMethodDeviceInformation> _processKeyDelagate;
1001 private static ImeImdataRequestedCb _imeImDataRequestedDelegate;
1002 private static OutArrayAction<byte> _imDataRequestedDelegate;
1003 private static ImeGeometryRequestedCb _imeGeometryRequestedDelegate;
1004 private static OutAction<Rect> _geometryRequestedDelegate;
1005 private static Action _userCreate;
1006 private static Action _userTerminate;
1007 private static Action<ContextId, InputMethodContext> _userShow;
1008 private static Action<ContextId> _userHide;
1009 private static ImeCreateCb _create = (IntPtr userData) =>
1011 Log.Info(LogTag, "In Create Delegate");
1012 _userCreate?.Invoke();
1014 private static ImeTerminateCb _terminate = (IntPtr userData) =>
1016 Log.Info(LogTag, "In terminate Delegate");
1017 _userTerminate?.Invoke();
1018 _imeCallbackStructGCHandle.Dispose();
1020 private static ImeShowCb _show = (int contextId, IntPtr context, IntPtr userData) =>
1022 Log.Info(LogTag, "In Show Delegate");
1023 _userShow?.Invoke(new ContextId(contextId), new InputMethodContext(context));
1025 private static ImeHideCb _hide = (int contextId, IntPtr userData) =>
1027 Log.Info(LogTag, "In Hide Delegate");
1028 _userHide?.Invoke(new ContextId(contextId));
1032 /// Structure representing the ContextId.
1034 /// <since_tizen> 4 </since_tizen>
1035 public struct ContextId : IEquatable<ContextId>
1037 internal ContextId(int id)
1049 /// Compares whether the ContextIds are equal.
1051 /// <param name="other">The ContextId to compare with this instance.</param>
1052 /// <returns>true if the ContextIds is the same; otherwise, false.</returns>
1053 /// <since_tizen> 4 </since_tizen>
1054 public bool Equals(ContextId other)
1056 return this.Id == other.Id;
1061 /// Rectangle representing the position and size of the UI control.
1063 /// <since_tizen> 4 </since_tizen>
1067 /// The X position in the screen.
1069 /// <since_tizen> 4 </since_tizen>
1073 /// The Y position in the screen.
1075 /// <since_tizen> 4 </since_tizen>
1079 /// The window width.
1081 /// <since_tizen> 4 </since_tizen>
1085 /// The window height.
1087 /// <since_tizen> 4 </since_tizen>
1092 /// An action with 1 out parameter.
1094 /// <typeparam name="T">Generic Type.</typeparam>
1095 /// <param name="a">The out parameter.</param>
1096 /// <since_tizen> 4 </since_tizen>
1097 public delegate void OutAction<T>(out T a);
1100 /// An action with an array out parameter.
1102 /// <typeparam name="T">Generic Type.</typeparam>
1103 /// <param name="a">The out parameter 1.</param>
1104 /// <since_tizen> 4 </since_tizen>
1105 public delegate void OutArrayAction<T>(out T[] a);
1108 /// An action with 3 input parameters returning a bool.
1110 /// <typeparam name="T">Generic type for parameter 1.</typeparam>
1111 /// <typeparam name="T1">Generic type for parameter 2.</typeparam>
1112 /// <typeparam name="T2">Generic type for parameter 3.</typeparam>
1113 /// <param name="a">The input parameter 1.</param>
1114 /// <param name="b">The input parameter 2.</param>
1115 /// <param name="c">The input parameter 3.</param>
1116 /// <returns></returns>
1117 /// <since_tizen> 4 </since_tizen>
1118 public delegate bool BoolAction<T, T1, T2>(T a, T1 b, T2 c);
1121 /// Called when an associated text input UI control has focus.
1123 /// <since_tizen> 4 </since_tizen>
1124 public static event EventHandler<FocusedInEventArgs> FocusedIn
1130 _imeFocusedInDelegate = (int contextId, IntPtr userData) =>
1132 FocusedInEventArgs args = new FocusedInEventArgs(contextId);
1133 _focusIn?.Invoke(null, args);
1135 ErrorCode error = ImeEventSetFocusedInCb(_imeFocusedInDelegate, IntPtr.Zero);
1136 if (error != ErrorCode.None)
1138 Log.Error(LogTag, "Add FocusedIn Failed with error " + error);
1156 /// Called when an associated text input UI control loses focus.
1158 /// <since_tizen> 4 </since_tizen>
1159 public static event EventHandler<FocusedOutEventArgs> FocusedOut
1165 _imeFocusedOutDelegate = (int contextId, IntPtr userData) =>
1167 FocusedOutEventArgs args = new FocusedOutEventArgs(contextId);
1168 _focusOut?.Invoke(null, args);
1170 ErrorCode error = ImeEventSetFocusedOutCb(_imeFocusedOutDelegate, IntPtr.Zero);
1171 if (error != ErrorCode.None)
1173 Log.Error(LogTag, "Add FocusedOut Failed with error " + error);
1191 /// Called when an associated text input UI control responds to a request with the surrounding text.
1193 /// <since_tizen> 4 </since_tizen>
1194 public static event EventHandler<SurroundingTextUpdatedEventArgs> SurroundingTextUpdated
1200 _imeSurroundingTextUpdatedDelegate = (int contextId, IntPtr text, int cursorPos, IntPtr userData) =>
1202 SurroundingTextUpdatedEventArgs args = new SurroundingTextUpdatedEventArgs(contextId, Marshal.PtrToStringAnsi(text), cursorPos);
1203 _surroundingTextUpdated?.Invoke(null, args);
1205 ErrorCode error = ImeEventSetSurroundingTextUpdatedCb(_imeSurroundingTextUpdatedDelegate, IntPtr.Zero);
1206 if (error != ErrorCode.None)
1208 Log.Error(LogTag, "Add SurroundingTextUpdated Failed with error " + error);
1212 _surroundingTextUpdated += value;
1220 _surroundingTextUpdated -= value;
1226 /// Called to reset the input context of an associated text input UI control.
1228 /// <since_tizen> 4 </since_tizen>
1229 public static event EventHandler<EventArgs> InputContextReset
1235 _imeInputContextResetDelegate = (IntPtr userData) =>
1237 _inputContextReset?.Invoke(null, EventArgs.Empty);
1239 ErrorCode error = ImeEventSetInputContextResetCb(_imeInputContextResetDelegate, IntPtr.Zero);
1240 if (error != ErrorCode.None)
1242 Log.Error(LogTag, "Add InputContextReset Failed with error " + error);
1246 _inputContextReset += value;
1254 _inputContextReset -= value;
1260 /// Called when the position of the cursor in an associated text input UI control changes.
1262 /// <since_tizen> 4 </since_tizen>
1263 public static event EventHandler<CursorPositionUpdatedEventArgs> CursorPositionUpdated
1269 _imeCursorPositionUpdatedDelegate = (int cursorPos, IntPtr userData) =>
1271 CursorPositionUpdatedEventArgs args = new CursorPositionUpdatedEventArgs(cursorPos);
1272 _cursorPositionUpdated?.Invoke(null, args);
1274 ErrorCode error = ImeEventSetCursorPositionUpdatedCb(_imeCursorPositionUpdatedDelegate, IntPtr.Zero);
1275 if (error != ErrorCode.None)
1277 Log.Error(LogTag, "Add CursorPositionUpdated Failed with error " + error);
1281 _cursorPositionUpdated += value;
1289 _cursorPositionUpdated -= value;
1295 /// Called to set the preferred language to the input panel.
1296 /// It will only be called when the client application changes the edit field's language attribute after the input panel is shown.
1298 /// <since_tizen> 4 </since_tizen>
1299 public static event EventHandler<LanguageSetEventArgs> LanguageSet
1305 _imeLanguageSetDelegate = (InputPanelLanguage language, IntPtr userData) =>
1307 LanguageSetEventArgs args = new LanguageSetEventArgs(language);
1308 _langaugeSet?.Invoke(null, args);
1310 ErrorCode error = ImeEventSetLanguageSetCb(_imeLanguageSetDelegate, IntPtr.Zero);
1311 if (error != ErrorCode.None)
1313 Log.Error(LogTag, "Add LanguageSet Failed with error " + error);
1317 _langaugeSet += value;
1325 _langaugeSet -= value;
1331 /// Called to set the application specific data to deliver to the input panel.
1333 /// <since_tizen> 4 </since_tizen>
1334 public static event EventHandler<SetDataEventArgs> DataSet
1340 _imeDataSetDelegate = (IntPtr data, uint dataLength, IntPtr userData) =>
1342 byte[] destination = new byte[dataLength];
1343 Marshal.Copy(data, destination, 0, (int)dataLength);
1344 SetDataEventArgs args = new SetDataEventArgs(destination, dataLength);
1345 _imDataSet?.Invoke(null, args);
1347 ErrorCode error = ImeEventSetImdataSetCb(_imeDataSetDelegate, IntPtr.Zero);
1348 if (error != ErrorCode.None)
1350 Log.Error(LogTag, "Add DataSet Failed with error " + error);
1354 _imDataSet += value;
1362 _imDataSet -= value;
1368 /// Called when an associated text input UI control requests the input panel to set its layout.
1369 /// It will only be called when the client application changes the edit field's layout attribute after the input panel is shown.
1371 /// <since_tizen> 4 </since_tizen>
1372 public static event EventHandler<LayoutSetEventArgs> LayoutSet
1378 _imeLayoutSetDelegate = (InputPanelLayout layout, IntPtr userData) =>
1380 LayoutSetEventArgs args = new LayoutSetEventArgs(layout);
1381 _layoutSet?.Invoke(null, args);
1383 ErrorCode error = ImeEventSetLayoutSetCb(_imeLayoutSetDelegate, IntPtr.Zero);
1384 if (error != ErrorCode.None)
1386 Log.Error(LogTag, "Add LayoutSet Failed with error " + error);
1390 _layoutSet += value;
1398 _layoutSet -= value;
1404 /// Called when an associated text input UI control requests the input panel to set the Return key label.
1405 /// The input panel can show the text or an image on the Return button, according to the Return key action.
1407 /// <since_tizen> 4 </since_tizen>
1408 public static event EventHandler<ReturnKeySetEventArgs> ReturnKeySet
1414 _imeReturnKeySetDelegate = (InputPanelReturnKey type, IntPtr userData) =>
1416 ReturnKeySetEventArgs args = new ReturnKeySetEventArgs(type);
1417 _returnKeyTypeSet?.Invoke(null, args);
1419 ErrorCode error = ImeEventSetReturnKeySetCb(_imeReturnKeySetDelegate, IntPtr.Zero);
1420 if (error != ErrorCode.None)
1422 Log.Error(LogTag, "Add ReturnKeySet Failed with error " + error);
1426 _returnKeyTypeSet += value;
1434 _returnKeyTypeSet -= value;
1440 /// Called when an associated text input UI control requests the input panel to enable or disable the Return key state.
1442 /// <since_tizen> 4 </since_tizen>
1443 public static event EventHandler<ReturnKeyStateSetEventArgs> ReturnKeyStateSet
1449 _imeReturnKeyStateSetDelegate = (bool state, IntPtr userData) =>
1451 ReturnKeyStateSetEventArgs args = new ReturnKeyStateSetEventArgs(state);
1452 _returnKeyStateSet?.Invoke(null, args);
1454 ErrorCode error = ImeEventSetReturnKeyStateSetCb(_imeReturnKeyStateSetDelegate, IntPtr.Zero);
1455 if (error != ErrorCode.None)
1457 Log.Error(LogTag, "Add ReturnKeyStateSet Failed with error " + error);
1461 _returnKeyStateSet += value;
1469 _returnKeyStateSet -= value;
1475 /// Called when the system display language is changed.
1477 /// <since_tizen> 4 </since_tizen>
1478 public static event EventHandler<DisplayLanguageChangedEventArgs> DisplayLanguageChanged
1484 _imeDisplayLanguageChangedDelegate = (IntPtr language, IntPtr userData) =>
1486 DisplayLanguageChangedEventArgs args = new DisplayLanguageChangedEventArgs(Marshal.PtrToStringAnsi(language));
1487 _displayLanguageChanged?.Invoke(null, args);
1489 ErrorCode error = ImeEventSetDisplayLanguageChangedCb(_imeDisplayLanguageChangedDelegate, IntPtr.Zero);
1490 if (error != ErrorCode.None)
1492 Log.Error(LogTag, "Add DisplayLanguageChanged Failed with error " + error);
1496 _displayLanguageChanged += value;
1504 _displayLanguageChanged -= value;
1510 /// Called when the device is rotated.
1512 /// <since_tizen> 4 </since_tizen>
1513 public static event EventHandler<RotationChangedEventArgs> RotationChanged
1519 _imeRotationChangedDelegate = (int degree, IntPtr userData) =>
1521 RotationChangedEventArgs args = new RotationChangedEventArgs(degree);
1522 _rotationDegreeChanged?.Invoke(null, args);
1524 ErrorCode error = ImeEventSetRotationChangedCb(_imeRotationChangedDelegate, IntPtr.Zero);
1525 if (error != ErrorCode.None)
1527 Log.Error(LogTag, "Add RotationChanged Failed with error " + error);
1531 _rotationDegreeChanged += value;
1539 _rotationDegreeChanged -= value;
1545 /// Called when Accessibility in settings application is on or off.
1547 /// <since_tizen> 4 </since_tizen>
1548 public static event EventHandler<AccessibilityStateChangedEventArgs> AccessibilityStateChanged
1554 _imeAccessibilityStateChangedDelegate = (bool state, IntPtr userData) =>
1556 AccessibilityStateChangedEventArgs args = new AccessibilityStateChangedEventArgs(state);
1557 _accessibilityStateChanged?.Invoke(null, args);
1559 ErrorCode error = ImeEventSetAccessibilityStateChangedCb(_imeAccessibilityStateChangedDelegate, IntPtr.Zero);
1560 if (error != ErrorCode.None)
1562 Log.Error(LogTag, "Add AccessibilityStateChanged Failed with error " + error);
1566 _accessibilityStateChanged += value;
1574 _accessibilityStateChanged -= value;
1580 /// Sets the languageRequested action.
1582 /// <param name="languageRequested">
1583 /// Called when an associated text input UI control requests the language from the input panel, requesting for language code.
1585 /// <since_tizen> 4 </since_tizen>
1586 public static void SetLanguageRequestedCallback(OutAction<string> languageRequested)
1588 _imeLanguageRequestedDelegate = (IntPtr userData, out IntPtr langCode) =>
1591 _languageRequestedDelegate(out langauage);
1592 langCode = (IntPtr)Marshal.StringToHGlobalAnsi(langauage);
1594 ErrorCode error = ImeEventSetLanguageRequestedCallbackCb(_imeLanguageRequestedDelegate, IntPtr.Zero);
1595 if (error != ErrorCode.None)
1597 Log.Error(LogTag, "Add SetLanguageRequestedCallback Failed with error " + error);
1599 _languageRequestedDelegate = languageRequested;
1603 /// Sets the processKey action.
1604 /// If the key event is from the external device, DeviceInfo will have its name, class, and subclass information.
1606 /// <param name="processKey">
1607 /// The action is called when the key event is received from the external devices or the SendKey function.
1608 /// This Event processes the key event before an associated text input UI control does.
1610 /// <since_tizen> 4 </since_tizen>
1611 public static void SetProcessKeyCallback(BoolAction<KeyCode, KeyMask, InputMethodDeviceInformation> processKey)
1613 _imeProcessKeyDelegate = (KeyCode keyCode, KeyMask keyMask, IntPtr devInfo, IntPtr userData) =>
1615 return _processKeyDelagate(keyCode, keyMask, new InputMethodDeviceInformation(devInfo));
1617 ErrorCode error = ImeEventSetProcessKeyEventCb(_imeProcessKeyDelegate, IntPtr.Zero);
1618 if (error != ErrorCode.None)
1620 Log.Error(LogTag, "Add ProcessKey Failed with error " + error);
1622 _processKeyDelagate = processKey;
1626 /// Sets the imDataRequested action.
1628 /// <param name="imDataRequested">
1629 /// Called when an associated text input UI control requests the application specific data from the input panel, requesting for data array and it's length.
1631 /// <since_tizen> 4 </since_tizen>
1632 public static void SetDataRequestedCallback(OutArrayAction<byte> imDataRequested)
1634 _imeImDataRequestedDelegate = (IntPtr userData, out IntPtr data, out uint dataLength) =>
1637 _imDataRequestedDelegate(out dataArr);
1638 data = Marshal.AllocHGlobal(dataArr.Length);
1639 Marshal.Copy(dataArr, 0, data, dataArr.Length);
1640 dataLength = (uint)dataArr.Length;
1642 ErrorCode error = ImeEventSetImdataRequestedCb(_imeImDataRequestedDelegate, IntPtr.Zero);
1643 if (error != ErrorCode.None)
1645 Log.Error(LogTag, "Add SetDataRequestedCallback Failed with error " + error);
1647 _imDataRequestedDelegate = imDataRequested;
1651 /// Sets the GeometryRequested action.
1653 /// <param name="geometryRequested">
1654 /// Called when an associated text input UI control requests the position and size from the input panel, requesting for x, y, w, h values.
1656 /// <since_tizen> 4 </since_tizen>
1657 public static void SetGeometryRequestedCallback(OutAction<Rect> geometryRequested)
1659 _imeGeometryRequestedDelegate = (IntPtr userData, out int x, out int y, out int w, out int h) =>
1661 Rect rect = new Rect();
1662 _geometryRequestedDelegate(out rect);
1668 ErrorCode error = ImeEventSetGeometryRequestedCallbackCb(_imeGeometryRequestedDelegate, IntPtr.Zero);
1669 if (error != ErrorCode.None)
1671 Log.Error(LogTag, "Add SetGeometryRequestedCallback Failed with error " + error);
1673 _geometryRequestedDelegate = geometryRequested;
1677 /// Runs the main loop of the IME application.
1678 /// This function starts to run the IME application's main loop.
1681 /// http://tizen.org/privilege/ime
1684 /// This API is a blocking call, as it starts the main loop of the application.
1686 /// <param name="create">This is called to initialize the IME application before the main loop starts up.</param>
1687 /// <param name="terminate">This is called when the IME application is terminated.</param>
1688 /// <param name="show">
1689 /// This is called when the IME application is shown.
1690 /// It provides the context information and the context ID.
1692 /// <param name="hide">
1693 /// This is called when the IME application is hidden.
1694 /// It provides the context ID.
1696 /// <exception cref="InvalidOperationException">
1697 /// This can occur due to the following reasons:
1698 /// 1) The application does not have the privilege to call this function.
1699 /// 2) Operation failed.
1701 /// <since_tizen> 4 </since_tizen>
1702 public static void Run(Action create, Action terminate, Action<ContextId, InputMethodContext> show, Action<ContextId> hide)
1704 _userCreate = create;
1705 _userTerminate = terminate;
1708 _imeCallbackStructGCHandle._imeCallbackStruct.create = _create;
1709 _imeCallbackStructGCHandle._imeCallbackStruct.terminate = _terminate;
1710 _imeCallbackStructGCHandle._imeCallbackStruct.hide = _hide;
1711 _imeCallbackStructGCHandle._imeCallbackStruct.show = _show;
1713 ImeSetDotnetFlag(true);
1714 ErrorCode error = ImeRun(ref _imeCallbackStructGCHandle._imeCallbackStruct, IntPtr.Zero);
1715 if (error != ErrorCode.None)
1717 Log.Error(LogTag, "Run Failed with error " + error);
1718 throw InputMethodExceptionFactory.CreateException(error);
1724 /// Sends a key event to the associated text input UI control.
1727 /// This function sends a key down or up event with the key mask to the client application. If forwardKey is true, this key event goes to the edit filed directly.
1728 /// And if forwardKey is false, the ProcessKey event receives the key event before the edit field.
1731 /// http://tizen.org/privilege/ime
1733 /// <param name="keyCode">The key code to be sent.</param>
1734 /// <param name="keyMask">The modifier key mask.</param>
1735 /// <param name="forwardKey">The flag to send the key event directly to the edit field.</param>
1736 /// <exception cref="InvalidOperationException">
1737 /// This can occur due to the following reasons:
1738 /// 1) The application does not have the privilege to call this function.
1739 /// 2) The IME main loop has not started yet.
1741 /// <since_tizen> 4 </since_tizen>
1742 public static void SendKeyEvent(KeyCode keyCode, KeyMask keyMask, bool forwardKey = false)
1744 ErrorCode error = ImeSendKeyEvent(keyCode, keyMask, forwardKey);
1745 if (error != ErrorCode.None)
1747 Log.Error(LogTag, "SendEvent Failed with error " + error);
1748 throw InputMethodExceptionFactory.CreateException(error);
1753 /// Sends the text to the associated text input UI control.
1756 /// http://tizen.org/privilege/ime
1758 /// <param name="str">The string to be committed.</param>
1759 /// <exception cref="InvalidOperationException">
1760 /// This can occur due to the following reasons:
1761 /// 1) The application does not have the privilege to call this function.
1762 /// 2) The IME main loop has not started yet.
1764 /// <since_tizen> 4 </since_tizen>
1765 public static void CommitString(string str)
1767 ErrorCode error = ImeCommitString(str);
1768 if (error != ErrorCode.None)
1770 Log.Error(LogTag, "CommitString Failed with error " + error);
1771 throw InputMethodExceptionFactory.CreateException(error);
1776 /// Requests to show the pre-edit string.
1779 /// http://tizen.org/privilege/ime
1781 /// <exception cref="InvalidOperationException">
1782 /// This can occur due to the following reasons:
1783 /// 1) The application does not have the privilege to call this function.
1784 /// 2) The IME main loop has not started yet.
1786 /// <since_tizen> 4 </since_tizen>
1787 public static void ShowPreEditString()
1789 ErrorCode error = ImeShowPreeditString();
1790 if (error != ErrorCode.None)
1792 Log.Error(LogTag, "ShowPreEditString Failed with error " + error);
1793 throw InputMethodExceptionFactory.CreateException(error);
1798 /// Requests to hide the pre-edit string.
1801 /// http://tizen.org/privilege/ime
1803 /// <exception cref="InvalidOperationException">
1804 /// This can occur due to the following reasons:
1805 /// 1) The application does not have the privilege to call this function.
1806 /// 2) The IME main loop has not started yet.
1808 /// <since_tizen> 4 </since_tizen>
1809 public static void HidePreEditString()
1811 ErrorCode error = ImeHidePreeditString();
1812 if (error != ErrorCode.None)
1814 Log.Error(LogTag, "HidePreEditString Failed with error " + error);
1815 throw InputMethodExceptionFactory.CreateException(error);
1820 /// Updates a new pre-edit string.
1823 /// http://tizen.org/privilege/ime
1825 /// <param name="str">The string to be updated in pre-edit.</param>
1826 /// <param name="attrs">
1827 /// The list which has ime_preedit_attribute lists, strings can be composed of multiple string attributes: underline, highlight color, and reversal color.
1828 /// The attrs list can be empty if no attributes to set.
1830 /// <exception cref="InvalidOperationException">
1831 /// This can occur due to the following reasons:
1832 /// 1) The application does not have the privilege to call this function.
1833 /// 2) The IME main loop has not started yet.
1834 /// 3) Invalid parameter.
1836 /// <since_tizen> 4 </since_tizen>
1837 public static void UpdatePreEditString(string str, IEnumerable<PreEditAttribute> attrs)
1839 IntPtr einaList = IntPtr.Zero;
1840 List<GCHandle> attributeHandleList = new List<GCHandle>();
1841 foreach (PreEditAttribute attribute in attrs)
1843 ImePreEditAttributeStruct imePreEditAttribute = new ImePreEditAttributeStruct();
1844 imePreEditAttribute.start = attribute.Start;
1845 imePreEditAttribute.length = attribute.Length;
1846 imePreEditAttribute.type = (int)attribute.Type;
1847 imePreEditAttribute.value = attribute.Value;
1848 GCHandle attributeHandle = GCHandle.Alloc(imePreEditAttribute, GCHandleType.Pinned);
1849 attributeHandleList.Add(attributeHandle);
1850 einaList = Interop.EinaList.EinaListAppend(einaList, attributeHandle.AddrOfPinnedObject());
1852 ErrorCode error = ImeUpdatePreeditString(str, einaList);
1853 foreach (GCHandle handle in attributeHandleList)
1857 if (error != ErrorCode.None)
1859 Log.Error(LogTag, "UpdatePreEditString Failed with error " + error);
1860 throw InputMethodExceptionFactory.CreateException(error);
1865 /// Requests the surrounding text from the position of the cursor, asynchronously.
1868 /// http://tizen.org/privilege/ime
1870 /// <param name="maxLenBefore">The maximum length of the string to be retrieved before the cursor, -1 means unlimited.</param>
1871 /// <param name="maxLenAfter">The maximum length of the string to be retrieved after the cursor, -1 means unlimited.</param>
1872 /// <exception cref="InvalidOperationException">
1873 /// This can occur due to the following reasons:
1874 /// 1) The application does not have the privilege to call this function.
1875 /// 2) The IME main loop has not started yet.
1878 /// The requested surrounding text can be received using the SurroundingTextUpdated event, only if it is set.
1879 /// </postcondition>
1880 /// <since_tizen> 4 </since_tizen>
1881 public static void RequestSurroundingText(int maxLenBefore, int maxLenAfter)
1883 ErrorCode error = ImeRequestSurroundingText(maxLenBefore, maxLenAfter);
1884 if (error != ErrorCode.None)
1886 Log.Error(LogTag, "RequestSurroundingText Failed with error " + error);
1887 throw InputMethodExceptionFactory.CreateException(error);
1892 /// Requests to delete the surrounding text.
1895 /// http://tizen.org/privilege/ime
1897 /// <param name="offset">The offset value from the cursor position.</param>
1898 /// <param name="len">The length of the text to delete.</param>
1899 /// <exception cref="InvalidOperationException">
1900 /// This can occur due to the following reasons:
1901 /// 1) The application does not have the privilege to call this function.
1902 /// 2) The IME main loop has not started yet.
1903 /// 3) Invalid parameter.
1905 /// <since_tizen> 4 </since_tizen>
1906 public static void DeleteSurroundingText(int offset, int len)
1908 ErrorCode error = ImeDeleteSurroundingText(offset, len);
1909 if (error != ErrorCode.None)
1911 Log.Error(LogTag, "DeleteSurroundingText Failed with error " + error);
1912 throw InputMethodExceptionFactory.CreateException(error);
1917 /// Gets the surrounding text from the position of the cursor, synchronously.
1920 /// http://tizen.org/privilege/ime
1922 /// <param name="maxLenBefore">The maximum length of the string to be retrieved before the cursor, -1 means unlimited.</param>
1923 /// <param name="maxLenAfter">The maximum length of the string to be retrieved after the cursor, -1 means unlimited.</param>
1924 /// <param name="text">The surrounding text.</param>
1925 /// <param name="cursorPosition">The cursor position.</param>
1926 /// <exception cref="InvalidOperationException">
1927 /// This can occur due to the following reasons:
1928 /// 1) The application does not have the privilege to call this function.
1929 /// 2) The IME main loop has not started yet.
1930 /// 3) Invalid parameter.
1931 /// 4) Failed to obtain text due to out of memory.
1933 /// <since_tizen> 4 </since_tizen>
1934 public static void GetSurroundingText(int maxLenBefore, int maxLenAfter, out string text, out int cursorPosition)
1937 ErrorCode error = ImeGetSurroundingText(maxLenBefore, maxLenAfter, out txt, out cursorPosition);
1938 if (error != ErrorCode.None)
1940 Log.Error(LogTag, "GetSurroundingText Failed with error " + error);
1941 throw InputMethodExceptionFactory.CreateException(error);
1943 text = Marshal.PtrToStringAnsi(txt);
1947 /// Requests to set the selection.
1950 /// http://tizen.org/privilege/ime
1952 /// <param name="start">The start cursor position in text (in characters not bytes).</param>
1953 /// <param name="end">The end cursor position in text (in characters not bytes).</param>
1954 /// <exception cref="InvalidOperationException">
1955 /// This can occur due to the following reasons:
1956 /// 1) The application does not have the privilege to call this function.
1957 /// 2) The IME main loop has not started yet.
1958 /// 3) Invalid parameter.
1960 /// <since_tizen> 4 </since_tizen>
1961 public static void SetSelection(int start, int end)
1963 ErrorCode error = ImeSetSelection(start, end);
1964 if (error != ErrorCode.None)
1966 Log.Error(LogTag, "SetSelection Failed with error " + error);
1967 throw InputMethodExceptionFactory.CreateException(error);
1972 /// This API returns the input panel main window.
1975 /// http://tizen.org/privilege/ime
1977 /// <returns>The input panel main window object on success, otherwise null.</returns>
1978 /// <exception cref="InvalidOperationException">
1979 /// This can occur due to the following reasons:
1980 /// 1) The application does not have the privilege to call this function.
1981 /// 2) The IME main loop has not started yet.
1982 /// 3) Operation failed.
1984 /// <since_tizen> 4 </since_tizen>
1985 public static EditorWindow GetMainWindow()
1987 EditorWindow._handle = ImeGetMainWindow();
1988 EditorWindow obj = new EditorWindow();
1989 ErrorCode error = (ErrorCode)Tizen.Internals.Errors.ErrorFacts.GetLastResult();
1990 if (error != ErrorCode.None)
1992 Log.Error(LogTag, "GetMainWindow Failed with error " + error);
1993 throw InputMethodExceptionFactory.CreateException(error);
1999 /// Sends the request to hide the IME.
2002 /// http://tizen.org/privilege/ime
2004 /// <exception cref="InvalidOperationException">
2005 /// This can occur due to the following reasons:
2006 /// 1) The application does not have the privilege to call this function.
2007 /// 2) The IME main loop has not started yet.
2009 /// <since_tizen> 5 </since_tizen>
2010 public static void RequestHide()
2012 ErrorCode error = ImeRequestHide();
2013 if (error != ErrorCode.None)
2015 Log.Error(LogTag, "RequestHide Failed with error " + error);
2016 throw InputMethodExceptionFactory.CreateException(error);
2021 /// This API requests the InputMethodEditor to initialize.
2024 /// http://tizen.org/privilege/ime
2026 /// <exception cref="InvalidOperationException">
2027 /// This can occur due to the following reasons:
2028 /// 1) The application does not have the privilege to call this function.
2029 /// 2) Operation failed.
2031 /// <since_tizen> 4 </since_tizen>
2032 [EditorBrowsable(EditorBrowsableState.Never)]
2033 public static void Create()
2035 ErrorCode error = ImeInitialize();
2036 Log.Info(LogTag, "ImeInitialize result : " + error);
2037 if (error != ErrorCode.None)
2039 Log.Error(LogTag, "ImeInitialize Failed with error " + error);
2040 throw InputMethodExceptionFactory.CreateException(error);
2043 error = ImePrepare();
2044 Log.Info(LogTag, "ImePrepare result : " + error);
2045 if (error != ErrorCode.None)
2047 Log.Error(LogTag, "ImePrepare Failed with error " + error);
2048 throw InputMethodExceptionFactory.CreateException(error);
2053 /// This API requests the InputMethodEditor to finalize.
2056 /// http://tizen.org/privilege/ime
2058 /// <exception cref="InvalidOperationException">
2059 /// This can occur due to the following reasons:
2060 /// 1) The application does not have the privilege to call this function.
2061 /// 2) Operation failed.
2063 /// <since_tizen> 4 </since_tizen>
2064 [EditorBrowsable(EditorBrowsableState.Never)]
2065 public static void Destroy()
2067 ErrorCode error = ImeFinalize();
2068 Log.Info(LogTag, "ImeFinalize result : " + error);
2069 if (error != ErrorCode.None)
2071 Log.Error(LogTag, "ImeFinalize Failed with error " + error);
2072 throw InputMethodExceptionFactory.CreateException(error);
2077 /// Sets the floating mode to on or off.
2080 /// http://tizen.org/privilege/ime
2082 /// <param name="floatingMode"><c>true</c> to set the floating mode to on and <c>false</c> to set it to off.</param>
2083 /// <exception cref="InvalidOperationException">
2084 /// This can occur due to the following reasons:
2085 /// 1) The application does not have the privilege to call this function.
2086 /// 2) The IME main loop has not started yet.
2088 /// <since_tizen> 5 </since_tizen>
2089 public static void SetFloatingMode(bool floatingMode)
2091 ErrorCode error = ImeSetFloatingMode(floatingMode);
2092 if (error != ErrorCode.None)
2094 Log.Error(LogTag, "SetFloatingMode Failed with error " + error);
2095 throw InputMethodExceptionFactory.CreateException(error);
2100 /// Allows the floating input panel window to move along with the mouse pointer when the mouse is pressed.
2103 /// http://tizen.org/privilege/ime
2106 /// This function can be used in floating mode. If the floating mode is deactivated, calling this function has no effect.
2108 /// <exception cref="InvalidOperationException">
2109 /// This can occur due to the following reasons:
2110 /// 1) The application does not have the privilege to call this function.
2111 /// 2) The IME main loop has not started yet.
2113 /// <since_tizen> 5 </since_tizen>
2114 public static void SetFloatingDragStart()
2116 ErrorCode error = ImeSetFloatingDragStart();
2117 if (error != ErrorCode.None)
2119 Log.Error(LogTag, "SetFloatingDragStart Failed with error " + error);
2120 throw InputMethodExceptionFactory.CreateException(error);
2125 /// Does not allow the movement of the floating input panel window with the mouse pointer when the mouse is pressed.
2128 /// http://tizen.org/privilege/ime
2131 /// This function can be used in floating mode. If the floating mode is deactivated, calling this function has no effect.
2133 /// <exception cref="InvalidOperationException">
2134 /// This can occur due to the following reasons:
2135 /// 1) The application does not have the privilege to call this function.
2136 /// 2) The IME main loop has not started yet.
2138 /// <since_tizen> 5 </since_tizen>
2139 public static void SetFloatingDragEnd()
2141 ErrorCode error = ImeSetFloatingDragEnd();
2142 if (error != ErrorCode.None)
2144 Log.Error(LogTag, "SetFloatingDragEnd Failed with error " + error);
2145 throw InputMethodExceptionFactory.CreateException(error);
2150 /// Notifies the changed language of the input panel to the the associated text input UI control.
2153 /// http://tizen.org/privilege/ime
2156 /// LanguageRequestedCallback is raised after this API is called when the App requests changed language information.
2158 /// <exception cref="InvalidOperationException">
2159 /// This can occur due to the following reasons:
2160 /// 1) The application does not have the privilege to call this function.
2161 /// 2) The IME main loop has not started yet.
2163 /// <since_tizen> 6 </since_tizen>
2164 public static void SendLanguageUpdated()
2166 ErrorCode error = ImeUpdateInputPanelEvent(ImeEventType.Language, 0);
2167 if (error != ErrorCode.None)
2169 Log.Error(LogTag, "SendLanguageUpdated Failed with error " + error);
2170 throw InputMethodExceptionFactory.CreateException(error);
2175 /// Sends the changed shift mode of the input panel to the the associated text input UI control.
2178 /// http://tizen.org/privilege/ime
2180 /// <param name="enable"><c>true</c> if shift button is clicked, otherwise <c>false</c>.</param>
2181 /// <exception cref="InvalidOperationException">
2182 /// This can occur due to the following reasons:
2183 /// 1) The application does not have the privilege to call this function.
2184 /// 2) The IME main loop has not started yet.
2186 /// <since_tizen> 6 </since_tizen>
2187 public static void SendShiftModeUpdated(bool enable)
2189 ErrorCode error = ImeUpdateInputPanelEvent(ImeEventType.ShiftMode, enable ? (uint)ImeShiftMode.On : (uint)ImeShiftMode.Off);
2190 if (error != ErrorCode.None)
2192 Log.Error(LogTag, "SendInputPanelEvent Failed with error " + error);
2193 throw InputMethodExceptionFactory.CreateException(error);
2198 /// Notifies the changed geometry of input panel window to the associated text input UI control.
2201 /// http://tizen.org/privilege/ime
2203 /// <exception cref="InvalidOperationException">
2204 /// This can occur due to the following reasons:
2205 /// 1) The application does not have the privilege to call this function.
2206 /// 2) The IME main loop has not started yet.
2208 /// <since_tizen> 6 </since_tizen>
2209 public static void SendCustomGeometryUpdated()
2211 ErrorCode error = ImeUpdateInputPanelEvent(ImeEventType.Geometry, 0);
2212 if (error != ErrorCode.None)
2214 Log.Error(LogTag, "SendCustomGeometryUpdated Failed with error " + error);
2215 throw InputMethodExceptionFactory.CreateException(error);
2220 /// Gets the selected text synchronously.
2223 /// http://tizen.org/privilege/ime
2225 /// <returns>The selected text.</returns>
2226 /// <exception cref="InvalidOperationException">
2227 /// This can occur due to the following reasons:
2228 /// 1) The application does not have the privilege to call this function.
2229 /// 2) The IME main loop has not started yet.
2230 /// 3) Invalid parameter.
2232 /// <since_tizen> 6 </since_tizen>
2233 public static string GetSelectedText()
2236 ErrorCode error = ImeGetSelectedText(out txt);
2237 if (error != ErrorCode.None)
2239 Log.Error(LogTag, "GetSelectedText Failed with error " + error);
2240 throw InputMethodExceptionFactory.CreateException(error);
2242 return Marshal.PtrToStringAnsi(txt);
2246 /// Called to set the prediction hint string to deliver to the input panel.
2248 /// <since_tizen> 6 </since_tizen>
2249 public static event EventHandler<PredictionHintUpdatedEventArgs> PredictionHintUpdated
2255 if (_imePredictionHintSetDelegate == null)
2257 _imePredictionHintSetDelegate = (IntPtr predictionHint, IntPtr userData) =>
2259 PredictionHintUpdatedEventArgs args = new PredictionHintUpdatedEventArgs(Marshal.PtrToStringAnsi(predictionHint));
2260 _predictionHintUpdated?.Invoke(null, args);
2262 ErrorCode error = ImeEventSetPredictionHintSetCb(_imePredictionHintSetDelegate, IntPtr.Zero);
2263 if (error != ErrorCode.None)
2265 Log.Error(LogTag, "Add PredictionHintUpdated Failed with error " + error);
2268 _predictionHintUpdated += value;
2275 _predictionHintUpdated -= value;
2281 /// Called to set the prediction hint key and value to deliver to the input panel.
2283 /// <since_tizen> 6 </since_tizen>
2284 public static event EventHandler<PredictionHintDataUpdatedEventArgs> PredictionHintDataUpdated
2290 if (_imePredictionHintDataSetDelegate == null)
2292 _imePredictionHintDataSetDelegate = (IntPtr key, IntPtr keyValue, IntPtr userData) =>
2294 PredictionHintDataUpdatedEventArgs args = new PredictionHintDataUpdatedEventArgs(Marshal.PtrToStringAnsi(key), Marshal.PtrToStringAnsi(keyValue));
2295 _predictionHintDataUpdated?.Invoke(null, args);
2298 ErrorCode error = ImeEventSetPredictionHintDataSetCb(_imePredictionHintDataSetDelegate, IntPtr.Zero);
2299 if (error != ErrorCode.None)
2301 Log.Error(LogTag, "Add PredictionHintDataUpdated Failed with error " + error);
2304 _predictionHintDataUpdated += value;
2311 _predictionHintDataUpdated -= value;
2317 /// Called when an associated text input UI control requests the text entry to set the MIME type.
2319 /// <since_tizen> 6 </since_tizen>
2320 public static event EventHandler<MimeTypeUpdateRequestedEventArgs> MimeTypeUpdateRequested
2326 if (_imeMimeTypeSetRequestDelegate == null)
2328 _imeMimeTypeSetRequestDelegate = (IntPtr mimeType, IntPtr userData) =>
2330 MimeTypeUpdateRequestedEventArgs args = new MimeTypeUpdateRequestedEventArgs(Marshal.PtrToStringAnsi(mimeType));
2331 _mimeTypeUpdateRequested?.Invoke(null, args);
2333 ErrorCode error = ImeEventSetMimeTypeSetRequestCb(_imeMimeTypeSetRequestDelegate, IntPtr.Zero);
2334 if (error != ErrorCode.None)
2336 Log.Error(LogTag, "Add MimeTypeUpdateRequested Failed with error " + error);
2339 _mimeTypeUpdateRequested += value;
2346 _mimeTypeUpdateRequested -= value;
2352 /// Sends a private command to the associated text input UI control.
2355 /// http://tizen.org/privilege/ime
2357 /// <param name="command">The UTF-8 string to be sent.</param>
2358 /// <exception cref="InvalidOperationException">
2359 /// This can occur due to the following reasons:
2360 /// 1) The application does not have the privilege to call this function.
2361 /// 2) The IME main loop has not started yet.
2362 /// 3) Invalid parameter.
2364 /// <since_tizen> 6 </since_tizen>
2365 public static void SendPrivateCommand(string command)
2367 ErrorCode error = ImeSendPrivateCommand(command);
2368 if (error != ErrorCode.None)
2370 Log.Error(LogTag, "SendPrivateCommand Failed with error " + error);
2371 throw InputMethodExceptionFactory.CreateException(error);
2376 /// Commits contents such as image to the associated text input UI control.
2379 /// http://tizen.org/privilege/ime
2381 /// <param name="content">The content URI to be sent.</param>
2382 /// <param name="description">The content description.</param>
2383 /// <param name="mimeType">The MIME type received from the MimeTypeSetRequest</param>
2384 /// <exception cref="InvalidOperationException">
2385 /// This can occur due to the following reasons:
2386 /// 1) The application does not have the privilege to call this function.
2387 /// 2) The IME main loop has not started yet.
2388 /// 3) Invalid parameter.
2390 /// <since_tizen> 6 </since_tizen>
2391 public static void CommitContent(string content, string description, string mimeType)
2393 ErrorCode error = ImeCommitContent(content, description, mimeType);
2394 if (error != ErrorCode.None)
2396 Log.Error(LogTag, "CommitContent Failed with error " + error);
2397 throw InputMethodExceptionFactory.CreateException(error);