Add the function to change the input language 34/262134/1
authorInhong <tukkong123@naver.com>
Wed, 26 May 2021 08:15:30 +0000 (17:15 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Tue, 3 Aug 2021 05:17:26 +0000 (14:17 +0900)
Change-Id: I1cb808f597a93d7229f7b999106d99ac3ca1872a

ISEDefaultNUI/Common/LanguageManager.cs
ISEDefaultNUI/ISEDefaultNUI.cs
ISEDefaultNUI/Interop/Interop.SclNui.cs
ISEDefaultNUI/SCLNUI.cs
ISEDefaultNUI/Setting/InputLanguagesPage.cs
ISEDefaultNUI/Setting/KeyboardSettingPage.cs

index 986a122f36e01ad8e7ca9573c0795e76efb5b371..350f9827e699ed63371043607ffd1fd0261697ad 100644 (file)
@@ -142,5 +142,30 @@ namespace ISEDefaultNUI
 
             return languages;
         }
+
+        public LanguageInfo GetNextLanguage()
+        {
+            List<LanguageInfo> languageInfos = languageInfoList.FindAll(x => x.Enabled == true);
+            int index = languageInfos.FindIndex(x => x.Name == languageInfoList[currentLanguage].Name);
+            if (index == languageInfos.Count - 1)
+                return languageInfos[0];
+            else
+                return languageInfos[index + 1];
+        }
+
+        public LanguageInfo GetPreviousLanguage()
+        {
+            List<LanguageInfo> languageInfos = languageInfoList.FindAll(x => x.Enabled == true);
+            int index = languageInfos.FindIndex(x => x.Name == languageInfoList[currentLanguage].Name);
+            if (index == 0)
+                return languageInfos[languageInfos.Count - 1];
+            else
+                return languageInfos[index - 1];
+        }
+
+        public void SelectLanguage(LanguageInfo language)
+        {
+            currentLanguage = languageInfoList.FindIndex(x => x.Name == language.Name);
+        }
     }
 }
index 9e17e70cd8986a55a00b8528d5cc107c5fc83b5a..2db31784e332a26dcdd8144641a5a33d4b224caf 100644 (file)
@@ -2,7 +2,6 @@
 using System.Xml;
 using Tizen.NUI;
 using Tizen.NUI.Components;
-using Tizen.NUI.BaseComponents;
 using Tizen;
 using System.Collections.Generic;
 using Tizen.Applications;
@@ -32,15 +31,6 @@ namespace ISEDefaultNUI
             };
             window.Add(navigator);
 
-            SCLNUI SclNui = new SCLNUI(navigator, DirectoryInfo.Resource + "main_entry.xml");
-            Log.Info("NUIIME", "KOREAN_QTY");
-
-            SclNui.SetInputMode("KOREAN_QTY");
-            SclNui.SetCurrentSublayout("DEFAULT");
-            SclNui.SetStringSubstitution("_LANGUAGE_", "Korean");
-            SclNui.SetUpdatePending(false);
-            navigator.Push(SclNui);
-
             RegisterLanguageInfo();
             bool exists = Preference.Contains(ResourceManager.IseConfigKeypadMode);
             if (!exists)
@@ -48,6 +38,14 @@ namespace ISEDefaultNUI
 
             IseConfig.Instance.ReadIseConfig();
             LanguageManager.Instance.SetEnabledLanguages(IseConfig.Instance.EnabledLanguages);
+
+            LanguageInfo currentLanguage = LanguageManager.Instance.GetLanguageInfo(LanguageManager.Instance.GetCurrentLanguage());
+            SCLNUI SclNui = new SCLNUI(navigator, DirectoryInfo.Resource + "main_entry.xml");
+            SclNui.SetInputMode(currentLanguage.SelectedInputMode);
+            SclNui.SetCurrentSublayout("DEFAULT");
+            SclNui.SetStringSubstitution("_LANGUAGE_", currentLanguage.DisplayName);
+            SclNui.SetUpdatePending(false);
+            navigator.Push(SclNui);
         }
 
         private void RegisterLanguageInfo()
index 036fca5b8993352c0d0cd35bbe108dc9e442880f..0fdb54047df5838fbde9d31dff17146afe51967c 100644 (file)
@@ -176,6 +176,9 @@ internal static partial class Interop
         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         internal delegate int KeyClickEventCallback(IntPtr eventDesc);
 
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate int DragStateChangedCallback(IntPtr eventDesc);
+
         [DllImport(Libraries.SclNui, EntryPoint = "scl_nui_init")]
         internal static extern int SclNuiInit(string entry_filepath);
 
@@ -217,5 +220,8 @@ internal static partial class Interop
 
         [DllImport(Libraries.SclNui, EntryPoint = "scl_nui_set_key_click_event_cb")]
         internal static extern int SclNuiKeyClickEventCb(KeyClickEventCallback callbackFunction);
+
+        [DllImport(Libraries.SclNui, EntryPoint = "scl_nui_set_drag_state_changed_cb")]
+        internal static extern int SclNuiDragStateChangedCb(DragStateChangedCallback callbackFunction);
     }
 }
index c3c7a2d3e60827df0e73f8cfe4f0fde20a26fde2..33a68945a29c77dfe45f295f5828f547776279b2 100644 (file)
@@ -1,10 +1,8 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
 using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading.Tasks;
 using Tizen;
+using Tizen.Applications;
 using Tizen.NUI;
 using Tizen.NUI.BaseComponents;
 using Tizen.NUI.Components;
@@ -19,6 +17,7 @@ namespace ISEDefaultNUI
         private DrawRectangleCallback _draw_rectangle_cb = null;
         private UpdateWindowCallback _update_window_cb = null;
         private KeyClickEventCallback _onKeyClickEvent = null;
+        private DragStateChangedCallback _onDragStateChangedEvent = null;
 
         private List<ImageView> image_list;
         private List<TextLabel> label_list;
@@ -28,6 +27,9 @@ namespace ISEDefaultNUI
         private ImageView imageView;
         private View rectView;
 
+        private int beforePositionX = 0;
+        private int afterPositionX = 0;
+
         enum LabelAlignment
         {
             LABEL_ALIGN_LEFT_TOP = 0,
@@ -130,11 +132,33 @@ namespace ISEDefaultNUI
                     navigator.Push(keyboardSettingPage);
                 }
 
+                if (eventInfo.keyValue.Equals("Space") && afterPositionX != 0 && Math.Abs(beforePositionX - afterPositionX) > 100)
+                {
+                    navigator.Pop();
+                    SCLNUI SclNui = new SCLNUI(navigator, Application.Current.DirectoryInfo.Resource + "main_entry.xml");
+                    LanguageInfo nextLanguage = beforePositionX < afterPositionX ? LanguageManager.Instance.GetNextLanguage() : LanguageManager.Instance.GetPreviousLanguage();
+                    LanguageManager.Instance.SelectLanguage(nextLanguage);
+                    SclNui.SetInputMode(nextLanguage.SelectedInputMode);
+                    SclNui.SetCurrentSublayout("DEFAULT");
+                    SclNui.SetStringSubstitution("_LANGUAGE_", nextLanguage.DisplayName);
+                    SclNui.SetUpdatePending(false);
+                    navigator.Push(SclNui);
+                }
+
+                beforePositionX = 0;
+                afterPositionX = 0;
+
                 Marshal.FreeHGlobal(pnt);
                 return (int)SclNuiEventReturnType.PassOn;
             };
             SclNuiKeyClickEventCb(_onKeyClickEvent);
 
+            _onDragStateChangedEvent = (IntPtr eventDesc) =>
+            {
+                return (int)SclNuiEventReturnType.PassOn;
+            };
+            SclNuiDragStateChangedCb(_onDragStateChangedEvent);
+
             Window.Instance.TouchEvent += OnWindowTouched;
 
             BackKeyPressed += (object source, EventArgs args) =>
@@ -343,14 +367,15 @@ namespace ISEDefaultNUI
                 case PointStateType.Down:
                     {
                         Log.Info("NUIIME", "[MOUSE DOWN] x=" + e.Touch.GetScreenPosition(0).X + ", y=" + e.Touch.GetScreenPosition(0).Y);
-                        
                         SclControllerMousePress((int)e.Touch.GetScreenPosition(0).X, (int)e.Touch.GetScreenPosition(0).Y);
+                        beforePositionX = (int)e.Touch.GetScreenPosition(0).X;
                         break;
                     }
                 case PointStateType.Motion:
                     {
                         Log.Info("NUIIME", "[MOUSE MOVE] x=" + e.Touch.GetScreenPosition(0).X + ", y=" + e.Touch.GetScreenPosition(0).Y);
                         SclControllerMouseMove((int)e.Touch.GetScreenPosition(0).X, (int)e.Touch.GetScreenPosition(0).Y, 0);
+                        afterPositionX = (int)e.Touch.GetScreenPosition(0).X;
                         break;
                     }
                 case PointStateType.Up:
index 7095c42eb4b90e822820c6374c792cfd0cee4408..4950e5e0ad9bf8ade5fb69cde0b06a290fdc2afe 100644 (file)
@@ -161,6 +161,8 @@ namespace ISEDefaultNUI
             {
                 if (enableLanguages.Find(x => x == e.Name) != null && enableLanguages.Count > ResourceManager.MinSelectedLanguages)
                 {
+                    LanguageInfo nextLanguage = LanguageManager.Instance.GetNextLanguage();
+                    LanguageManager.Instance.SelectLanguage(nextLanguage);
                     enableLanguages.Remove(e.Name);
                     LanguageManager.Instance.SetEnabledLanguages(enableLanguages);
                     IseConfig.Instance.EnabledLanguages = enableLanguages;
index 8e39a8d3bc4f501e7bdb52c70f91e9803681f4e6..c21b68404dc4bb3a04d94c91fb1bbcff69e9adc6 100644 (file)
@@ -253,10 +253,11 @@ namespace ISEDefaultNUI
         private void GoBack()
         {
             navigator.Pop();
+            LanguageInfo currentLanguage = LanguageManager.Instance.GetLanguageInfo(LanguageManager.Instance.GetCurrentLanguage());
             SCLNUI SclNui = new SCLNUI(navigator, Application.Current.DirectoryInfo.Resource + "main_entry.xml");
-            SclNui.SetInputMode("KOREAN_QTY");
+            SclNui.SetInputMode(currentLanguage.SelectedInputMode);
             SclNui.SetCurrentSublayout("DEFAULT");
-            SclNui.SetStringSubstitution("_LANGUAGE_", "Korean");
+            SclNui.SetStringSubstitution("_LANGUAGE_", currentLanguage.DisplayName);
             SclNui.SetUpdatePending(false);
             navigator.Push(SclNui);
         }
@@ -266,4 +267,5 @@ namespace ISEDefaultNUI
             base.Dispose(type);
         }
     }
-}
\ No newline at end of file
+}
+