add Scalable UI menu hidden by default
authorMarcin Romaniuk <m.romaniuk@samsung.com>
Sun, 2 Apr 2023 20:37:36 +0000 (22:37 +0200)
committerMarcin Romaniuk/Tizen Services & IoT (PLT) /SRPOL/Senior Designer/Samsung Electronics <m.romaniuk@samsung.com>
Mon, 3 Apr 2023 12:29:04 +0000 (14:29 +0200)
SettingCore/Views/BaseComponent.cs
SettingMainGadget/About/AboutScalableGadget.cs [new file with mode: 0644]
SettingMainGadget/AboutGadget.cs
SettingMainGadget/MainMenuProvider.cs
SettingView/tizen-manifest.xml

index 4d54e026fbf7ad5e1daeba76e9d8221bd6310539..ae80febaa4addd555f0b48f0e1176793d0c59178 100644 (file)
@@ -1,4 +1,5 @@
 using System;
+using System.ComponentModel;
 using Tizen.NUI;
 using Tizen.NUI.BaseComponents;
 using Tizen.NUI.Components;
@@ -35,6 +36,11 @@ namespace SettingCore.Views
 
         public event EventHandler<ClickedEventArgs> Clicked;
 
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public event EventHandler<EventArgs> MultiTap;
+        private int multiTapCounter;
+        private DateTime multiTapLast = DateTime.MinValue;
+
         protected bool isClickedEventEmpty => Clicked is null;
 
         private bool touchStarted = false;
@@ -63,6 +69,31 @@ namespace SettingCore.Views
 
         private bool OnTouchEvent(object source, TouchEventArgs e)
         {
+            if (MultiTap != null)
+            {
+                var now = DateTime.Now;
+                if (now - multiTapLast > TimeSpan.FromSeconds(2))
+                {
+                    multiTapCounter = 0;
+                    Logger.Verbose("multitap zeroed");
+                }
+
+                if (e.Touch.GetState(0) == PointStateType.Down)
+                {
+                    multiTapLast = now;
+                    ++multiTapCounter;
+                    Logger.Verbose($"multitap {multiTapCounter}");
+                }
+
+                if (multiTapCounter >= 5)
+                {
+                    Logger.Verbose("multitap invoke");
+                    var handler = MultiTap;
+                    handler?.Invoke(this, EventArgs.Empty);
+                }
+                return false;
+            }
+
             if (isClickedEventEmpty)
             {
                 return false;
diff --git a/SettingMainGadget/About/AboutScalableGadget.cs b/SettingMainGadget/About/AboutScalableGadget.cs
new file mode 100644 (file)
index 0000000..414e526
--- /dev/null
@@ -0,0 +1,64 @@
+using SettingCore;
+using SettingCore.Views;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace SettingMainGadget.About
+{
+    public class AboutScalableGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => "Scalable UI for Developers";
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new ScrollableBase()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                ThemeChangeSensitive = true,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            var scalable = new (string, string)[]
+            {
+                ("Scaling Factor", $"{GraphicsTypeManager.Instance.ScalingFactor}"),
+                ("DPI", $"{GraphicsTypeManager.Instance.Dpi}"),
+                ("Scaled DPI", $"{GraphicsTypeManager.Instance.ScaledDpi}"),
+                ("Baseline DPI", $"{GraphicsTypeManager.Instance.BaselineDpi}"),
+                ("Density", $"{GraphicsTypeManager.Instance.Density}"),
+                ("Scaled Density", $"{GraphicsTypeManager.Instance.ScaledDensity}"),
+                ("100dp scaled is displayed as:", $"{GraphicsTypeManager.Instance.ConvertScriptToPixel("100dp")}px"),
+                ("100sp scaled is displayed as:", $"{GraphicsTypeManager.Instance.ConvertScriptToPixel("100sp")}px"),
+            };
+            foreach (var (title, value) in scalable)
+            {
+                var row = TextListItem.CreatePrimaryTextItemWithSecondaryText(title, value);
+                content.Add(row);
+            }
+
+            var hideButton = new Button()
+            {
+                Text = "Hide menu: Scalable UI for Developers",
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+            };
+            hideButton.TextLabel.PixelSize = 24.SpToPx();
+            hideButton.TextLabel.Margin = new Extents(0, 0, 16, 16).SpToPx();
+            hideButton.Clicked += (s, e) =>
+            {
+                GadgetManager.Instance.ChangeMenuPathOrder(MainMenuProvider.About_ScalableUI, -30);
+                NavigateBack();
+            };
+            content.Add(hideButton);
+
+            return content;
+        }
+    }
+}
index 7dde133cebe657e4eb9a88e1545fa7b505c1eb6d..5ebfd6fadbe3533a07ef019aeb0fb889dce19c54 100644 (file)
@@ -10,6 +10,7 @@ using Tizen.NUI;
 using Tizen.NUI.BaseComponents;
 using Tizen.NUI.Components;
 using Tizen.System;
+using System;
 
 namespace Setting.Menu
 {
@@ -89,6 +90,13 @@ namespace Setting.Menu
             };
             sections.Add(MainMenuProvider.About_OpenSourceLicenses, openSourceLicenses);
 
+            var scalableUI = TextListItem.CreatePrimaryTextItem("Scalable UI for Developers");
+            scalableUI.Clicked += (s, e) =>
+            {
+                NavigateTo(MainMenuProvider.About_ScalableUI);
+            };
+            sections.Add(MainMenuProvider.About_ScalableUI, scalableUI);
+
             var deviceInfo = new TextHeaderListItem(Resources.IDS_ST_BODY_DEVICE_INFO);
             sections.Add(MainMenuProvider.About_DeviceInfo, deviceInfo);
 
@@ -110,6 +118,13 @@ namespace Setting.Menu
 
             result = Tizen.System.Information.TryGetValue<string>("http://tizen.org/feature/platform.version", out string platformVersionText);
             var platformVersion = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_MBODY_TIZEN_VERSION, result ? platformVersionText : Resources.IDS_ST_HEADER_UNAVAILABLE);
+            platformVersion.MultiTap += (s, e) =>
+            {
+                GadgetManager.Instance.ChangeMenuPathOrder(MainMenuProvider.About_ScalableUI, 30);
+
+                var toast = Notification.MakeToast("Scalable UI for Developers menu enabled", Notification.ToastCenter);
+                toast.Post(1000);
+            };
             sections.Add(MainMenuProvider.About_TizenVersion, platformVersion);
 
             result = Tizen.System.Information.TryGetValue<string>("http://tizen.org/system/platform.processor", out string platformProcessorText);
index 2396e164b10d6ce63646ef5af5c2c81da93aa6e7..7d08f500d151155b86b68ee962614c555f5dd64a 100644 (file)
@@ -32,6 +32,7 @@ namespace SettingMainGadget
         public static string About = "About";
         public static string About_ManageCertificates = "About.ManageCertificates";
         public static string About_OpenSourceLicenses = "About.OpenSourceLicenses";
+        public static string About_ScalableUI = "About.ScalableUI";
         public static string About_DeviceInfo = "About.DeviceInfo";
         public static string About_RenameDevice = "About.RenameDevice";
         public static string About_ModelNumber = "About.ModelNumber";
@@ -87,20 +88,21 @@ namespace SettingMainGadget
                 new SettingMenu(path: Language_TTS, defaultOrder: 68),
                 new SettingMenu(path: Language_STT, defaultOrder: 69),
                 new SettingMenu(path: About, defaultOrder: 70, type: typeof(Setting.Menu.AboutGadget)),
-                new SettingMenu(path: About_ManageCertificates, defaultOrder: 71),
-                new SettingMenu(path: About_OpenSourceLicenses, defaultOrder: 72, type: typeof(Setting.Menu.AboutLegalInfoGadget)),
-                new SettingMenu(path: About_DeviceInfo, defaultOrder: 73),
-                new SettingMenu(path: About_RenameDevice, defaultOrder: 74),
-                new SettingMenu(path: About_ModelNumber, defaultOrder: 75),
-                new SettingMenu(path: About_TizenVersion, defaultOrder: 76),
-                new SettingMenu(path: About_Cpu, defaultOrder: 77),
-                new SettingMenu(path: About_Ram, defaultOrder: 78),
-                new SettingMenu(path: About_Resolution, defaultOrder: 79),
-                new SettingMenu(path: About_DeviceStatus, defaultOrder: 80, type: typeof(Setting.Menu.AboutDeviceStatusGadget)),
-                new SettingMenu(path: About_DeviceStatus_bt_address, defaultOrder: 81),
-                new SettingMenu(path: About_DeviceStatus_wifi_mac_address, defaultOrder: 82),
-                new SettingMenu(path: About_DeviceStatus_storage, defaultOrder: 83),
-                new SettingMenu(path: About_DeviceStatus_cpu_usage, defaultOrder: 84),
+                new SettingMenu(path: About_ManageCertificates, defaultOrder: 10),
+                new SettingMenu(path: About_OpenSourceLicenses, defaultOrder: 20, type: typeof(Setting.Menu.AboutLegalInfoGadget)),
+                new SettingMenu(path: About_ScalableUI, defaultOrder: -30, type: typeof(SettingMainGadget.About.AboutScalableGadget)),
+                new SettingMenu(path: About_DeviceInfo, defaultOrder: 40),
+                new SettingMenu(path: About_RenameDevice, defaultOrder: 50),
+                new SettingMenu(path: About_ModelNumber, defaultOrder: 60),
+                new SettingMenu(path: About_TizenVersion, defaultOrder: 70),
+                new SettingMenu(path: About_Cpu, defaultOrder: 80),
+                new SettingMenu(path: About_Ram, defaultOrder: 90),
+                new SettingMenu(path: About_Resolution, defaultOrder: 100),
+                new SettingMenu(path: About_DeviceStatus, defaultOrder: 110, type: typeof(Setting.Menu.AboutDeviceStatusGadget)),
+                new SettingMenu(path: About_DeviceStatus_bt_address, defaultOrder: 10),
+                new SettingMenu(path: About_DeviceStatus_wifi_mac_address, defaultOrder: 20),
+                new SettingMenu(path: About_DeviceStatus_storage, defaultOrder: 30),
+                new SettingMenu(path: About_DeviceStatus_cpu_usage, defaultOrder: 40),
             };
         }
     }
index 504d54204900c2c48fc8aac9ebf2049ee0b02dd6..e10766176c237f9953636f0e1814f6562e7d2958 100644 (file)
@@ -37,6 +37,8 @@
         <privilege>http://tizen.org/privilege/network.profile</privilege>
 
         <privilege>http://tizen.org/privilege/volume.set</privilege>
+
+        <privilege>http://tizen.org/privilege/window.priority.set</privilege>
     </privileges>
     <dependencies />
     <provides-appdefined-privileges />