1. Add setting list in Setting SubPanel
authorHyerim Kim <rimi.kim@samsung.com>
Wed, 5 Apr 2017 13:35:42 +0000 (22:35 +0900)
committerChulSeung Kim <charles0.kim@samsung.com>
Thu, 8 Jun 2017 09:34:52 +0000 (18:34 +0900)
2. Add Context popup in Recent SubPanel
3. Implement Remove/Clear all

Change-Id: I896860dc9f27d49fd7c3ae673378da67d27ef2bd
Signed-off-by: Hyerim Kim <rimi.kim@samsung.com>
32 files changed:
LibTVRefCommonPortable/DataModels/BTLaunchAction.cs [deleted file]
LibTVRefCommonPortable/DataModels/BTOffAction.cs [deleted file]
LibTVRefCommonPortable/DataModels/BTOnAction.cs [deleted file]
LibTVRefCommonPortable/DataModels/BTSettingShortcutInfo.cs [deleted file]
LibTVRefCommonPortable/DataModels/RecentShortcutInfo.cs [changed mode: 0644->0755]
LibTVRefCommonPortable/DataModels/SettingShortcutInfo.cs [moved from LibTVRefCommonPortable/DataModels/WiFiOnAction.cs with 68% similarity, mode: 0755]
LibTVRefCommonPortable/DataModels/WiFiLaunchAction.cs [deleted file]
LibTVRefCommonPortable/DataModels/WiFiOffAction.cs [deleted file]
LibTVRefCommonPortable/DataModels/WiFiSettingShortcutInfo.cs [deleted file]
LibTVRefCommonPortable/LibTVRefCommonPortable.csproj [changed mode: 0644->0755]
LibTVRefCommonPortable/Models/RecentShortcutController.cs [changed mode: 0644->0755]
LibTVRefCommonPortable/Models/SettingShortcutController.cs [deleted file]
LibTVRefCommonPortable/Models/SettingShortcutFactory.cs [deleted file]
LibTVRefCommonPortable/Utils/IApplicationManagerAPIs.cs [changed mode: 0644->0755]
LibTVRefCommonPortable/Utils/IBTAPIs.cs [deleted file]
LibTVRefCommonPortable/Utils/ITVHome.cs [changed mode: 0644->0755]
LibTVRefCommonPortable/Utils/IWifiAPIs.cs [deleted file]
LibTVRefCommonPortable/Utils/RecentShortcutStorage.cs [changed mode: 0644->0755]
LibTVRefCommonPortable/Utils/TVHomeImpl.cs [changed mode: 0644->0755]
LibTVRefCommonTizen/LibTVRefCommonTizen.csproj [changed mode: 0644->0755]
LibTVRefCommonTizen/Ports/ApplicationManagerPort.cs [changed mode: 0644->0755]
LibTVRefCommonTizen/Ports/BTModulePort.cs [deleted file]
LibTVRefCommonTizen/Ports/WifiModulePort.cs [deleted file]
TVApps/TVApps.TizenTV/TVApps.TizenTV.cs [changed mode: 0644->0755]
TVHome/TVHome.TizenTV/TVHome.TizenTV.cs
TVHome/TVHome/Controls/PanelButton.cs
TVHome/TVHome/Controls/SubPanelThumbnailButton.xaml [changed mode: 0644->0755]
TVHome/TVHome/Controls/SubPanelThumbnailButton.xaml.cs
TVHome/TVHome/ViewModels/MainPageViewModel.cs
TVHome/TVHome/Views/MainPage.xaml
TVHome/TVHome/Views/Panel.cs
TVHome/TVHome/Views/SubThumbnailPanel.xaml.cs

diff --git a/LibTVRefCommonPortable/DataModels/BTLaunchAction.cs b/LibTVRefCommonPortable/DataModels/BTLaunchAction.cs
deleted file mode 100644 (file)
index 6a1e834..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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 LibTVRefCommonPortable.Utils;
-using Xamarin.Forms;
-
-namespace LibTVRefCommonPortable.DataModels
-{
-    /// <summary>
-    /// A Bluetooth Shortcut
-    /// </summary>
-    class BTLaunchAction : IAction
-    {
-        /// <summary>
-        /// A method execute a action.
-        /// In this method Bluetooth settings app will be launched.
-        /// </summary>
-        /// <returns>A next statue of a Shortcut.</returns>
-        public string Execute()
-        {
-            IBTAPIs ibtapis;
-
-            ibtapis = DependencyService.Get<IBTAPIs>();
-            ibtapis?.LaunchBTSetting();
-
-            return "launch";
-        }
-    }
-}
diff --git a/LibTVRefCommonPortable/DataModels/BTOffAction.cs b/LibTVRefCommonPortable/DataModels/BTOffAction.cs
deleted file mode 100644 (file)
index 58c95f5..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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.
- */
-
-
-namespace LibTVRefCommonPortable.DataModels
-{
-    /// <summary>
-    /// A Bluetooth Off Action
-    /// </summary>
-    class BTOffAction : IAction
-    {
-        /// <summary>
-        /// A method turns off Bluetooth.
-        /// </summary>
-        /// <returns>A next statue of a Shortcut.</returns>
-        public string Execute()
-        {
-            // Turn BT Off
-            return "off";
-        }
-    }
-}
diff --git a/LibTVRefCommonPortable/DataModels/BTOnAction.cs b/LibTVRefCommonPortable/DataModels/BTOnAction.cs
deleted file mode 100644 (file)
index d355fca..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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.
- */
-
-namespace LibTVRefCommonPortable.DataModels
-{
-    /// <summary>
-    /// A Bluetooth On Action
-    /// </summary>
-    class BTOnAction : IAction
-    {
-        /// <summary>
-        /// A method turns on Bluetooth.
-        /// </summary>
-        /// <returns>A next statue of a Shortcut.</returns>
-        public string Execute()
-        {
-            // Turn BT On
-            return "on";
-        }
-    }
-}
diff --git a/LibTVRefCommonPortable/DataModels/BTSettingShortcutInfo.cs b/LibTVRefCommonPortable/DataModels/BTSettingShortcutInfo.cs
deleted file mode 100644 (file)
index 35e8939..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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.
- */
-
-
-namespace LibTVRefCommonPortable.DataModels
-{
-    /// <summary>
-    /// BT Setting shortcut information
-    /// <seealso cref="ShortcutInfo"/>
-    /// </summary>
-    public class BTSettingShortcutInfo : ShortcutInfo
-    {
-        /// <summary>
-        /// Update State of a shortcut.
-        /// </summary>
-        public override void UpdateState()
-        {
-            // 1. Check Current BT Status.
-
-            // 2. Set Description
-            SetCurrentState("off");
-        }
-    }
-}
old mode 100644 (file)
new mode 100755 (executable)
index 6623cfd..255d3f5
@@ -24,6 +24,10 @@ namespace LibTVRefCommonPortable.DataModels
     public class RecentShortcutInfo : ShortcutInfo
     {
         /// <summary>
+        /// A application ID
+        /// </summary>
+        public string AppID { get; set; }
+        /// <summary>
         /// A Last used Time
         /// </summary>
         public DateTime Date { get; set; }
old mode 100644 (file)
new mode 100755 (executable)
similarity index 68%
rename from LibTVRefCommonPortable/DataModels/WiFiOnAction.cs
rename to LibTVRefCommonPortable/DataModels/SettingShortcutInfo.cs
index 4c847d5..4cdd35d
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright (c) 2017 Samsung Electronics Co., Ltd
  *
  * Licensed under the Flora License, Version 1.1 (the "License");
  * limitations under the License.
  */
 
+using System;
 
 namespace LibTVRefCommonPortable.DataModels
 {
-    /// <summary>
-    /// A WiFi On Action
-    /// </summary>
-    class WiFiOnAction : IAction
+    public class SettingShortcutInfo : ShortcutInfo
     {
-        /// <summary>
-        /// A method turns off the WiFi. </summary>
-        /// <returns>A next statue of a Shortcut.</returns>
-        public string Execute()
+        public override void UpdateState()
         {
-            // Turn WiFi On
-            return "on";
+            SetCurrentState("default");
         }
     }
 }
diff --git a/LibTVRefCommonPortable/DataModels/WiFiLaunchAction.cs b/LibTVRefCommonPortable/DataModels/WiFiLaunchAction.cs
deleted file mode 100644 (file)
index 89b6c50..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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 LibTVRefCommonPortable.Utils;
-using Xamarin.Forms;
-
-namespace LibTVRefCommonPortable.DataModels
-{
-    /// <summary>
-    /// A Action to shows a WiFi settings
-    /// </summary>
-    class WiFiLaunchAction : IAction
-    {
-        /// <summary>
-        /// A method execute a action.
-        /// This method will launch the WiFi settings app.
-        /// </summary>
-        /// <returns>A next statue of a Shortcut.</returns>
-        public string Execute()
-        {
-            // Launch WiFi Setting
-            IWifiAPIs iwifiapis;
-
-            iwifiapis = DependencyService.Get<IWifiAPIs>();
-            iwifiapis?.LaunchWifiSetting();
-
-            return "launch";
-        }
-    }
-}
diff --git a/LibTVRefCommonPortable/DataModels/WiFiOffAction.cs b/LibTVRefCommonPortable/DataModels/WiFiOffAction.cs
deleted file mode 100644 (file)
index 7594093..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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.
- */
-
-
-namespace LibTVRefCommonPortable.DataModels
-{
-    /// <summary>
-    /// A WiFi Off Action
-    /// </summary>
-    class WiFiOffAction : IAction
-    {
-        /// <summary>
-        /// A method turns off the WiFi. </summary>
-        /// <returns>A next statue of a Shortcut.</returns>
-        public string Execute()
-        {
-            // Turn WiFi Off
-            return "off";
-        }
-    }
-}
diff --git a/LibTVRefCommonPortable/DataModels/WiFiSettingShortcutInfo.cs b/LibTVRefCommonPortable/DataModels/WiFiSettingShortcutInfo.cs
deleted file mode 100644 (file)
index 2cd402d..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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;
-
-namespace LibTVRefCommonPortable.DataModels
-{
-    /// <summary>
-    /// A class represents the WiFi setting Shortcut.
-    /// </summary>
-    public class WiFiSettingShortcutInfo : ShortcutInfo
-    {
-        /// <summary>
-        /// A method initializes the status of a Shortcut.
-        /// </summary>
-        public override void UpdateState()
-        {
-            // 1. Check Current WiFi Status.
-
-            // 2. Set Description
-            SetCurrentState("off");
-        }
-    }
-}
old mode 100644 (file)
new mode 100755 (executable)
index 7df8835..1b1f96c
   <ItemGroup>
     <Compile Include="DataModels\AppControlAction.cs" />
     <Compile Include="DataModels\AppShortcutInfo.cs" />
-    <Compile Include="DataModels\BTLaunchAction.cs" />
-    <Compile Include="DataModels\BTOffAction.cs" />
-    <Compile Include="DataModels\BTOnAction.cs" />
-    <Compile Include="DataModels\BTSettingShortcutInfo.cs" />
     <Compile Include="DataModels\CommandAction.cs" />
     <Compile Include="DataModels\FileSystemEventCustomArgs.cs" />
     <Compile Include="DataModels\HomeMenuAppShortcutInfo.cs" />
     <Compile Include="DataModels\IAction.cs" />
     <Compile Include="DataModels\MediaControlAction.cs" />
     <Compile Include="DataModels\RecentShortcutInfo.cs" />
+    <Compile Include="DataModels\SettingShortcutInfo.cs" />
     <Compile Include="DataModels\ShortcutInfo.cs" />
     <Compile Include="DataModels\StateDescription.cs" />
     <Compile Include="DataModels\WatcherType.cs" />
-    <Compile Include="DataModels\WiFiLaunchAction.cs" />
-    <Compile Include="DataModels\WiFiOffAction.cs" />
-    <Compile Include="DataModels\WiFiOnAction.cs" />
-    <Compile Include="DataModels\WiFiSettingShortcutInfo.cs" />
     <Compile Include="Models\AppShortcutController.cs" />
     <Compile Include="Models\RecentShortcutController.cs" />
-    <Compile Include="Models\SettingShortcutController.cs" />
-    <Compile Include="Models\SettingShortcutFactory.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Utils\AppControlUtils.cs" />
     <Compile Include="Utils\AppShortcutStorage.cs" />
     <Compile Include="Utils\IAppLifeControl.cs" />
     <Compile Include="Utils\IWindowAPIs.cs" />
     <Compile Include="Utils\IPlatformNotification.cs" />
-    <Compile Include="Utils\IBTAPIs.cs" />
     <Compile Include="Utils\IDebuggingAPIs.cs" />
     <Compile Include="Utils\IFileSystemAPIs.cs" />
     <Compile Include="Utils\IFileSystemWatcherAPIs.cs" />
     <Compile Include="Utils\IPackageManager.cs" />
     <Compile Include="Utils\ITVHome.cs" />
-    <Compile Include="Utils\IWifiAPIs.cs" />
     <Compile Include="Utils\PackageManagerUtils.cs" />
     <Compile Include="Utils\RecentShortcutStorage.cs" />
     <Compile Include="Utils\TVHomeImpl.cs" />
   </ItemGroup>
   <ItemGroup>
+    <Reference Include="Tizen.Xamarin.Forms.Extension, Version=0.0.1.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\Tizen.Xamarin.Forms.Extension.2.3.4-r214-001\lib\portable-win+net45+wp80+win81+wpa81\Tizen.Xamarin.Forms.Extension.dll</HintPath>
+      <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>
       <Private>True</Private>
old mode 100644 (file)
new mode 100755 (executable)
index 4ef9e6e..6678270
@@ -39,10 +39,11 @@ namespace LibTVRefCommonPortable.Models
         /// <summary>
         /// A method removes a Recent Shortcut.
         /// </summary>
-        /// <param name="history">a Recent Shortcut to be removed.</param>
-        public void Remove(RecentShortcutInfo history)
+        /// <param name="appId">a Recent Shortcut's appId to be removed.</param>
+        public void Remove(string appId)
         {
-            RecentShortcutStorage.Delete(history);
+            //RecentShortcutStorage.Delete(history);
+            RecentShortcutStorage.Delete(appId);
         }
 
         /// <summary>
@@ -90,6 +91,7 @@ namespace LibTVRefCommonPortable.Models
                 recentShortcutInfo.ScreenshotPath = "screenshot.png";
                 recentShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
                 recentShortcutInfo.CurrentStateDescription = defaultStateDescription;
+                recentShortcutInfo.AppID = item.appID;
                 recentShortcutInfoList.Add(recentShortcutInfo);
             }
 
diff --git a/LibTVRefCommonPortable/Models/SettingShortcutController.cs b/LibTVRefCommonPortable/Models/SettingShortcutController.cs
deleted file mode 100755 (executable)
index a2a80eb..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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.Collections.Generic;
-using LibTVRefCommonPortable.DataModels;
-
-namespace LibTVRefCommonPortable.Models
-{
-    /// <summary>
-    /// A class provides Settings Shortcut information.
-    /// </summary>
-    public class SettingShortcutController
-    {
-        /// <summary>
-        /// A Setting Shortcut list.
-        /// </summary>
-        private List<ShortcutInfo> settingShortcutList = new List<ShortcutInfo>();
-
-        /// <summary>
-        /// A Constructor
-        /// Set dedicated Settings to be displayed in the TVHome.
-        /// </summary>
-        public SettingShortcutController()
-        {
-            // TODO : read from file!!!
-            ShortcutInfo settings = SettingShortcutFactory.Get(SettingID.SETTINGS);
-            settingShortcutList.Add(settings);
-
-            ShortcutInfo wifi = SettingShortcutFactory.Get(SettingID.WiFi);
-            settingShortcutList.Add(wifi);
-
-            ShortcutInfo bt = SettingShortcutFactory.Get(SettingID.BLUETOOTH);
-            settingShortcutList.Add(bt);
-
-            // TODO : Provides list of SettingShortcuts
-        }
-
-        /// <summary>
-        /// A method provides Setting Shortcut list.
-        /// </summary>
-        /// <returns>A Setting Shortcut list.</returns>
-        public IEnumerable<ShortcutInfo> GetList()
-        {
-            return new List<ShortcutInfo>(settingShortcutList);
-        }
-
-    }
-}
diff --git a/LibTVRefCommonPortable/Models/SettingShortcutFactory.cs b/LibTVRefCommonPortable/Models/SettingShortcutFactory.cs
deleted file mode 100755 (executable)
index 1904a97..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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 LibTVRefCommonPortable.DataModels;
-
-namespace LibTVRefCommonPortable.Models
-{
-    /// <summary>
-    /// A enumeration for Setting Shortcut making.
-    /// </summary>
-    public enum SettingID
-    {
-        SETTINGS,
-        WiFi,
-        BLUETOOTH
-    };
-
-    /// <summary>
-    /// A factory class to provide Setting Shortcuts.
-    /// </summary>
-    public static class SettingShortcutFactory
-    {
-        /// <summary>
-        /// A method provides Setting Shortcuts.
-        /// </summary>
-        /// <param name="id">A Setting ID</param>
-        /// <returns>A Setting Shortcut.</returns>
-        public static ShortcutInfo Get(SettingID id)
-        {
-            ShortcutInfo sc;
-            switch (id)
-            {
-                case SettingID.SETTINGS:
-                    sc = new AppShortcutInfo()
-                    {
-                        StateDescriptions =
-                        {
-                            {
-                                "default",
-                                new StateDescription
-                                {
-                                    Label = "Settings",
-                                    IconPath = "ic_tizen_home_menu_settings_selected.png",
-                                    Action = new AppControlAction()
-                                    {
-                                        AppID = "org.tizen.settings"
-                                    },
-                                }
-                            },
-                        }
-                    };
-                    sc.UpdateState();
-                    return sc;
-
-                case SettingID.WiFi:
-                    sc = new WiFiSettingShortcutInfo()
-                    {
-                        StateDescriptions =
-                        {
-                            {
-                                "default",
-                                new StateDescription
-                                {
-                                    Label = "WiFi ON",
-                                    IconPath = "AppIcon.png",
-                                    Action = new WiFiOffAction(),
-                                }
-                            },
-                            {
-                                "on",
-                                new StateDescription
-                                {
-                                    Label = "WiFi ON",
-                                    IconPath = "AppIcon.png",
-                                    Action = new WiFiOffAction(),
-                                }
-                            },
-                            {
-                                "off",
-                                new StateDescription
-                                {
-                                    Label = "WiFi OFF",
-                                    IconPath = "AppIcon.png",
-                                    Action = new WiFiOnAction(),
-                                }
-                            },
-                            {
-                                "launch",
-                                new StateDescription
-                                {
-                                    Label = "WiFi Launch",
-                                    IconPath = "AppIcon.png",
-                                    Action = new WiFiLaunchAction(),
-                                }
-                            },
-                        }
-                    };
-                    sc.UpdateState();
-                    return sc;
-
-                case SettingID.BLUETOOTH:
-                    sc = new BTSettingShortcutInfo()
-                    {
-                        StateDescriptions =
-                        {
-                            {
-                                "default",
-                                new StateDescription
-                                {
-                                    Label = "BT ON",
-                                    IconPath = "AppIcon.png",
-                                    Action = new BTOffAction(),
-                                }
-                            },
-                            {
-                                "on",
-                                new StateDescription
-                                {
-                                    Label = "BT ON",
-                                    IconPath = "AppIcon.png",
-                                    Action = new BTOffAction(),
-                                }
-                            },
-                            {
-                                "off",
-                                new StateDescription
-                                {
-                                    Label = "BT OFF",
-                                    IconPath = "AppIcon.png",
-                                    Action = new BTOnAction(),
-                                }
-                            },
-                            {
-                                "launch",
-                                new StateDescription
-                                {
-                                    Label = "BT Launch",
-                                    IconPath = "AppIcon.png",
-                                    Action = new BTLaunchAction(),
-                                }
-                            },
-                        }
-                    };
-                    sc.UpdateState();
-                    return sc;
-            }
-
-            return null;
-        }
-    }
-}
old mode 100644 (file)
new mode 100755 (executable)
index 62bfa08..cf65a8e
@@ -84,5 +84,15 @@ namespace LibTVRefCommonPortable.Utils
         /// <param name="applicationId">A application ID</param>
         /// <returns>A installed application information</returns>
         Dictionary<string, string> GetInstalledApplication(string applicationId);
+
+       /// <summary>
+       /// A method for removing all recent applications
+       /// </summary>
+        void DeleteAllRecentApplication();
+
+       /// <summary>
+       /// A method for removing the specified recent application
+       /// </summary>
+        void DeleteRecentApplication(string appId);
     }
 }
diff --git a/LibTVRefCommonPortable/Utils/IBTAPIs.cs b/LibTVRefCommonPortable/Utils/IBTAPIs.cs
deleted file mode 100644 (file)
index ca0b5f1..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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.
- */
-
-namespace LibTVRefCommonPortable.Utils
-{
-    /// <summary>
-    /// A Bluetooth interface.
-    /// </summary>
-    public interface IBTAPIs
-    {
-        /// <summary>
-        /// A method turns on the Bluetooth
-        /// </summary>
-        void BTOn();
-
-        /// <summary>
-        /// A method turns off the Bluetooth
-        /// </summary>
-        void BTOff();
-
-        /// <summary>
-        /// A method launches BT settings app.
-        /// </summary>
-        void LaunchBTSetting();
-    }
-}
old mode 100644 (file)
new mode 100755 (executable)
index 21aab96..58f503e
@@ -44,14 +44,5 @@ namespace LibTVRefCommonPortable.Utils
         {
             get;
         }
-
-        /// <summary>
-        /// A instance of the SettingShortcutController
-        /// </summary>
-        /// <see cref="SettingShortcutController"/>
-        SettingShortcutController SettingShortcutControllerInstance
-        {
-            get;
-        }
     }
 }
diff --git a/LibTVRefCommonPortable/Utils/IWifiAPIs.cs b/LibTVRefCommonPortable/Utils/IWifiAPIs.cs
deleted file mode 100644 (file)
index 32b81cc..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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.
- */
-
-namespace LibTVRefCommonPortable.Utils
-{
-    /// <summary>
-    /// A class for the WiFi function control
-    /// </summary>
-    public interface IWifiAPIs
-    {
-        /// <summary>
-        /// A method turns on the WiFi.
-        /// </summary>
-        void WifiOn();
-
-        /// <summary>
-        /// A method turns off the WiFi.
-        /// </summary>
-        void WifiOff();
-
-        /// <summary>
-        /// A method launches the WiFi Settings app.
-        /// </summary>
-        void LaunchWifiSetting();
-    }
-}
old mode 100644 (file)
new mode 100755 (executable)
index 01de300..6920fa3
@@ -16,6 +16,7 @@
 
 using System.Collections.Generic;
 using LibTVRefCommonPortable.DataModels;
+using Xamarin.Forms;
 
 namespace LibTVRefCommonPortable.Utils
 {
@@ -70,8 +71,10 @@ namespace LibTVRefCommonPortable.Utils
         /// A method deletes a Recent Shortcut.
         /// </summary>
         /// <param name="shortcut">A recent Shortcut</param>
-        public static void Delete(ShortcutInfo shortcut)
+        public static void Delete(string appId)
         {
+            IApplicationManagerAPIs applicationManagerPort = DependencyService.Get<IApplicationManagerAPIs>();
+            applicationManagerPort.DeleteRecentApplication(appId);
         }
 
         /// <summary>
@@ -79,6 +82,8 @@ namespace LibTVRefCommonPortable.Utils
         /// </summary>
         public static void DeleteAll()
         {
+            IApplicationManagerAPIs applicationManagerPort = DependencyService.Get<IApplicationManagerAPIs>();
+            applicationManagerPort.DeleteAllRecentApplication();
         }
     }
 }
old mode 100644 (file)
new mode 100755 (executable)
index d923053..e85d531
@@ -77,17 +77,5 @@ namespace LibTVRefCommonPortable.Utils
                 return recentShortcutController;
             }
         }
-
-        /// <summary>
-        /// A instance of the SettingShortcutController
-        /// </summary>
-        private static readonly SettingShortcutController settingShortcutController = new SettingShortcutController();
-        public SettingShortcutController SettingShortcutControllerInstance
-        {
-            get
-            {
-                return settingShortcutController;
-            }
-        }
     }
 }
old mode 100644 (file)
new mode 100755 (executable)
index 0cc9d91..cdd82fd
   <ItemGroup>
     <Compile Include="Ports\AppControlPort.cs" />
     <Compile Include="Ports\ApplicationManagerPort.cs" />
-    <Compile Include="Ports\BTModulePort.cs" />
     <Compile Include="Ports\DbgPort.cs" />
     <Compile Include="Ports\WindowPort.cs" />
     <Compile Include="Ports\FileSystemPort.cs" />
     <Compile Include="Ports\FileSystemWatcherPort.cs" />
     <Compile Include="Ports\PackageManagerPort.cs" />
-    <Compile Include="Ports\WifiModulePort.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
old mode 100644 (file)
new mode 100755 (executable)
index 59af18c..8182734
@@ -57,6 +57,33 @@ namespace LibTVRefCommonTizen.Ports
         }
 
         /// <summary>
+        /// Clear all recent applications
+        /// </summary>
+        public void DeleteAllRecentApplication()
+        {
+            RecentApplicationControl.DeleteAll();
+        }
+
+        /// <summary>
+        /// Removes the specified application with the app ID
+        /// </summary>
+        /// <param name="appId">A application ID that is removed</param>
+        public void DeleteRecentApplication(string appId)
+        {
+            IEnumerable<RecentApplicationInfo> recentApps = ApplicationManager.GetRecentApplications();
+            string pkgId = PackageManager.GetPackageIdByApplicationId(appId);
+
+            foreach (var item in recentApps)
+            {
+                if (item.PackageId.Equals(pkgId))
+                {
+                    RecentApplicationControl controller = item.Controller;
+                    controller.Delete();
+                }
+            }
+        }
+
+        /// <summary>
         /// Gets the information of the recent applications
         /// </summary>
         /// <returns>The list of the recent applications</returns>
diff --git a/LibTVRefCommonTizen/Ports/BTModulePort.cs b/LibTVRefCommonTizen/Ports/BTModulePort.cs
deleted file mode 100644 (file)
index f2fedcf..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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 Xamarin.Forms.Platform.Tizen.Native;
-using Tizen;
-using LibTVRefCommonPortable.Utils;
-using System;
-
-namespace LibTVRefCommonTizen.Ports
-{
-    public class BTModulePort : IBTAPIs
-    {
-        public void BTOff()
-        {
-            DebuggingUtils.Dbg("BT is OFF");
-        }
-
-        public void BTOn()
-        {
-            DebuggingUtils.Dbg("BT is ON");
-        }
-
-        public void LaunchBTSetting()
-        {
-            DebuggingUtils.Dbg("BT setting is launched");
-        }
-    }
-}
\ No newline at end of file
diff --git a/LibTVRefCommonTizen/Ports/WifiModulePort.cs b/LibTVRefCommonTizen/Ports/WifiModulePort.cs
deleted file mode 100644 (file)
index 89cefba..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * 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 Xamarin.Forms.Platform.Tizen.Native;
-using Tizen;
-using LibTVRefCommonPortable.Utils;
-using System;
-
-namespace LibTVRefCommonTizen.Ports
-{
-    public class WifiModulePort : IWifiAPIs
-    {
-
-        public void WifiOff()
-        {
-            DebuggingUtils.Dbg("WiFi is OFF");
-        }
-
-        public void WifiOn()
-        {
-            DebuggingUtils.Dbg("WiFi is ON");
-        }
-
-        public void LaunchWifiSetting()
-        {
-            DebuggingUtils.Dbg("WiFi setting is launched");
-        }
-    }
-}
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index c065409..44300b7
@@ -135,8 +135,6 @@ namespace TVApps.TizenTV
             Xamarin.Forms.DependencyService.Register<Program>();
             Xamarin.Forms.DependencyService.Register<AppControlPort>();
             Xamarin.Forms.DependencyService.Register<PackageManagerPort>();
-            Xamarin.Forms.DependencyService.Register<WifiModulePort>();
-            Xamarin.Forms.DependencyService.Register<BTModulePort>();
             Xamarin.Forms.DependencyService.Register<FileSystemWatcherPort>();
             Xamarin.Forms.DependencyService.Register<ApplicationManagerPort>();
             Xamarin.Forms.DependencyService.Register<FileSystemPort>();
index db194e3..268d499 100755 (executable)
@@ -155,8 +155,6 @@ namespace TVHome.TizenTV
             global::Xamarin.Forms.DependencyService.Register<DbgPort>();
             global::Xamarin.Forms.DependencyService.Register<AppControlPort>();
             global::Xamarin.Forms.DependencyService.Register<PackageManagerPort>();
-            global::Xamarin.Forms.DependencyService.Register<WifiModulePort>();
-            global::Xamarin.Forms.DependencyService.Register<BTModulePort>();
             global::Xamarin.Forms.DependencyService.Register<FileSystemWatcherPort>();
             global::Xamarin.Forms.DependencyService.Register<ApplicationManagerPort>();
             global::Xamarin.Forms.DependencyService.Register<FileSystemPort>();
index 5b84efe..4f310e8 100755 (executable)
@@ -54,6 +54,16 @@ namespace TVHome.Controls
         public ICommand OnUnpinCommand { get; set; }
 
         /// <summary>
+        /// A Command will be executed the recent is removed.
+        /// </summary>
+        public ICommand OnClearCommand { get; set; }
+
+        /// <summary>
+        /// A Command will be executed the all recent are cleared.
+        /// </summary>
+        public ICommand OnClearAllCommand { get; set; }
+
+        /// <summary>
         /// Handles Button Focused event
         /// </summary>
         /// <param name="sender">The source of the event</param>
old mode 100644 (file)
new mode 100755 (executable)
index 3409847..1ac9573
@@ -8,6 +8,11 @@
                 WidthRequest="320"
                 HeightRequest="180"
                 Opacity="0"/>
+        <Image x:Name="ThumnailDimLayer"
+                RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToView, ElementName=ButtonBox, Property=Width, Factor=1}"
+                RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToView, ElementName=ButtonBox, Property=Height, Factor=1}"
+                Opacity="0.99"
+                Source="img_tizen_home_list_dim_recent.png"/>
         <Image x:Name="ThumbnailImage"
                 RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToView, ElementName=ButtonBox, Property=Width, Factor=1}"
                 RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToView, ElementName=ButtonBox, Property=Height, Factor=1}"
                 Text="{Binding CurrentStateDescription.Label}"
                 TextColor="#FFFFFF"
                 FontSize="70"/>
-        <Image x:Name="ThumnailDimLayer"
-                RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToView, ElementName=ButtonBox, Property=Width, Factor=1}"
-                RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToView, ElementName=ButtonBox, Property=Height, Factor=1}"
-                Opacity="0.99"
-                Source="img_tizen_home_list_dim_recent.png"/>
         <Button x:Name="ButtonFocusArea"
                 RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToView, ElementName=ButtonBox, Property=Width, Factor=1}"
                 RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToView, ElementName=ButtonBox, Property=Height, Factor=1}"
index a34ce2d..00bd0a2 100755 (executable)
@@ -24,13 +24,56 @@ namespace TVHome.Controls
     /// </summary>
     public partial class SubPanelThumbnailButton : PanelButton
     {
+        private bool isPopupShowing = false;
         /// <summary>
         /// Constructor
         /// </summary>
         public SubPanelThumbnailButton()
         {
             InitializeComponent();
+            //InitializeLongTapGesture();
         }
+        /*
+        private void InitializeLongTapGesture()
+        {
+            var longTapGesture = new LongTapGestureRecognizer
+            {
+                Timeout = 0.5
+            };
+
+            var tapGesture = new TapGestureRecognizer
+            {
+                NumberOfTapsRequired = 1
+            };
+
+            tapGesture.Tapped += (sender, args) =>
+            {
+                if (!isMoveMode)
+                {
+                    if (OnClickedCommand != null)
+                    {
+                        OnClickedCommand.Execute("");
+                    }
+
+                    View.FadeTo(0.99, 300);
+                }
+                else
+                {
+                    OnMoveFinishedCommand.Execute("");
+                }
+            };
+
+            longTapGesture.TapCompleted += (sender, args) =>
+            {
+                ShowContextPopup();
+                //OnMoveFinishedCommand.Execute("");
+            };
+
+            View.GestureRecognizers.Add(longTapGesture);
+            //View.GestureRecognizers.Add(tapGesture);
+        }
+        */
+
 
         private void AnimationInitialize(object sender, EventArgs e)
         {
@@ -58,6 +101,8 @@ namespace TVHome.Controls
         /// <param name="e">The event that is occurred when button is focused</param>
         public override async void OnFocused(object sender, FocusEventArgs e)
         {
+            isFocused = true;
+
             if (OnFocusedCommand != null)
             {
                 OnFocusedCommand.Execute("");
@@ -90,6 +135,7 @@ namespace TVHome.Controls
         /// <param name="e">The event that is occurred when button is unfocused</param>
         public override async void OnUnfocused(object sender, FocusEventArgs e)
         {
+            isFocused = false;
             // Height, Width 확장 Animiation
             //var Animation = new Animation();
             //var viewHeightAnimation = new Animation(v => View.HeightRequest = v, 216, 180);
@@ -133,6 +179,11 @@ namespace TVHome.Controls
         /// </summary>
         public override void ShowContextPopup()
         {
+            if (isPopupShowing)
+            {
+                return;
+            }
+
             ContextPopup popup = new ContextPopup
             {
                 IsAutoHidingEnabled = true,
@@ -148,17 +199,23 @@ namespace TVHome.Controls
                 var ctxPopup = sender as ContextPopup;
                 if (ctxPopup.SelectedIndex == 0)
                 {
-                    OnMoveFinishedCommand.Execute("");
+                    OnClearCommand.Execute("");
                     ctxPopup.Dismiss();
                 }
                 else if (ctxPopup.SelectedIndex == 1)
                 {
-                    OnUnpinCommand.Execute("");
+                    OnClearAllCommand.Execute("");
                     ctxPopup.Dismiss();
                 }
             };
 
+            popup.Dismissed += (sender, args) =>
+            {
+                isPopupShowing = false;
+            };
+
             popup.Show(View);
+            isPopupShowing = true;
         }
     }
 }
\ No newline at end of file
index 729850d..0e95d44 100755 (executable)
@@ -88,6 +88,8 @@ namespace TVHome.ViewModels
 
         public Command OnMoveCommand { get; set; }
         public Command OnUnpinCommand { get; set; }
+        public Command OnClearCommand { get; set; }
+        public Command OnClearAllCommand { get; set; }
 
         /// <summary>
         /// Gets or set CurrentStatus of HomeStatus
@@ -199,6 +201,16 @@ namespace TVHome.ViewModels
             {
                 UnpinAppShortcutInfo(appId);
             });
+
+            OnClearCommand = new Command<string>((appId) =>
+            {
+                RemoveRecentApplication(appId);
+            });
+
+            OnClearAllCommand = new Command(() =>
+            {
+                ClearAllRecentApplications();
+            });
         }
 
         /// <summary>
@@ -305,7 +317,34 @@ namespace TVHome.ViewModels
         /// </summary>
         private void MakeSettingsButtons()
         {
-            SettingsList = TVHomeImpl.GetInstance.SettingShortcutControllerInstance.GetList();
+            string[] ShortCutLabel = { "Settings", "Brightness", "Contrast", "Color", "Tint" };
+
+            List<ShortcutInfo> TempList = new List<ShortcutInfo>();
+            for (int i = 0; i < ShortCutLabel.Length; i++)
+            {
+                ShortcutInfo shortcutInfo = new SettingShortcutInfo()
+                {
+                    StateDescriptions =
+                    {
+                        {
+                            "default",
+                            new StateDescription
+                            {
+                                Label = ShortCutLabel[i],
+                                IconPath = "ic_tizen_home_menu_settings_normal.png",
+                                Action = new AppControlAction()
+                                {
+                                    AppID = "org.tizen.settings"
+                                }
+                            }
+                        },
+                    },
+                };
+                shortcutInfo.UpdateState();
+                TempList.Add(shortcutInfo);
+            }
+
+            SettingsList = TempList;
             OnPropertyChanged("SettingsList");
         }
 
@@ -329,6 +368,24 @@ namespace TVHome.ViewModels
         }
 
         /// <summary>
+        /// Clears all recent applications and updates the list to Recent SubPanel
+        /// </summary>
+        private void ClearAllRecentApplications()
+        {
+            TVHomeImpl.GetInstance.RecentShortcutControllerInstance.RemoveAll();
+            MakeRecentButtons();
+        }
+
+        /// <summary>
+        /// Removes specified recent application and updates the list to Recent SubPanel
+        /// </summary>
+        private void RemoveRecentApplication(string appId)
+        {
+            TVHomeImpl.GetInstance.RecentShortcutControllerInstance.Remove(appId);
+            MakeRecentButtons();
+        }
+
+        /// <summary>
         /// A method for invoking PropertyChanged event
         /// </summary>
         /// <param name="name">The name of property</param>
index 460d01c..c21f201 100755 (executable)
@@ -32,6 +32,8 @@
                             RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=1}"
                             RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0.89}"
                             OnFocusedCommand="{Binding SubPanelFocusedCommand}"
+                            OnClearVMCommand="{Binding OnClearCommand}"
+                            OnClearAllVMCommand="{Binding OnClearAllCommand}"
                             ItemsSource="{Binding RecentList}"
                             ShowNoContentsInfo="{Binding IsShowNoRecentContents}">
             </Views:SubThumbnailPanel>
index 7c8eed1..c97621b 100755 (executable)
@@ -68,6 +68,22 @@ namespace TVHome.Views
             set { SetValue(OnMoveVMCommandProperty, value); }
         }
 
+        public static readonly BindableProperty OnClearVMCommandProperty = BindableProperty.Create("OnClearVMCommand", typeof(ICommand), typeof(SubThumbnailPanel));
+
+        public ICommand OnClearVMCommand
+        {
+            get { return (ICommand)GetValue(OnClearVMCommandProperty); }
+            set { SetValue(OnClearVMCommandProperty, value); }
+        }
+
+        public static readonly BindableProperty OnClearAllVMCommandProperty = BindableProperty.Create("OnClearAllVMCommand", typeof(ICommand), typeof(SubThumbnailPanel));
+
+        public ICommand OnClearAllVMCommand
+        {
+            get { return (ICommand)GetValue(OnClearAllVMCommandProperty); }
+            set { SetValue(OnClearAllVMCommandProperty, value); }
+        }
+
         /// <summary>
         /// Identifies the ItemsSource bindable property
         /// </summary>
index 7196363..e690a2c 100755 (executable)
@@ -19,6 +19,9 @@ using TVHome.Controls;
 using LibTVRefCommonPortable.DataModels;
 using Xamarin.Forms;
 using System.Threading.Tasks;
+using Tizen.Xamarin.Forms.Extension;
+using LibTVRefCommonPortable.Utils;
+using System.Collections.Generic;
 
 namespace TVHome.Views
 {
@@ -27,6 +30,7 @@ namespace TVHome.Views
     /// </summary>
     public partial class SubThumbnailPanel : Panel
     {
+        private List<PanelButton> ButtonList;
         /// <summary>
         /// Identifies the ShowNoContentsInfo bindable property
         /// </summary>
@@ -48,6 +52,22 @@ namespace TVHome.Views
             InitializeComponent();
             isFocused = false;
             PropertyChanged += OnItemsSourcePropertyChanged;
+
+            ButtonList = new List<PanelButton>();
+
+            MessagingCenter.Subscribe<App>(this, "MenuKeyPressed", (sender) =>
+            {
+                if (isFocused)
+                {
+                    foreach (var item in ButtonList)
+                    {
+                        if (item.isFocused)
+                        {
+                            item.ShowContextPopup();
+                        }
+                    }
+                }
+            });
         }
 
         /// <summary>
@@ -78,7 +98,8 @@ namespace TVHome.Views
             }
 
             PanelButtonStack.Children.Clear();
-            foreach (ShortcutInfo item in ItemsSource)
+            ButtonList.Clear();
+            foreach (RecentShortcutInfo item in ItemsSource)
             {
                 PanelButton button = new SubPanelThumbnailButton();
                 button.View.BindingContext = item;
@@ -90,10 +111,27 @@ namespace TVHome.Views
                 {
                     item.DoAction();
                 });
+                button.OnClearCommand = new Command(() =>
+                {
+                    OnClearVMCommand.Execute(item.AppID);
+                });
+                button.OnClearAllCommand = new Command(() =>
+                {
+                    OnClearAllVMCommand.Execute("");
+                });
                 PanelButtonStack.Children.Add(button.View);
+                ButtonList.Add(button);
             }
 
-            HidePanel();
+            if (!isFocused)
+            {
+                HidePanel();
+            }
+            else
+            {
+                isFocused = false;
+                FocusPanel();
+            }
         }
 
         /// <summary>