From add1e1bb86b1589497554f63a067a9985d4fd8af Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Thu, 20 Mar 2025 17:07:12 +0900 Subject: [PATCH] [NUI] Minimize system LocaleLanguage API calls in Text Every time we set Translatable text, system LocaleLanguage API is called, which creates overhead. This patch updates through static classes only when a specific value is needed. Signed-off-by: Bowon Ryu --- .../SystemLocaleLanguageChangedManager.cs | 81 +++++++++++++++++++ .../src/public/BaseComponents/TextEditor.cs | 52 +++++++++--- .../src/public/BaseComponents/TextField.cs | 50 +++++++++--- .../src/public/BaseComponents/TextLabel.cs | 50 +++++++++--- 4 files changed, 196 insertions(+), 37 deletions(-) create mode 100644 src/Tizen.NUI/src/internal/Common/SystemLocaleLanguageChangedManager.cs diff --git a/src/Tizen.NUI/src/internal/Common/SystemLocaleLanguageChangedManager.cs b/src/Tizen.NUI/src/internal/Common/SystemLocaleLanguageChangedManager.cs new file mode 100644 index 000000000..24172f1bc --- /dev/null +++ b/src/Tizen.NUI/src/internal/Common/SystemLocaleLanguageChangedManager.cs @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2025 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. + * + */ + +extern alias TizenSystemSettings; +using TizenSystemSettings.Tizen.System; + +using System; + +namespace Tizen.NUI +{ + /// + /// A static class which adds user handler to the SystemSettings.LocaleLanguageChanged event. + /// This class also adds user handler to the last of the SystemSettings.LocaleLanguageChanged event. + /// + internal static class SystemLocaleLanguageChangedManager + { + static SystemLocaleLanguageChangedManager() + { + SystemSettings.LocaleLanguageChanged += SystemLocaleLanguageChanged; + } + + /// + /// The handler invoked last after all handlers added to the SystemSettings.LocaleLanguageChanged event are invoked. + /// + public static event EventHandler Finished; + + /// + /// Adds the given handler to the SystemSettings.LocaleLanguageChanged event. + /// + /// A handler to be added to the event + public static void Add(EventHandler handler) + { + proxy.Add(handler); + } + + /// + /// Removes the given handler from the SystemSettings.LocaleLanguageChanged event. + /// + /// A handler to be added to the event + public static void Remove(EventHandler handler) + { + proxy.Remove(handler); + } + + private static void SystemLocaleLanguageChanged(object sender, LocaleLanguageChangedEventArgs args) + { + localeLanguage = args.Value; + proxy.Invoke(sender, args); + Finished?.Invoke(sender, args); + } + + public static string LocaleLanguage + { + get + { + if (string.IsNullOrEmpty(localeLanguage)) + { + localeLanguage = SystemSettings.LocaleLanguage; + } + return localeLanguage; + } + } + + private static string localeLanguage = string.Empty; + private static WeakEvent> proxy = new WeakEvent>(); + } +} \ No newline at end of file diff --git a/src/Tizen.NUI/src/public/BaseComponents/TextEditor.cs b/src/Tizen.NUI/src/public/BaseComponents/TextEditor.cs index 547a1ab9d..928b24c66 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/TextEditor.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/TextEditor.cs @@ -34,7 +34,6 @@ namespace Tizen.NUI.BaseComponents { static private string defaultStyleName = "Tizen.NUI.BaseComponents.TextEditor"; static private string defaultFontFamily = "TizenSans"; - private static SystemLocaleLanguageChanged systemLocaleLanguageChanged = new SystemLocaleLanguageChanged(); private string textEditorTextSid = null; private string textEditorPlaceHolderTextSid = null; private InputMethodContext inputMethodContext = null; @@ -3834,11 +3833,7 @@ namespace Tizen.NUI.BaseComponents internalTextColor?.Dispose(); internalGrabHandleColor?.Dispose(); - if (hasSystemLanguageChanged) - { - systemLocaleLanguageChanged.Remove(SystemSettings_LocaleLanguageChanged); - } - + RemoveSystemSettingsLocaleLanguageChanged(); RemoveSystemSettingsFontTypeChanged(); RemoveSystemSettingsFontSizeChanged(); @@ -3907,24 +3902,21 @@ namespace Tizen.NUI.BaseComponents private string SetTranslatable(string textEditorSid) { string translatableText = null; - translatableText = NUIApplication.MultilingualResourceManager?.GetString(textEditorSid, new CultureInfo(SystemSettings.LocaleLanguage.Replace("_", "-"))); + translatableText = NUIApplication.MultilingualResourceManager?.GetString(textEditorSid, new CultureInfo(SystemLocaleLanguageChangedManager.LocaleLanguage.Replace("_", "-"))); if (translatableText != null) { - if (hasSystemLanguageChanged == false) - { - systemLocaleLanguageChanged.Add(SystemSettings_LocaleLanguageChanged); - hasSystemLanguageChanged = true; - } + AddSystemSettingsLocaleLanguageChanged(); return translatableText; } else { translatableText = ""; + RemoveSystemSettingsLocaleLanguageChanged(); return translatableText; } } - private void SystemSettings_LocaleLanguageChanged(object sender, LocaleLanguageChangedEventArgs e) + private void SystemSettingsLocaleLanguageChanged(object sender, LocaleLanguageChangedEventArgs e) { if (textEditorTextSid != null) { @@ -3936,6 +3928,40 @@ namespace Tizen.NUI.BaseComponents } } + private void AddSystemSettingsLocaleLanguageChanged() + { + if (!hasSystemLanguageChanged) + { + try + { + SystemLocaleLanguageChangedManager.Add(SystemSettingsLocaleLanguageChanged); + hasSystemLanguageChanged = true; + } + catch (Exception e) + { + Console.WriteLine("{0} Exception caught.", e); + hasSystemLanguageChanged = false; + } + } + } + + private void RemoveSystemSettingsLocaleLanguageChanged() + { + if (hasSystemLanguageChanged) + { + try + { + SystemLocaleLanguageChangedManager.Remove(SystemSettingsLocaleLanguageChanged); + hasSystemLanguageChanged = false; + } + catch (Exception e) + { + Console.WriteLine("{0} Exception caught.", e); + hasSystemLanguageChanged = true; + } + } + } + private void SystemSettingsFontSizeChanged(object sender, FontSizeChangedEventArgs e) { float newFontSizeScale = TextUtils.GetFontSizeScale(e.Value); diff --git a/src/Tizen.NUI/src/public/BaseComponents/TextField.cs b/src/Tizen.NUI/src/public/BaseComponents/TextField.cs index c74415b5b..0e86dc056 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/TextField.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/TextField.cs @@ -33,7 +33,6 @@ namespace Tizen.NUI.BaseComponents { static private string defaultStyleName = "Tizen.NUI.BaseComponents.TextField"; static private string defaultFontFamily = "TizenSans"; - private static SystemLocaleLanguageChanged systemLocaleLanguageChanged = new SystemLocaleLanguageChanged(); private string textFieldTextSid = null; private string textFieldPlaceHolderTextSid = null; private string textFieldPlaceHolderTextFocusedSid = null; @@ -3821,11 +3820,7 @@ namespace Tizen.NUI.BaseComponents internalTextColor?.Dispose(); internalGrabHandleColor?.Dispose(); - if (hasSystemLanguageChanged) - { - systemLocaleLanguageChanged.Remove(SystemSettingsLocaleLanguageChanged); - } - + RemoveSystemSettingsLocaleLanguageChanged(); RemoveSystemSettingsFontTypeChanged(); RemoveSystemSettingsFontSizeChanged(); @@ -3900,19 +3895,16 @@ namespace Tizen.NUI.BaseComponents private string SetTranslatable(string textFieldSid) { string translatableText = null; - translatableText = NUIApplication.MultilingualResourceManager?.GetString(textFieldSid, new CultureInfo(SystemSettings.LocaleLanguage.Replace("_", "-"))); + translatableText = NUIApplication.MultilingualResourceManager?.GetString(textFieldSid, new CultureInfo(SystemLocaleLanguageChangedManager.LocaleLanguage.Replace("_", "-"))); if (translatableText != null) { - if (hasSystemLanguageChanged == false) - { - systemLocaleLanguageChanged.Add(SystemSettingsLocaleLanguageChanged); - hasSystemLanguageChanged = true; - } + AddSystemSettingsLocaleLanguageChanged(); return translatableText; } else { translatableText = ""; + RemoveSystemSettingsLocaleLanguageChanged(); return translatableText; } } @@ -3933,6 +3925,40 @@ namespace Tizen.NUI.BaseComponents } } + private void AddSystemSettingsLocaleLanguageChanged() + { + if (!hasSystemLanguageChanged) + { + try + { + SystemLocaleLanguageChangedManager.Add(SystemSettingsLocaleLanguageChanged); + hasSystemLanguageChanged = true; + } + catch (Exception e) + { + Console.WriteLine("{0} Exception caught.", e); + hasSystemLanguageChanged = false; + } + } + } + + private void RemoveSystemSettingsLocaleLanguageChanged() + { + if (hasSystemLanguageChanged) + { + try + { + SystemLocaleLanguageChangedManager.Remove(SystemSettingsLocaleLanguageChanged); + hasSystemLanguageChanged = false; + } + catch (Exception e) + { + Console.WriteLine("{0} Exception caught.", e); + hasSystemLanguageChanged = true; + } + } + } + private void SystemSettingsFontSizeChanged(object sender, FontSizeChangedEventArgs e) { float newFontSizeScale = TextUtils.GetFontSizeScale(e.Value); diff --git a/src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs b/src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs index 4b47a5041..f2958e55a 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs @@ -228,7 +228,6 @@ namespace Tizen.NUI.BaseComponents // Do nothing. Just call for load static values. } - private static SystemLocaleLanguageChanged systemLocaleLanguageChanged = new SystemLocaleLanguageChanged(); static private string defaultStyleName = "Tizen.NUI.BaseComponents.TextLabel"; static private string defaultFontFamily = "BreezeSans"; private string textLabelSid = null; @@ -452,19 +451,16 @@ namespace Tizen.NUI.BaseComponents } string translatableText = null; textLabelSid = value; - translatableText = NUIApplication.MultilingualResourceManager?.GetString(textLabelSid, new CultureInfo(SystemSettings.LocaleLanguage.Replace("_", "-"))); + translatableText = NUIApplication.MultilingualResourceManager?.GetString(textLabelSid, new CultureInfo(SystemLocaleLanguageChangedManager.LocaleLanguage.Replace("_", "-"))); if (translatableText != null) { Text = translatableText; - if (hasSystemLanguageChanged == false) - { - systemLocaleLanguageChanged.Add(SystemSettingsLocaleLanguageChanged); - hasSystemLanguageChanged = true; - } + AddSystemSettingsLocaleLanguageChanged(); } else { Text = ""; + RemoveSystemSettingsLocaleLanguageChanged(); } NotifyPropertyChanged(); } @@ -2772,11 +2768,7 @@ namespace Tizen.NUI.BaseComponents internalAnchorColor?.Dispose(); internalAnchorClickedColor?.Dispose(); - if (hasSystemLanguageChanged) - { - systemLocaleLanguageChanged.Remove(SystemSettingsLocaleLanguageChanged); - } - + RemoveSystemSettingsLocaleLanguageChanged(); RemoveSystemSettingsFontTypeChanged(); RemoveSystemSettingsFontSizeChanged(); @@ -2856,6 +2848,40 @@ namespace Tizen.NUI.BaseComponents Text = NUIApplication.MultilingualResourceManager?.GetString(textLabelSid, new CultureInfo(e.Value.Replace("_", "-"))); } + private void AddSystemSettingsLocaleLanguageChanged() + { + if (!hasSystemLanguageChanged) + { + try + { + SystemLocaleLanguageChangedManager.Add(SystemSettingsLocaleLanguageChanged); + hasSystemLanguageChanged = true; + } + catch (Exception e) + { + Console.WriteLine("{0} Exception caught.", e); + hasSystemLanguageChanged = false; + } + } + } + + private void RemoveSystemSettingsLocaleLanguageChanged() + { + if (hasSystemLanguageChanged) + { + try + { + SystemLocaleLanguageChangedManager.Remove(SystemSettingsLocaleLanguageChanged); + hasSystemLanguageChanged = false; + } + catch (Exception e) + { + Console.WriteLine("{0} Exception caught.", e); + hasSystemLanguageChanged = true; + } + } + } + private void SystemSettingsFontSizeChanged(object sender, FontSizeChangedEventArgs e) { float newFontSizeScale = TextUtils.GetFontSizeScale(e.Value); -- 2.34.1