SoftKeys handling added. 12/244712/4
authorLukasz Stanislawski <lukasz.stanislawski@gmail.com>
Wed, 23 Sep 2020 10:51:05 +0000 (12:51 +0200)
committerLukasz Stanislawski <lukasz.stanislawski@gmail.com>
Wed, 7 Oct 2020 19:08:19 +0000 (21:08 +0200)
Add SoftKeyClientService class to handle softkeys showing and hiding
feature.

Change-Id: I0206e94f6ca6602b6726c44addc6f1fc03cd3ef1

Oobe/Oobe.Common/Oobe.Common.csproj
Oobe/Oobe.Common/Services/SoftKeyClientService.cs [new file with mode: 0644]
Oobe/Oobe.Language/Oobe.Language.csproj
Oobe/Oobe.Region/Oobe.Region.csproj
Oobe/Oobe.Terms/Oobe.Terms.csproj
Oobe/Oobe.Welcome/Oobe.Welcome.csproj
Oobe/Oobe.Wifi/Oobe.Wifi.csproj
Oobe/Oobe/Oobe.csproj
Oobe/Oobe/OobeApp.cs
Oobe/Oobe/tizen-manifest.xml

index 1f7c41a842cd59cdb695cfef8a29be68dc2a14ad..b2906ca048552cb7626c9138cdff93739afca163 100644 (file)
@@ -8,7 +8,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Tizen.NET" Version="8.0.0.15475">
+    <PackageReference Include="Tizen.NET" Version="8.0.0.15586">
       <ExcludeAssets>Runtime</ExcludeAssets>
     </PackageReference>
     <PackageReference Include="Tizen.NET.Sdk" Version="1.1.2" />
diff --git a/Oobe/Oobe.Common/Services/SoftKeyClientService.cs b/Oobe/Oobe.Common/Services/SoftKeyClientService.cs
new file mode 100644 (file)
index 0000000..3de7f2d
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2020 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.Threading.Tasks;
+using Tizen.NUI;
+using Tizen.NUI.WindowSystem.Shell;
+
+namespace Oobe.Common.Services
+{
+    /// <summary>
+    /// SoftKeys managing service.
+    /// </summary>
+    public sealed class SoftKeyClientService
+    {
+        private const int MaxInitializeAttempts = 10;
+        private const int IntitializeAttemptInterval = 3000;
+
+        private static SoftKeyClientService instance;
+
+        private TizenShell shell;
+        private SoftkeyClient client;
+        private TaskCompletionSource<bool> initialized;
+
+        private SoftKeyClientService()
+        {
+            initialized = new TaskCompletionSource<bool>();
+            ScheduleInitialize();
+        }
+
+        /// <summary>
+        /// Returns a service
+        /// </summary>
+        public static SoftKeyClientService Instance
+        {
+            get
+            {
+                if (instance == null)
+                {
+                    instance = new SoftKeyClientService();
+                }
+
+                return instance;
+            }
+        }
+
+        /// <summary>
+        /// Shows soft keys system-wide
+        /// </summary>
+        public async Task Show()
+        {
+            Tizen.Log.Warn("oobe", $"Show");
+            bool initDone = await initialized.Task;
+            if (initDone)
+            {
+                Tizen.Log.Warn("oobe", $"client.Show()");
+                client.Opacity = SoftkeyOpacityState.Opaque;
+                client.Show();
+            }
+        }
+
+        /// <summary>
+        /// Hides soft keys system-wide
+        /// </summary>
+        public async Task Hide()
+        {
+            Tizen.Log.Warn("oobe", $"Hide");
+            bool initDone = await initialized.Task;
+            if (initDone)
+            {
+                Tizen.Log.Warn("oobe", $"client.Hide()");
+                client.Opacity = SoftkeyOpacityState.Transparent;
+                client.Hide();
+            }
+        }
+
+        private void Initialize()
+        {
+            shell = new TizenShell();
+            client = new SoftkeyClient(shell, Window.Instance);
+            initialized.SetResult(true);
+        }
+
+        private void ScheduleInitialize()
+        {
+            int attempt = 0;
+            Tizen.Log.Warn("oobe", $"ScheduleInitialize");
+
+            Timer timer = new Timer(IntitializeAttemptInterval);
+            timer.Tick += (sender, args) =>
+            {
+                attempt++;
+
+                if (attempt > MaxInitializeAttempts)
+                {
+                    Tizen.Log.Error("oobe", $"Max initialize attempts reached");
+                    initialized.SetResult(false);
+                    return false;
+                }
+
+                try
+                {
+                    Tizen.Log.Warn("oobe", $"Attempt to intialize: {attempt}");
+                    Initialize();
+                }
+                catch (Exception e)
+                {
+                    Tizen.Log.Warn("oobe", $"SoftKeyClientService.Initialize failed {e.Message}");
+                    return true;
+                }
+
+                return false;
+            };
+            timer.Start();
+        }
+    }
+}
index bf412c8a9c93f7d911621c0f10fd961417b2c11c..e253c8dbf1e96a2ed1f72fc0491ac9deb98a4ceb 100644 (file)
@@ -8,7 +8,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Tizen.NET" Version="8.0.0.15475">
+    <PackageReference Include="Tizen.NET" Version="8.0.0.15586">
       <ExcludeAssets>Runtime</ExcludeAssets>
     </PackageReference>
     <PackageReference Include="Tizen.NET.Sdk" Version="1.1.2" />
index 877bfe3f5efa466dc397e11f6315b45d8956aa07..a82a8a5c9d57d7a61fa780cd8b746a931fdabef7 100644 (file)
@@ -8,7 +8,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Tizen.NET" Version="8.0.0.15475">
+    <PackageReference Include="Tizen.NET" Version="8.0.0.15586">
       <ExcludeAssets>Runtime</ExcludeAssets>
     </PackageReference>
     <PackageReference Include="Tizen.NET.Sdk" Version="1.1.2" />
index 0b8e588d0d6322eb217b3af8a6a75a3392228e0a..1ec1f540bbddfc756c3e30fcaac19e1108ca7663 100644 (file)
@@ -8,7 +8,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Tizen.NET" Version="8.0.0.15475">
+    <PackageReference Include="Tizen.NET" Version="8.0.0.15586">
       <ExcludeAssets>Runtime</ExcludeAssets>
     </PackageReference>
     <PackageReference Include="Tizen.NET.Sdk" Version="1.1.2" />
index 9be44cba35802d84c2aa3e14fc076aa5bb5f2f92..bd296a9919341aac0a690c191c5a33cdf7da367c 100644 (file)
@@ -8,7 +8,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Tizen.NET" Version="8.0.0.15475">
+    <PackageReference Include="Tizen.NET" Version="8.0.0.15586">
       <ExcludeAssets>Runtime</ExcludeAssets>
     </PackageReference>
     <PackageReference Include="Tizen.NET.Sdk" Version="1.1.2" />
index 7e9ff3393f7c5f703d92f97d90944cace993edb7..d0c422145ecd4a6efd6732b7d56429ce2c9e67d0 100644 (file)
@@ -9,7 +9,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Tizen.NET" Version="8.0.0.15475" />
+    <PackageReference Include="Tizen.NET" Version="8.0.0.15586" />
     <PackageReference Include="Tizen.NET.Sdk" Version="1.1.2" />
     <PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
index 9c27292b4f50f702b70ef0984c3a184a675a4b55..b3dca47342d186c849af281b1bb9d466ae476391 100644 (file)
@@ -23,7 +23,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Tizen.NET" Version="8.0.0.15475">
+    <PackageReference Include="Tizen.NET" Version="8.0.0.15586">
       <ExcludeAssets>Runtime</ExcludeAssets>
     </PackageReference>
     <PackageReference Include="Tizen.NET.Sdk" Version="1.1.2" />
index c16bfff36f89df6e2a0188d7448976118b5f7c10..9b52dde07210b61c221b3e166e08d613fee8d9fd 100644 (file)
@@ -17,6 +17,7 @@
 using System;
 using System.Globalization;
 using Oobe.Common.Resources;
+using Oobe.Common.Services;
 using Oobe.Managers;
 using Tizen.NUI;
 using Tizen.NUI.Components;
@@ -40,6 +41,13 @@ namespace Oobe
             Window.Instance.Hide();
         }
 
+        protected override void OnTerminate()
+        {
+            Tizen.Log.Debug("oobe", "OnTerminate");
+            SoftKeyClientService.Instance.Show();
+            base.OnTerminate();
+        }
+
         protected override void OnAppControlReceived(Tizen.Applications.AppControlReceivedEventArgs e)
         {
             Tizen.Log.Debug("oobe", "OnAppControlReceived: " + e.ReceivedAppControl.Operation);
@@ -77,6 +85,7 @@ namespace Oobe
 
             Window.Instance.Show();
             Initialize();
+            SoftKeyClientService.Instance.Hide();
         }
 
         private void Reset()
index a8d2f824e8bea1a0f4050e3f08c327ad6b10c02d..dbed3b2d796a00babc6af42c020e598f66816508 100644 (file)
@@ -17,6 +17,7 @@
     <privilege>http://tizen.org/privilege/network.set</privilege>
     <privilege>http://tizen.org/privilege/network.profile</privilege>
     <privilege>http://tizen.org/privilege/window.priority.set</privilege>
+    <privilege>http://tizen.org/privilege/windowsystem.admin</privilege>
   </privileges>
   <dependencies />
   <provides-appdefined-privileges />