From ce706db0491043475b2add4c000bf5ee5e7d3231 Mon Sep 17 00:00:00 2001 From: Seoyeon2Kim <34738918+Seoyeon2Kim@users.noreply.github.com> Date: Wed, 24 Jul 2019 12:19:17 +0900 Subject: [PATCH] [NUI] Add to set MIME type to the input panel and its callback (#935) * [NUI] Add to set MIME type to the input panel and its callback Signed-off-by: Seoyeon Kim * Update InputMethodContext.cs All APIs will be opened later, so changed to hidden APIs. * Update ContentReceivedSignalType.cs Removed 'EditorBrowsable' tag on each API because this file is in 'internal' group. --- .../src/internal/ContentReceivedSignalType.cs | 187 ++++++++++++++++++ .../Interop.ContentReceivedSignalType.cs | 39 ++++ .../Interop/Interop.InputMethodContext.cs | 5 + .../src/public/InputMethodContext.cs | 103 ++++++++++ 4 files changed, 334 insertions(+) create mode 100755 src/Tizen.NUI/src/internal/ContentReceivedSignalType.cs create mode 100755 src/Tizen.NUI/src/internal/Interop/Interop.ContentReceivedSignalType.cs diff --git a/src/Tizen.NUI/src/internal/ContentReceivedSignalType.cs b/src/Tizen.NUI/src/internal/ContentReceivedSignalType.cs new file mode 100755 index 000000000..b24b5fdb0 --- /dev/null +++ b/src/Tizen.NUI/src/internal/ContentReceivedSignalType.cs @@ -0,0 +1,187 @@ +/* + * Copyright(c) 2019 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +using System; +using System.Runtime.InteropServices; +using System.ComponentModel; + +namespace Tizen.NUI +{ + internal class ContentReceivedSignalType : global::System.IDisposable + { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + /// + /// ContentReceivedSignalType + /// + protected bool swigCMemOwn; + + internal ContentReceivedSignalType(global::System.IntPtr cPtr, bool cMemoryOwn) + { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ContentReceivedSignalType obj) + { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + //A Flag to check who called Dispose(). (By User or DisposeQueue) + private bool isDisposeQueued = false; + /// + /// A Flat to check if it is already disposed. + /// + protected bool disposed = false; + + /// + /// Dispose + /// + ~ContentReceivedSignalType() + { + if (!isDisposeQueued) + { + isDisposeQueued = true; + DisposeQueue.Instance.Add(this); + } + } + + /// + /// Dispose + /// + public void Dispose() + { + //Throw excpetion if Dispose() is called in separate thread. + if (!Window.IsInstalled()) + { + throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread."); + } + + if (isDisposeQueued) + { + Dispose(DisposeTypes.Implicit); + } + else + { + Dispose(DisposeTypes.Explicit); + System.GC.SuppressFinalize(this); + } + } + + /// + /// Dispose + /// + protected virtual void Dispose(DisposeTypes type) + { + if (disposed) + { + return; + } + + if (type == DisposeTypes.Explicit) + { + //Called by User + //Release your own managed resources here. + //You should release all of your own disposable objects here. + + } + + //Release your own unmanaged resources here. + //You should not access any managed member here except static instance. + //because the execution order of Finalizes is non-deterministic. + if (swigCPtr.Handle != global::System.IntPtr.Zero) + { + if (swigCMemOwn) + { + swigCMemOwn = false; + Interop.ContentReceivedSignalType.delete_ContentReceivedSignalType(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + + disposed = true; + } + + /// + /// Queries whether there are any connected slots. + /// + /// True if there are any slots connected to the signal + public bool Empty() + { + bool ret = Interop.ContentReceivedSignalType.ContentReceivedSignalType_Empty(swigCPtr); + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + /// + /// Queries the number of slots. + /// + /// The number of slots connected to this signal + public uint GetConnectionCount() + { + uint ret = Interop.ContentReceivedSignalType.ContentReceivedSignalType_GetConnectionCount(swigCPtr); + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + /// + /// Connects a function. + /// + /// The function to connect + public void Connect(System.Delegate func) + { + System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func); + { + Interop.ContentReceivedSignalType.ContentReceivedSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip)); + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + } + } + + /// + /// Disconnects a function. + /// + /// The function to disconnect + public void Disconnect(System.Delegate func) + { + System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func); + { + Interop.ContentReceivedSignalType.ContentReceivedSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip)); + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + } + } + + /// + /// Connects a member function. + /// + /// The member function to connect + /// The member function to connect + /// The member function to connect + public void Emit(string arg1, string arg2, string arg3) + { + Interop.ContentReceivedSignalType.ContentReceivedSignalType_Emit(swigCPtr, arg1, arg2, arg3); + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + } + + /// + /// The contructor. + /// + public ContentReceivedSignalType() : this(Interop.ContentReceivedSignalType.new_ContentReceivedSignalType(), true) + { + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + } + + } + +} diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.ContentReceivedSignalType.cs b/src/Tizen.NUI/src/internal/Interop/Interop.ContentReceivedSignalType.cs new file mode 100755 index 000000000..2a80bd4ed --- /dev/null +++ b/src/Tizen.NUI/src/internal/Interop/Interop.ContentReceivedSignalType.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Tizen.NUI +{ + internal static partial class Interop + { + internal static partial class ContentReceivedSignalType + { + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_ContentReceivedSignalType_Empty")] + public static extern bool ContentReceivedSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1); + + + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_ContentReceivedSignalType_GetConnectionCount")] + public static extern uint ContentReceivedSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_ContentReceivedSignalType_Connect")] + public static extern void ContentReceivedSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_ContentReceivedSignalType_Disconnect")] + public static extern void ContentReceivedSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_ContentReceivedSignalType_Emit")] + public static extern void ContentReceivedSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2, string jarg3, string jarg4); + + + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_new_ContentReceivedSignalType")] + public static extern global::System.IntPtr new_ContentReceivedSignalType(); + + + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_ContentReceivedSignalType")] + public static extern void delete_ContentReceivedSignalType(global::System.Runtime.InteropServices.HandleRef jarg1); + } + } +} diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.InputMethodContext.cs b/src/Tizen.NUI/src/internal/Interop/Interop.InputMethodContext.cs index 333f60257..1cd3ce5b1 100755 --- a/src/Tizen.NUI/src/internal/Interop/Interop.InputMethodContext.cs +++ b/src/Tizen.NUI/src/internal/Interop/Interop.InputMethodContext.cs @@ -221,6 +221,8 @@ namespace Tizen.NUI [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_InputMethodContext_GetInputPanelLocale")] public static extern string InputMethodContext_GetInputPanelLocale(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_InputMethodContext_SetMIMEType")] + public static extern void InputMethodContext_SetMIMEType(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2); [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_InputMethodContext_AllowTextPrediction")] public static extern void InputMethodContext_AllowTextPrediction(global::System.Runtime.InteropServices.HandleRef jarg1, bool jarg2); @@ -253,6 +255,9 @@ namespace Tizen.NUI [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_InputMethodContext_KeyboardTypeChangedSignal")] public static extern global::System.IntPtr InputMethodContext_KeyboardTypeChangedSignal(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_InputMethodContext_ContentReceivedSignal")] + public static extern global::System.IntPtr InputMethodContext_ContentReceivedSignal(global::System.Runtime.InteropServices.HandleRef jarg1); + } } } diff --git a/src/Tizen.NUI/src/public/InputMethodContext.cs b/src/Tizen.NUI/src/public/InputMethodContext.cs index 158d9825e..3fa18cb45 100755 --- a/src/Tizen.NUI/src/public/InputMethodContext.cs +++ b/src/Tizen.NUI/src/public/InputMethodContext.cs @@ -35,6 +35,7 @@ namespace Tizen.NUI private ResizedEventCallbackType _resizedEventCallback; private LanguageChangedEventCallbackType _languageChangedEventCallback; private KeyboardTypeChangedEventCallbackType _keyboardTypeChangedEventCallback; + private ContentReceivedCallbackType _contentReceivedEventCallback; /// /// Constructor.
@@ -58,6 +59,7 @@ namespace Tizen.NUI private delegate void ResizedEventCallbackType(int resized); private delegate void LanguageChangedEventCallbackType(int languageChanged); private delegate void KeyboardTypeChangedEventCallbackType(KeyboardType type); + private delegate void ContentReceivedCallbackType(string content, string description, string mimeType); private event EventHandler _activatedEventHandler; private event EventHandlerWithReturnType _eventReceivedEventHandler; @@ -65,6 +67,7 @@ namespace Tizen.NUI private event EventHandler _resizedEventHandler; private event EventHandler _languageChangedEventHandler; private event EventHandler _keyboardTypeChangedEventHandler; + private event EventHandler _contentReceivedEventHandler; /// /// InputMethodContext activated. @@ -228,6 +231,34 @@ namespace Tizen.NUI } } + /// + /// InputMethodContext content received. + /// + /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API. + [EditorBrowsable(EditorBrowsableState.Never)] + public event EventHandler ContentReceived + { + add + { + if (_contentReceivedEventHandler == null) + { + _contentReceivedEventCallback = OnContentReceived; + ContentReceivedSignal().Connect(_contentReceivedEventCallback); + } + + _contentReceivedEventHandler += value; + } + remove + { + _contentReceivedEventHandler -= value; + + if (_contentReceivedEventHandler == null && _contentReceivedEventCallback != null) + { + ContentReceivedSignal().Disconnect(_contentReceivedEventCallback); + } + } + } + /// /// The direction of the text. /// @@ -610,6 +641,19 @@ namespace Tizen.NUI return ret; } + /// + /// Sets the allowed MIME Type to deliver to the input panel.
+ /// For example, string mimeType = "text/plain,image/png,image/gif,application/pdf"; + ///
+ /// The allowed MIME type. + /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API. + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetMIMEType(string mimeType) + { + Interop.InputMethodContext.InputMethodContext_SetMIMEType(swigCPtr, mimeType); + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + } + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(InputMethodContext obj) { return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, IntPtr.Zero) : obj.swigCPtr; @@ -695,6 +739,13 @@ namespace Tizen.NUI return ret; } + internal ContentReceivedSignalType ContentReceivedSignal() + { + ContentReceivedSignalType ret = new ContentReceivedSignalType(Interop.InputMethodContext.InputMethodContext_ContentReceivedSignal(swigCPtr), false); + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + /// /// You can override it to clean-up your own resources. /// @@ -830,6 +881,19 @@ namespace Tizen.NUI } } + private void OnContentReceived(string content, string description, string mimeType) + { + ContentReceivedEventArgs e = new ContentReceivedEventArgs(); + e.Content = content; + e.Description = description; + e.MimeType = mimeType; + + if (_contentReceivedEventHandler != null) + { + _contentReceivedEventHandler(this, e); + } + } + /// /// This structure is used to pass on data from the IMF regarding predictive text. /// @@ -1370,5 +1434,44 @@ namespace Tizen.NUI set; } } + + /// + /// InputMethodContext content received event arguments. + /// + /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API. + [EditorBrowsable(EditorBrowsableState.Never)] + public class ContentReceivedEventArgs : EventArgs + { + /// + /// The content, such as images, of input method + /// + /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API. + [EditorBrowsable(EditorBrowsableState.Never)] + public string Content + { + get; + set; + } + /// + /// The description of content + /// + /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API. + [EditorBrowsable(EditorBrowsableState.Never)] + public string Description + { + get; + set; + } + /// + /// The mime type of content, such as jpg, png, and so on + /// + /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API. + [EditorBrowsable(EditorBrowsableState.Never)] + public string MimeType + { + get; + set; + } + } } } -- 2.34.1