[NUI] Disable external theme in TV profile and make theme data compact
authorJiyun Yang <ji.yang@samsung.com>
Mon, 3 May 2021 07:31:43 +0000 (16:31 +0900)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Fri, 21 May 2021 07:37:43 +0000 (16:37 +0900)
signed-off-by: Jiyun Yang <ji.yang@samsung.com>

src/Tizen.NUI/src/public/BaseComponents/View.cs
src/Tizen.NUI/src/public/BaseComponents/ViewBindableProperty.cs
src/Tizen.NUI/src/public/BaseComponents/ViewInternal.cs
src/Tizen.NUI/src/public/Theme/ThemeManager.cs

index aa61926..04ff8ed 100755 (executable)
@@ -39,13 +39,19 @@ namespace Tizen.NUI.BaseComponents
         private int heightPolicy = LayoutParamPolicies.WrapContent; // Layout height policy
         private float weight = 0.0f; // Weighting of child View in a Layout
         private bool backgroundImageSynchronosLoading = false;
-        private bool controlStatePropagation = false;
-        private ViewStyle viewStyle;
-        private bool themeChangeSensitive = false;
         private bool excludeLayouting = false;
         private LayoutTransition layoutTransition;
-        private ControlState controlStates = ControlState.Normal;
         private TransitionOptions transitionOptions = null;
+        private ThemeData themeData;
+
+        internal class ThemeData
+        {
+            public bool controlStatePropagation = false;
+            public ViewStyle viewStyle;
+            public bool themeChangeSensitive = false;
+            public ControlState controlStates = ControlState.Normal;
+            public ViewSelectorData selectorData;
+        }
 
         static View() { }
 
@@ -159,12 +165,13 @@ namespace Tizen.NUI.BaseComponents
         {
             get
             {
-                if (null == viewStyle)
+                if (themeData == null) themeData = new ThemeData();
+
+                if (themeData.viewStyle == null)
                 {
                     ApplyStyle(CreateViewStyle());
                 }
-
-                return viewStyle;
+                return themeData.viewStyle;
             }
         }
 
@@ -180,24 +187,25 @@ namespace Tizen.NUI.BaseComponents
         {
             get
             {
-                return controlStates;
+                return themeData == null ? ControlState.Normal : themeData.controlStates;
             }
             protected set
             {
-                if (controlStates == value)
+                if (ControlState == value)
                 {
                     return;
                 }
 
-                var prevState = controlStates;
+                var prevState = ControlState;
 
-                controlStates = value;
+                if (themeData == null) themeData = new ThemeData();
+                themeData.controlStates = value;
 
                 var changeInfo = new ControlStateChangedEventArgs(prevState, value);
 
                 ControlStateChangeEventInternal?.Invoke(this, changeInfo);
 
-                if (controlStatePropagation)
+                if (themeData.controlStatePropagation)
                 {
                     foreach (View child in Children)
                     {
@@ -2400,10 +2408,14 @@ namespace Tizen.NUI.BaseComponents
         [EditorBrowsable(EditorBrowsableState.Never)]
         public bool EnableControlStatePropagation
         {
-            get => controlStatePropagation;
+            get => themeData?.controlStatePropagation ?? false;
             set
             {
-                controlStatePropagation = value;
+                if (EnableControlStatePropagation == value) return;
+
+                if (themeData == null) themeData = new ThemeData();
+
+                themeData.controlStatePropagation = value;
 
                 foreach (View child in Children)
                 {
@@ -2522,9 +2534,11 @@ namespace Tizen.NUI.BaseComponents
         /// <since_tizen> 9 </since_tizen>
         public virtual void ApplyStyle(ViewStyle viewStyle)
         {
-            if (viewStyle == null || this.viewStyle == viewStyle) return;
+            if (viewStyle == null || themeData?.viewStyle == viewStyle) return;
+
+            if (themeData == null) themeData = new ThemeData();
 
-            this.viewStyle = viewStyle;
+            themeData.viewStyle = viewStyle;
 
             if (viewStyle.DirtyProperties == null || viewStyle.DirtyProperties.Count == 0)
             {
index 93aad5b..bae584a 100755 (executable)
@@ -82,7 +82,7 @@ namespace Tizen.NUI.BaseComponents
         {
             var view = (View)bindable;
 
-            view.selectorData?.ClearBackground(view);
+            view.themeData?.selectorData?.ClearBackground(view);
 
             if (newValue is Selector<Color> selector)
             {
@@ -118,7 +118,7 @@ namespace Tizen.NUI.BaseComponents
         {
             var view = (View)bindable;
 
-            view.selectorData?.Color?.Reset(view);
+            view.themeData?.selectorData?.Color?.Reset(view);
 
             if (newValue is Selector<Color> selector)
             {
@@ -143,10 +143,10 @@ namespace Tizen.NUI.BaseComponents
         {
             var view = (View)bindable;
 
-            if (view.selectorData != null)
+            if (view.themeData?.selectorData != null)
             {
-                view.selectorData.BackgroundColor?.Reset(view);
-                view.selectorData.BackgroundImage?.Reset(view);
+                view.themeData.selectorData.BackgroundColor?.Reset(view);
+                view.themeData.selectorData.BackgroundImage?.Reset(view);
             }
 
             if (newValue is Selector<string> selector)
@@ -175,7 +175,7 @@ namespace Tizen.NUI.BaseComponents
         {
             var view = (View)bindable;
 
-            view.selectorData?.BackgroundImageBorder?.Reset(view);
+            view.themeData?.selectorData?.BackgroundImageBorder?.Reset(view);
 
             if (newValue is Selector<Rectangle> selector)
             {
@@ -599,7 +599,7 @@ namespace Tizen.NUI.BaseComponents
         {
             var view = (View)bindable;
 
-            view.selectorData?.Opacity?.Reset(view);
+            view.themeData?.selectorData?.Opacity?.Reset(view);
 
             if (newValue is Selector<float?> selector)
             {
@@ -1499,7 +1499,7 @@ namespace Tizen.NUI.BaseComponents
         {
             var view = (View)bindable;
 
-            view.selectorData?.ClearShadow(view);
+            view.themeData?.selectorData?.ClearShadow(view);
 
             if (newValue is Selector<ImageShadow> selector)
             {
@@ -1530,7 +1530,7 @@ namespace Tizen.NUI.BaseComponents
         {
             var view = (View)bindable;
 
-            view.selectorData?.ClearShadow(view);
+            view.themeData?.selectorData?.ClearShadow(view);
 
             if (newValue is Selector<Shadow> selector)
             {
@@ -1624,11 +1624,13 @@ namespace Tizen.NUI.BaseComponents
         {
             var view = (View)bindable;
 
-            if (view.themeChangeSensitive == (bool)newValue) return;
+            if (view.ThemeChangeSensitive == (bool)newValue) return;
 
-            view.themeChangeSensitive = (bool)newValue;
+            if (view.themeData == null) view.themeData = new ThemeData();
 
-            if (view.themeChangeSensitive)
+            view.themeData.themeChangeSensitive = (bool)newValue;
+
+            if (view.themeData.themeChangeSensitive)
             {
                 ThemeManager.ThemeChangedInternal.Add(view.OnThemeChanged);
             }
@@ -1639,7 +1641,7 @@ namespace Tizen.NUI.BaseComponents
         },
         defaultValueCreator: (bindable) =>
         {
-            return ((View)bindable).themeChangeSensitive;
+            return ((View)bindable).themeData?.themeChangeSensitive ?? false;
         });
 
         /// <summary>
index 8245bcd..19fe227 100755 (executable)
@@ -28,8 +28,6 @@ namespace Tizen.NUI.BaseComponents
     /// <since_tizen> 3 </since_tizen>
     public partial class View
     {
-        private ViewSelectorData selectorData;
-
         internal string styleName;
 
         /// <summary>
@@ -1109,8 +1107,8 @@ namespace Tizen.NUI.BaseComponents
                 //Called by User
                 //Release your own managed resources here.
                 //You should release all of your own disposable objects here.
-                selectorData?.Reset(this);
-                if (themeChangeSensitive)
+                themeData?.selectorData?.Reset(this);
+                if (ThemeChangeSensitive)
                 {
                     ThemeManager.ThemeChangedInternal.Remove(OnThemeChanged);
                 }
@@ -1384,6 +1382,11 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
-        private ViewSelectorData EnsureSelectorData() => selectorData ?? (selectorData = new ViewSelectorData());
+        private ViewSelectorData EnsureSelectorData()
+        {
+            if (themeData == null) themeData = new ThemeData();
+
+            return themeData.selectorData ?? (themeData.selectorData = new ViewSelectorData());
+        }
     }
 }
index e20c05f..c720316 100755 (executable)
  *
  */
 
+#if !PROFILE_TV
+#define ExternalThemeEnabled
+#endif
+
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -215,6 +219,7 @@ namespace Tizen.NUI
         /// <param name="externalTheme">The external theme instance to be applied as base.</param>
         internal static void ApplyExternalTheme(IExternalTheme externalTheme)
         {
+#if ExternalThemeEnabled
             Debug.Assert(defaultTheme != null);
 
             if (defaultTheme.HasSameIdAndVersion(externalTheme))
@@ -249,6 +254,7 @@ namespace Tizen.NUI
 
             defaultTheme = newTheme;
             NotifyThemeChanged();
+#endif
         }
 
         internal static void AddPackageTheme(IThemeCreator themeCreator)
@@ -262,12 +268,13 @@ namespace Tizen.NUI
             var packageTheme = themeCreator.Create();
             Debug.Assert(packageTheme != null);
 
+#if ExternalThemeEnabled
             var externalTheme = ExternalThemeManager.GetCurrentTheme();
             if (externalTheme != null && !packageTheme.HasSameIdAndVersion(externalTheme))
             {
                 packageTheme.ApplyExternalTheme(externalTheme, themeCreator.GetExternalThemeKeyListSet());
             }
-
+#endif
             if (defaultTheme == null)
             {
                 defaultTheme = new Theme()