Modifies Home MainPage
authorHyerim Kim <rimi.kim@samsung.com>
Mon, 17 Apr 2017 13:10:06 +0000 (22:10 +0900)
committerChulSeung Kim <charles0.kim@samsung.com>
Thu, 8 Jun 2017 09:34:53 +0000 (18:34 +0900)
 - Implements focus chaining among main panel and sub panel.
 - Fixed bug that when home is launched first time, Apps Subpanel can't be selected.

Change-Id: Ia5e20cb38b8b79f6f68101626a09febe1f7adb1c
Signed-off-by: Hyerim Kim <rimi.kim@samsung.com>
LibTVRefCommonPortable/LibTVRefCommonPortable.csproj
LibTVRefCommonPortable/packages.config [changed mode: 0644->0755]
TVHome/TVHome/TVHome.csproj
TVHome/TVHome/Views/MainPage.xaml.cs
TVHome/TVHome/Views/MainPanel.xaml.cs
TVHome/TVHome/Views/SubPanel.xaml.cs
TVHome/TVHome/Views/SubThumbnailPanel.xaml.cs
TVHome/TVHome/packages.config

index ce6975d..e919f16 100755 (executable)
       <Private>True</Private>
     </Reference>
     <Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\Xamarin.Forms.2.3.4.214-pre5\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
+      <HintPath>..\packages\Xamarin.Forms.2.3.4-r214-004\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\Xamarin.Forms.2.3.4.214-pre5\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
+      <HintPath>..\packages\Xamarin.Forms.2.3.4-r214-004\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\Xamarin.Forms.2.3.4.214-pre5\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
+      <HintPath>..\packages\Xamarin.Forms.2.3.4-r214-004\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
       <Private>True</Private>
     </Reference>
   </ItemGroup>
     <None Include="packages.config" />
   </ItemGroup>
   <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <Import Project="..\packages\Xamarin.Forms.2.3.4.214-pre5\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.2.3.4.214-pre5\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
+  <Import Project="..\packages\Xamarin.Forms.2.3.4-r214-004\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.2.3.4-r214-004\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
     <PropertyGroup>
       <ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
     </PropertyGroup>
-    <Error Condition="!Exists('..\packages\Xamarin.Forms.2.3.4.214-pre5\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.2.3.4.214-pre5\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
+    <Error Condition="!Exists('..\packages\Xamarin.Forms.2.3.4-r214-004\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.2.3.4-r214-004\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
   </Target>
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
old mode 100644 (file)
new mode 100755 (executable)
index a5712a9..61a4055
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="Xamarin.Forms" version="2.3.4.214-pre5" targetFramework="portable45-net45+win8+wp8+wpa81" />
+  <package id="Xamarin.Forms" version="2.3.4-r214-004" targetFramework="portable45-net45+win8+wp8+wpa81" />
 </packages>
\ No newline at end of file
index 24b7380..8ca6a23 100755 (executable)
       <Private>True</Private>
     </Reference>
     <Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Xamarin.Forms.2.3.4.214-pre5\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
+      <HintPath>..\..\packages\Xamarin.Forms.2.3.4-r214-004\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Xamarin.Forms.2.3.4.214-pre5\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
+      <HintPath>..\..\packages\Xamarin.Forms.2.3.4-r214-004\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Xamarin.Forms.2.3.4.214-pre5\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
+      <HintPath>..\..\packages\Xamarin.Forms.2.3.4-r214-004\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
       <Private>True</Private>
     </Reference>
   </ItemGroup>
     </EmbeddedResource>
   </ItemGroup>
   <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <Import Project="..\..\packages\Xamarin.Forms.2.3.4.214-pre5\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.4.214-pre5\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
+  <Import Project="..\..\packages\Xamarin.Forms.2.3.4-r214-004\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.4-r214-004\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
     <PropertyGroup>
       <ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
     </PropertyGroup>
-    <Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.4.214-pre5\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.4.214-pre5\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
+    <Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.4-r214-004\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.4-r214-004\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
   </Target>
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
                Other similar extension points exist, see Microsoft.Common.targets.
index abe0b8a..84622da 100755 (executable)
  */
 
 using System.Collections.Generic;
-using LibTVRefCommonPortable.DataModels;
 using LibTVRefCommonPortable.Utils;
 using Xamarin.Forms;
 using TVHome.ViewModels;
+using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
 
 namespace TVHome.Views
 {
+    using Tizen = Xamarin.Forms.PlatformConfiguration.Tizen;
     /// <summary>
     /// A custom view for displaying main page of TV Home
     /// </summary>
@@ -150,13 +151,70 @@ namespace TVHome.Views
 
             MessagingCenter.Subscribe<App, TVHomeStatus>(this, App.AppStatus, (sender, arg) =>
             {
-                if (arg == TVHomeStatus.OnSleep)
+                switch (arg)
                 {
-                    PageMainPanel.InitialFocusing();
+                    case TVHomeStatus.OnResume:
+                        InitializeRecentSubPanelButtonFocusChain();
+                        break;
+                    case TVHomeStatus.OnSleep:
+                        PageMainPanel.InitialFocusing();
+                        break;
                 }
             });
         }
 
+        protected override void OnAppearing()
+        {
+            base.OnAppearing();
+
+            InitializeMainPanelButtonFocusChain();
+            InitializeSubPanelButtonFocusChain();
+            PageMainPanel.InitialFocusing();
+        }
+
+        private void InitializeMainPanelButtonFocusChain()
+        {
+            Button recentMainPanelButton = PageMainPanel.GetButtonToFocusing(0);
+            Button appsMainPanelButton = PageMainPanel.GetButtonToFocusing(1);
+            Button settingMainPanelButton = PageMainPanel.GetButtonToFocusing(2);
+
+            recentMainPanelButton.On<Tizen>().SetNextFocusRightView(appsMainPanelButton);
+            appsMainPanelButton.On<Tizen>().SetNextFocusLeftView(recentMainPanelButton);
+            appsMainPanelButton.On<Tizen>().SetNextFocusRightView(settingMainPanelButton);
+            settingMainPanelButton.On<Tizen>().SetNextFocusLeftView(appsMainPanelButton);
+        }
+
+        private void InitializeRecentSubPanelButtonFocusChain()
+        {
+            List<View> recentSubPanelButtons = new List<View>(RecentSubPanel.GetSubPanelButtons());
+            Button recentMainPanelButton = PageMainPanel.GetButtonToFocusing(0);
+
+            foreach (var item in recentSubPanelButtons)
+            {
+                item.FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusUpView(recentMainPanelButton);
+            }
+        }
+
+        private void InitializeSubPanelButtonFocusChain()
+        {
+            List<View> appsSubPanelButtons = new List<View>(AppsSubPanel.GetSubPanelButtons());
+            List<View> settingSubPanelButtons = new List<View>(SettingsSubPanel.GetSubPanelButtons());
+
+
+            Button appsMainPanelButton = PageMainPanel.GetButtonToFocusing(1);
+            Button settingMainPanelButton = PageMainPanel.GetButtonToFocusing(2);
+
+            foreach (var item in appsSubPanelButtons)
+            {
+                item.FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusUpView(appsMainPanelButton);
+            }
+
+            foreach (var item in settingSubPanelButtons)
+            {
+                item.FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusUpView(settingMainPanelButton);
+            }
+        }
+
         /// <summary>
         /// This method is called when the properties of MainPage is changed
         /// </summary>
index fc02f4d..2586234 100755 (executable)
@@ -91,6 +91,12 @@ namespace TVHome.Views
             button.FindByName<Button>("ButtonFocusArea").Focus();
         }
 
+        public Button GetButtonToFocusing(int index)
+        {
+            var button = PanelButtonGrid.Children[index];
+            return button.FindByName<Button>("ButtonFocusArea");
+        }
+
         /// <summary>
         /// A method for translating when panel is focused
         /// </summary>
index fa810a9..44b92cd 100755 (executable)
@@ -50,6 +50,11 @@ namespace TVHome.Views
         /// </summary>
         private int selectTransitionHeight = SizeUtils.GetHeightSize(146);
 
+        public IList<View> GetSubPanelButtons()
+        {
+            return PanelButtonStack.Children;
+        }
+
         /// <summary>
         /// Constructor
         /// </summary>
index 3e8beb1..5154a4c 100755 (executable)
@@ -144,6 +144,11 @@ namespace TVHome.Views
             }
         }
 
+        public IList<View> GetSubPanelButtons()
+        {
+            return PanelButtonStack.Children;
+        }
+
         /// <summary>
         /// A method for hiding the panel
         /// </summary>
index ce50c6f..46400b0 100755 (executable)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<packages>\r
-  <package id="Tizen.Xamarin.Forms.Extension" version="2.3.4-r214-001" targetFramework="portable45-net45+win8+wp8+wpa81" />\r
-  <package id="Xamarin.Forms" version="2.3.4.214-pre5" targetFramework="portable45-net45+win8+wp8+wpa81" />\r
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Tizen.Xamarin.Forms.Extension" version="2.3.4-r214-001" targetFramework="portable45-net45+win8+wp8+wpa81" />
+  <package id="Xamarin.Forms" version="2.3.4-r214-004" targetFramework="portable45-net45+win8+wp8+wpa81" />
 </packages>
\ No newline at end of file