+++ /dev/null
-/*
- * 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;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using LibTVRefCommonPortable.Models;
-using System.Threading.Tasks;
-using System.Linq;
-using LibTVRefCommonPortable.DataModels;
-
-namespace HomeUnitTest
-{
- /// <summary>
- /// A test cases for AppShortcutController
- /// </summary>
- [TestClass]
- public class AppShortcutTestCases
- {
- /// <summary>
- /// A instance of AppShortcutController
- /// </summary>
- private AppShortcutController controller;
-
- /// <summary>
- /// All Apps app shortcut name
- /// </summary>
- private static readonly string AllApps = "All apps";
-
- /// <summary>
- /// MediaHub app shortcut name
- /// </summary>
- private static readonly string MediaHub = "Media Hub";
-
- /// <summary>
- /// Add pin app shortcut name
- /// </summary>
- private static readonly string AddPin = "Add pin";
-
- /// <summary>
- /// A constructor that initialize AppShortcutController instance.
- /// </summary>
- public AppShortcutTestCases()
- {
- controller = new AppShortcutController();
- }
-
- #region 추가 테스트 특성
- //
- // 테스트를 작성할 때 다음 추가 특성을 사용할 수 있습니다.
- //
- // ClassInitialize를 사용하여 클래스의 첫 번째 테스트를 실행하기 전에 코드를 실행합니다.
- // [ClassInitialize()]
- // public static void MyClassInitialize(TestContext testContext) { }
- //
- // ClassCleanup을 사용하여 클래스의 테스트를 모두 실행한 후에 코드를 실행합니다.
- // [ClassCleanup()]
- // public static void MyClassCleanup() { }
- //
- // TestInitialize를 사용하여 각 테스트를 실행하기 전에 코드를 실행합니다.
- // [TestInitialize()]
- // public void MyTestInitialize() { }
- //
- // TestCleanup을 사용하여 각 테스트를 실행한 후에 코드를 실행합니다.
- // [TestCleanup()]
- // public void MyTestCleanup() { }
- //
- #endregion
-
-
- [TestMethod]
- public async Task AppShortcutGetInstalledAppsTest()
- {
- var installedApps = await controller.GetInstalledApps();
-
- foreach (var app in installedApps)
- {
- Console.Out.WriteLine("App ID : " + app.AppID);
- Console.Out.WriteLine("Installed Date : " + app.Installed);
-
- Assert.AreNotEqual(app.AppID, null,
- "AppID is required!!!");
-
- // Err : CurrentStateDescription should not be null
- Assert.AreNotEqual(app.CurrentStateDescription, null,
- "CurrentStateDescription is null!!!");
-
- // Err : type of Action should be the AppControlAction
- Assert.IsTrue(app.CurrentStateDescription.Action is AppControlAction,
- "AppShortcut's action should be AppControlAction!!!");
-
- // Err : Action in CurrentStateDescription should not be null
- Assert.AreNotEqual(app.CurrentStateDescription.Action, null,
- "StateDescription should have Action!!!");
-
- // Err : Label in CurrentStateDescription should not be null
- Assert.AreNotEqual(app.CurrentStateDescription.Label, null,
- "StateDescription should have Label!!!");
-
- // Err : IconPath in CurrentStateDescription should not be null
- Assert.AreNotEqual(app.CurrentStateDescription.IconPath, null,
- "StateDescription should have App Icon!!!");
-
- // Err : removable app property check
- if (app.CurrentStateDescription.Label.Contains("removable") &&
- app.IsRemovable == false)
- {
- Assert.Fail("Setting Removable flag is wrong");
- }
-
- // Err : Invalid state description removing.
- if (app.CurrentStateDescription.Label.Contains("invalid"))
- {
- Assert.Fail("Invalid App Shortcut included!!!");
- }
- }
- }
-
- [TestMethod]
- public void AppShortcutGetDefaultShortcutsTest()
- {
- var defaultShortcuts = controller.GetDefaultShortcuts();
-
- // Req : Order of default shortcuts is All apps > Media Hub > Add pin
- Assert.AreNotEqual(defaultShortcuts.ElementAt(0).CurrentStateDescription,
- null, "All Apps CurrentStateDescription is invalid!!!");
- Assert.AreEqual(defaultShortcuts.ElementAt(0).CurrentStateDescription.Label, AllApps);
-
- Assert.AreNotEqual(defaultShortcuts.ElementAt(1).CurrentStateDescription,
- null, "Media Hub CurrentStateDescription is invalid!!!");
- Assert.AreEqual(defaultShortcuts.ElementAt(1).CurrentStateDescription.Label, MediaHub);
-
- Assert.AreNotEqual(defaultShortcuts.ElementAt(2).CurrentStateDescription,
- null, "Add pin CurrentStateDescription is invalid!!!");
- Assert.AreEqual(defaultShortcuts.ElementAt(2).CurrentStateDescription.Label, AddPin);
- }
-
- [TestMethod]
- public async Task AppShortcutGetPinnedAppsWithDefaultShortcutsTest()
- {
- var pinnedApps = await controller.GetPinnedAppsWithDefaultShortcuts();
-
- // Req : A Maximum number of pinned apps is 10. + All apps, Media Hub, Add pin
- Assert.IsTrue(pinnedApps.Count() <= 13, "A Maximum number of pinned apps is 10!!! NOT " + pinnedApps.Count());
-
- // Req : Order of default shortcuts is All apps > Media Hub > Add pin
- Assert.AreNotEqual(pinnedApps.ElementAt(0).CurrentStateDescription,
- null, "All Apps CurrentStateDescription is invalid!!!");
- Assert.AreEqual(pinnedApps.ElementAt(0).CurrentStateDescription.Label, AllApps);
-
- Assert.AreNotEqual(pinnedApps.ElementAt(1).CurrentStateDescription,
- null, "Media Hub CurrentStateDescription is invalid!!!");
- Assert.AreEqual(pinnedApps.ElementAt(1).CurrentStateDescription.Label, MediaHub);
-
- Assert.AreNotEqual(pinnedApps.ElementAt(pinnedApps.Count() - 1).CurrentStateDescription,
- null, "Add pin CurrentStateDescription is invalid!!!");
- Assert.AreEqual(pinnedApps.ElementAt(pinnedApps.Count() - 1).CurrentStateDescription.Label, AddPin);
-
- foreach (var shortcut in pinnedApps)
- {
- // Err : shortcut should be AppShortcutInfo
- if ((shortcut is AppShortcutInfo) == false)
- {
- Assert.Fail("Invalid ShortCut type!!!");
- }
-
- var app = shortcut as AppShortcutInfo;
-
- Console.Out.WriteLine("ID : " + app.AppID);
- Console.Out.WriteLine("Label : " + app.CurrentStateDescription.Label);
- Console.Out.WriteLine("Installed : " + app.Installed);
-
- // Err : CurrentStateDescription should not be null
- Assert.AreNotEqual(app.CurrentStateDescription, null,
- "StateDescription CurrentStateDescription is null!!!");
-
- // Err : Both ID and Label should not be null
- Assert.IsFalse((app.AppID == null || app.AppID.Length < 1) &&
- (app.CurrentStateDescription.Label == null || app.CurrentStateDescription.Label.Length < 1),
- "Both ID and Label should not be null!!!");
-
- // Err : AppID should be exist
- if (app.AppID == null)
- {
- if (app.CurrentStateDescription.Label.CompareTo(AllApps) != 0 &&
- app.CurrentStateDescription.Label.CompareTo(MediaHub) != 0 &&
- app.CurrentStateDescription.Label.CompareTo(AddPin) != 0)
- {
- Assert.Fail("App ID is missing!!! " + app.CurrentStateDescription.Label);
- }
- }
- else
- {
- // Req : TVHome, TVApps, MediaHub, Settings should not be pinned.
- Assert.IsFalse(app.AppID.Contains("xahome"), "TVHome should not be pinned");
- Assert.IsFalse(app.AppID.Contains("xaapps"), "TVApps should not be pinned");
- Assert.IsFalse(app.AppID.Contains("xamediahub"), "MediaHub should not be pinned");
- Assert.IsFalse(app.AppID.Contains("settings"), "Settings should not be pinned");
- }
-
- // Err : removable app property check
- if (app.CurrentStateDescription.Label.Contains("removable") &&
- app.IsRemovable == false)
- {
- Assert.Fail("Removable is failed");
- }
-
- // Err : Invalid state description removing.
- if (app.CurrentStateDescription.Label.Contains("invalid"))
- {
- Assert.Fail("Invalid App Shortcut included!!!");
- }
- }
- }
-
- [TestMethod]
- public async Task AppShortcutGetPinnedAppsAppIDsTest()
- {
- var pinnedAppsIDs = await controller.GetPinnedAppsAppIDs();
-
- // Req : A Maximum number of pinned apps is 10.
- Assert.IsTrue(pinnedAppsIDs.Count() <= 10,
- "A Maximum number of pinned apps is 10!!! NOT " + pinnedAppsIDs.Count());
-
- foreach (var appID in pinnedAppsIDs.Keys)
- {
- // Err : AppID should not be null or empty.
- Assert.AreNotEqual(appID, null, "App ID should not be null");
- Assert.IsFalse(appID.Length < 1, "App ID should not be empty");
-
- // Req : TVHome, TVApps, MediaHub, Settings should not be pinned.
- Assert.IsFalse(appID.Contains("xahome"), "TVHome should not be pinned");
- Assert.IsFalse(appID.Contains("xaapps"), "TVApps should not be pinned");
- Assert.IsFalse(appID.Contains("xamediahub"), "MediaHub should not be pinned");
- Assert.IsFalse(appID.Contains("settings"), "Settings should not be pinned");
- }
- }
- }
-}
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props')" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{1F2DB8A0-7D1E-4BA3-BF27-335D033C572C}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>HomeUnitTest</RootNamespace>
- <AssemblyName>HomeUnitTest</AssemblyName>
- <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
- <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
- <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
- <IsCodedUITest>False</IsCodedUITest>
- <TestProjectType>UnitTest</TestProjectType>
- <NuGetPackageImportStamp>
- </NuGetPackageImportStamp>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>TRACE;DEBUG</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <PackageReference Include="Tizen.Xamarin.Forms.Extension">
- <Version>2.3.5-v00015</Version>
- </PackageReference>
- <PackageReference Include="Xamarin.Forms">
- <Version>2.4.0-r266-001</Version>
- </PackageReference>
- <PackageReference Include="MSTest.TestAdapter">
- <Version>1.1.11</Version>
- </PackageReference>
- <PackageReference Include="MSTest.TestFramework">
- <Version>1.1.11</Version>
- </PackageReference>
- </ItemGroup>
- <ItemGroup>
- <Compile Include="AppShortcutTestCases.cs" />
- <Compile Include="ManagedAppsTestCases.cs" />
- <Compile Include="RecentTestCases.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\LibTVRefCommonPortable\LibTVRefCommonPortable.csproj">
- <Project>{67f9d3a8-f71e-4428-913f-c37ae82cdb24}</Project>
- <Name>LibTVRefCommonPortable</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
- </Target>
-</Project>
\ No newline at end of file
+++ /dev/null
-/*
- * 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 Microsoft.VisualStudio.TestTools.UnitTesting;
-using LibTVRefCommonPortable.Models;
-
-namespace HomeUnitTest
-{
- /// <summary>
- /// A Test cases for ManagedApps class.
- /// </summary>
- [TestClass]
- public class ManagedAppsTestCases
- {
- /// <summary>
- /// TVHome package ID
- /// </summary>
- private static readonly string Home = "org.tizen.xahome";
-
- /// <summary>
- /// TVApps package ID
- /// </summary>
- private static readonly string Apps = "org.tizen.xaapps";
-
- /// <summary>
- /// Mediahub package ID
- /// </summary>
- private static readonly string Mediahub = "org.tizen.xamediahub";
-
- /// <summary>
- /// Settings package ID
- /// </summary>
- private static readonly string Settings = "org.tizen.settings";
-
- [TestMethod]
- public void ManagerAppsIsHiddenRecentAppTest()
- {
- Assert.IsTrue(ManagedApps.IsHiddenRecentApp(Home), "TVHome should not be hidden in Recents");
- Assert.IsTrue(ManagedApps.IsHiddenRecentApp(Apps), "Apps should not be hidden in Recents");
- Assert.IsTrue(ManagedApps.IsHiddenRecentApp(Mediahub), "Mediahub should not be hidden in Recents");
- Assert.IsTrue(ManagedApps.IsHiddenRecentApp(Settings), "Settings should not be hidden in Recents");
- }
-
- [TestMethod]
- public void ManagerAppsIsNonPinnableAppsTest()
- {
- Assert.IsTrue(ManagedApps.IsNonPinnableApps(Home), "TVHome should not be pinned");
- Assert.IsTrue(ManagedApps.IsNonPinnableApps(Apps), "Apps should not be pinned");
- Assert.IsTrue(ManagedApps.IsNonPinnableApps(Mediahub), "Mediahub should not be pinned");
- Assert.IsTrue(ManagedApps.IsNonPinnableApps(Settings), "Settings should not be pinned");
- }
- }
-}
+++ /dev/null
-// <auto-generated/>
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-[assembly: AssemblyTitle("HomeUnitTest")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("HomeUnitTest")]
-[assembly: AssemblyCopyright("Copyright © 2017")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-[assembly: ComVisible(false)]
-
-[assembly: Guid("1f2db8a0-7d1e-4ba3-bf27-335d033c572c")]
-
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+++ /dev/null
-/*
- * 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;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using LibTVRefCommonPortable.Models;
-using LibTVRefCommonPortable.DataModels;
-using System.Linq;
-
-namespace HomeUnitTest
-{
- /// <summary>
- /// A test cases for RecentShortcutController
- /// </summary>
- [TestClass]
- public class RecentTestCases
- {
- /// <summary>
- /// A instance of RecentShortcutController
- /// </summary>
- private RecentShortcutController controller;
-
- /// <summary>
- /// A constructor that initializes RecentShortcutController instance.
- /// </summary>
- public RecentTestCases()
- {
- controller = new RecentShortcutController();
- }
-
- [TestMethod]
- public void RecentGetListTest()
- {
- var recents = controller.GetList();
-
- // Req : MAX number of recent = 10
- if (recents.Count() > 10)
- {
- Assert.Fail("Too many Recent!!!, Returned = " + recents.Count());
- }
-
- bool isAllMedias = true;
- bool isAllApps = true;
-
- foreach (var recent in recents)
- {
- Console.Out.WriteLine("-----------------------------");
- Console.Out.WriteLine("Type : " + recent.Type);
- Console.Out.WriteLine("ID : " + recent.Id);
- Console.Out.WriteLine("Date : " + recent.Date);
- Console.Out.WriteLine("ScreenShot : " + recent.ScreenshotPath);
-
- switch (recent.Type)
- {
- case RecentShortcutType.Application:
- isAllMedias = false;
- break;
- case RecentShortcutType.Media:
- isAllApps = false;
- break;
- }
-
- // Req : Invalid Recent(id, label has 'invalid') should not included!!!
- if (recent.CurrentStateDescription == null ||
- recent.CurrentStateDescription.Label.ToLower().Contains("invalid"))
- {
- Assert.Fail("Recent including invalid items!!!, " + recent.Id);
- }
- }
-
- // Err : Test Sample Recents are consist of App and Media types both.
- if (isAllMedias || isAllApps)
- {
- Assert.Fail("Invalid Recent list, All Media({0}), All Apps({1})", isAllMedias, isAllApps);
- }
- }
- }
-}
+++ /dev/null
-<StyleCopSettings Version="105">
- <GlobalSettings>
- <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
- </GlobalSettings>
- <Analyzers>
- <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
- <Rules>
- <Rule Name="ElementsMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustHaveSummaryText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="EnumerationItemsMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationMustContainValidXml">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustHaveSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PartialElementDocumentationMustHaveSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustNotHaveDefaultSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="VoidReturnValueMustNotBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParametersMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParametersMustBeDocumentedPartialClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustHaveText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertySummaryDocumentationMustMatchAccessors">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustNotBeCopiedAndPasted">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationTextMustNotBeEmpty">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationTextMustContainWhitespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationMustMeetCharacterPercentage">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationHeadersMustNotContainBlankLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncludedDocumentationXPathDoesNotExist">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncludeNodeDoesNotContainValidFileAndPath">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="InheritDocMustBeUsedWithInheritingClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustBeSpelledCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMustHaveHeader">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustShowCopyright">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustHaveCopyrightText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustContainFileName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderFileNameDocumentationMustMatchFileName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustHaveValidCompanyText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderFileNameDocumentationMustMatchTypeName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
- <Rules>
- <Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustBeginWithLowerCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotContainUnderscore">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementMustBeginWithLowerCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotUseHungarianNotation">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="VariableNamesMustNotBePrefixed">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotBeginWithUnderscore">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticReadonlyFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
- <Rules>
- <Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleBlankLinesInARow">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentMustBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustBeSeparatedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.MaintainabilityRules">
- <Rules>
- <Rule Name="AccessModifierMustBeDeclared">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldsMustBePrivate">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeAnalysisSuppressionMustHaveJustification">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DebugAssertMustProvideMessageText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DebugFailMustProvideMessageText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMayOnlyContainASingleClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMayOnlyContainASingleNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StatementMustNotUseUnnecessaryParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ArithmeticExpressionsMustDeclarePrecedence">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConditionalExpressionsMustDeclarePrecedence">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="RemoveDelegateParenthesisWhenPossible">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="AttributeConstructorMustNotUseUnnecessaryParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="RemoveUnnecessaryCode">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
- <Rules>
- <Rule Name="UsingDirectivesMustBePlacedWithinNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustAppearInTheCorrectOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustBeOrderedByAccess">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConstantsMustAppearBeforeFields">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticElementsMustAppearBeforeInstanceElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DeclarationKeywordsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ProtectedMustComeBeforeInternal">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertyAccessorsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="EventAccessorsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NoValueFirstComparison">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingStaticDirectivesMustBePlacedAfterUsingNamespaceDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">
- <Rules>
- <Rule Name="CommentsMustContainText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PrefixLocalCallsWithThis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PrefixCallsCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningParenthesisMustBeOnDeclarationLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CommaMustBeOnSameLineAsPreviousParameter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterListMustFollowDeclaration">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterMustFollowComma">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SplitParametersMustStartOnLineAfterDeclaration">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParametersMustBeOnSameLineOrSeparateLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterMustNotSpanMultipleLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClauseMustFollowPreviousClause">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClausesMustBeOnSeparateLinesOrAllOnOneLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClausesSpanningMultipleLinesMustBeginOnOwnLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotPlaceRegionsWithinElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainEmptyStatements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleStatementsOnOneLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="BlockStatementsMustNotContainEmbeddedComments">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="BlockStatementsMustNotContainEmbeddedRegions">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseStringEmptyForEmptyStrings">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseBuiltInTypeAlias">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseShorthandForNullableTypes">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
- <Rules>
- <Rule Name="CommasMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SemicolonsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationLinesMustBeginWithSingleSpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustBeginWithSingleSpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PreprocessorKeywordsMustNotBePrecededBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OperatorKeywordMustBeFollowedBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingCurlyBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningGenericBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingGenericBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningAttributeBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingAttributeBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NullableTypeSymbolsMustNotBePrecededBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="MemberAccessSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncrementDecrementSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NegativeSignsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PositiveSignsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ColonsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleWhitespaceInARow">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="TabsMustNotBeUsed">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotSplitNullConditionalOperators">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- </Analyzers>
-</StyleCopSettings>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="MSTest.TestAdapter" version="1.1.11" targetFramework="net461" />
- <package id="MSTest.TestFramework" version="1.1.11" targetFramework="net461" />
- <package id="Xamarin.Forms" version="2.3.5-r233-012" targetFramework="net461" />
-</packages>
\ No newline at end of file
--- /dev/null
+/*
+ * 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;
+using LibTVRefCommonPortable.Utils;
+using System.Collections.Generic;
+
+namespace LibTVRefCommonPortable.DataModels
+{
+ /// <summary>
+ /// A class defines App Control behavior.
+ /// </summary>
+ public class AppControlAction : IAction
+ {
+ /// <summary>
+ /// A target application ID
+ /// </summary>
+ public string AppID { get; set; }
+
+ /// <summary>
+ /// A dictionary which has extra data for App Control
+ /// </summary>
+ protected Dictionary<string, string> extraData;
+
+ /// <summary>
+ /// A dictionary which has extra data for App Control
+ /// </summary>
+ public Dictionary<string, string> ExtraData
+ {
+ get
+ {
+ if (extraData == null)
+ {
+ extraData = new Dictionary<string, string>();
+ }
+
+ return extraData;
+ }
+ }
+
+ /// <summary>
+ /// A method which invoke an App Control to the application of the AppID
+ /// </summary>
+ /// <returns>a next state after App Control invocation</returns>
+ public string Execute()
+ {
+ // Warn : Do NOT pass 'E'xtraData, it will create a new Dictionary and it might cause unexpected situation.
+ AppControlUtils.SendLaunchRequest(AppID, extraData);
+ return "default";
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 System;
+using System.Xml.Serialization;
+using Xamarin.Forms;
+
+namespace LibTVRefCommonPortable.DataModels
+{
+ /// <summary>
+ /// A class defines App Shortcut button
+ /// </summary>
+ public class AppShortcutInfo : ShortcutInfo
+ {
+ /// <summary>
+ /// An application ID of the App Shortcut.
+ /// </summary>
+ public string AppID { get; set; }
+
+ /// <summary>
+ /// An App Shortcut status.
+ /// </summary>
+ [XmlIgnore]
+ public string Status { get; set; }
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut is checked or not.
+ /// </summary>
+ [XmlIgnore]
+ private bool isChecked;
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut is checked or not.
+ /// </summary>
+ [XmlIgnore]
+ public bool IsChecked
+ {
+ get
+ {
+ return isChecked;
+ }
+
+ set
+ {
+ if (isChecked != value)
+ {
+ isChecked = value;
+ OnPropertyChanged("IsChecked");
+ }
+ }
+ }
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut is pinned or not.
+ /// </summary>
+ [XmlIgnore]
+ private bool isPinned;
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut is pinned or not.
+ /// </summary>
+ [XmlIgnore]
+ public bool IsPinned
+ {
+ get
+ {
+ return isPinned;
+ }
+
+ set
+ {
+ if (isPinned != value)
+ {
+ isPinned = value;
+ OnPropertyChanged("IsPinned");
+ }
+ }
+ }
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut can be removed.
+ /// </summary>
+ [XmlIgnore]
+ public bool IsRemovable { get; set; }
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut is focused or not.
+ /// </summary>
+ [XmlIgnore]
+ private bool isFocused;
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut is focused or not.
+ /// </summary>
+ [XmlIgnore]
+ public bool IsFocused
+ {
+ get
+ {
+ return isFocused;
+ }
+
+ set
+ {
+ if (isFocused != value)
+ {
+ isFocused = value;
+ OnPropertyChanged("IsFocused");
+ }
+ }
+ }
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut is dimmed or not.
+ /// </summary>
+ [XmlIgnore]
+ private bool isDim;
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut is dimmed or not.
+ /// </summary>
+ [XmlIgnore]
+ public bool IsDim
+ {
+ get
+ {
+ return isDim;
+ }
+
+ set
+ {
+ if (isDim != value)
+ {
+ isDim = value;
+ OnPropertyChanged("IsDim");
+ }
+ }
+ }
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut is showing options or not.
+ /// </summary>
+ [XmlIgnore]
+ private bool isShowOptions;
+
+ /// <summary>
+ /// A flag indicates that a App Shortcut is showing options or not.
+ /// </summary>
+ [XmlIgnore]
+ public bool IsShowOptions
+ {
+ get
+ {
+ return isShowOptions;
+ }
+
+ set
+ {
+ if (isShowOptions != value)
+ {
+ isShowOptions = value;
+ OnPropertyChanged("IsShowOptions");
+ }
+ }
+ }
+
+ /// <summary>
+ /// An app installed time.
+ /// </summary>
+ [XmlIgnore]
+ public DateTime Installed { get; set; }
+
+ /// <summary>
+ /// A pin command of the Option menu.
+ /// </summary>
+ [XmlIgnore]
+ public Command OptionMenuPinToggleCommand { get; set; }
+
+ /// <summary>
+ /// A deleting app command of the Option menu.
+ /// </summary>
+ [XmlIgnore]
+ public Command OptionMenuDeleteCommand { get; set; }
+
+ [XmlIgnore]
+ public Command ToDefaultCommand { get; set; }
+
+ /// <summary>
+ /// A Constructor.
+ /// Initializes AppShortcutInfo.
+ /// </summary>
+ public AppShortcutInfo()
+ {
+ OptionMenuPinToggleCommand = new Command(() =>
+ {
+ MessagingCenter.Send<AppShortcutInfo, string>(this, "OptionMenuPinToggle", AppID);
+ });
+
+ OptionMenuDeleteCommand = new Command(() =>
+ {
+ MessagingCenter.Send<AppShortcutInfo, string>(this, "OptionMenuDelete", AppID);
+ });
+
+ ToDefaultCommand = new Command(() =>
+ {
+ MessagingCenter.Send<AppShortcutInfo>(this, "ChangeToDefaultMode");
+ });
+ }
+
+ /// <summary>
+ /// Update State of a shortcut.
+ /// </summary>
+ public override void UpdateState()
+ {
+ SetCurrentState("default");
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 Action class which can invoke a Command
+ /// </summary>
+ public class CommandAction : IAction
+ {
+ /// <summary>
+ /// A next description after invocation of the Command.
+ /// </summary>
+ public string NextStateDescription { get; set; }
+
+ /// <summary>
+ /// A Command to be executed
+ /// </summary>
+ public event EventHandler<String> Command;
+
+ /// <summary>
+ /// A Command parameter.
+ /// </summary>
+ public string CommandParameter { get; set; }
+
+ /// <summary>
+ /// A method execute a action.
+ /// </summary>
+ /// <returns>A next statue of a Shortcut.</returns>
+ public string Execute()
+ {
+ Command?.Invoke(this, CommandParameter);
+ return NextStateDescription;
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 contains file system event arguments.
+ /// </summary>
+ public class FileSystemEventCustomArgs : EventArgs
+ {
+ /// <summary>
+ /// Initializes a new instance of the System.IO.FileSystemEventArgs class.
+ /// </summary>
+ /// <param name="changeType">One of the System.IO.WatcherChangeTypes values, which represents the kind of change detected in the file system.</param>
+ /// <param name="directory">The root directory of the affected file or directory.</param>
+ /// <param name="name">The name of the affected file or directory.</param>
+ public FileSystemEventCustomArgs(WatcherType changeType, string directory, string name)
+ {
+ ChangeType = changeType;
+ FullPath = directory;
+ Name = name;
+ }
+
+ /// <summary>
+ /// Gets the type of directory event that occurred.
+ /// One of the System.IO.WatcherChangeTypes values that represents the kind of change
+ /// detected in the file system.
+ /// </summary>
+ public WatcherType ChangeType { set; get; }
+
+ /// <summary>
+ /// Gets the fully qualified path of the affected file or directory.
+ /// The path of the affected file or directory.
+ /// </summary>
+ public string FullPath { set; get; }
+
+ /// <summary>
+ /// Gets the name of the affected file or directory.
+ /// The name of the affected file or directory.
+ /// </summary>
+ public string Name { set; get; }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * 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 Home Menu AppShortcut information
+ /// </summary>
+ /// <seealso cref="ShortcutInfo"/>
+ public class HomeMenuAppShortcutInfo : ShortcutInfo
+ {
+ /// <summary>
+ /// A Shortcut status
+ /// </summary>
+ public string Status { get; set; }
+
+ /// <summary>
+ /// A method initializes a status of a Shortcut.
+ /// </summary>
+ public override void UpdateState()
+ {
+ SetCurrentState("default");
+ }
+
+ /// <summary>
+ /// A method changes current status of a Shortcut.
+ /// </summary>
+ /// <param name="status">A new status</param>
+ public void ChangeStatus(string status)
+ {
+ Status = status;
+ OnPropertyChanged("Status");
+ SetCurrentState(status);
+ }
+ }
+}
--- /dev/null
+/*
+ * 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>
+ /// An interface defines behaviors that will be exported by inherited classes.
+ /// </summary>
+ public interface IAction
+ {
+ /// <summary>
+ /// A method execute an action.
+ /// </summary>
+ /// <returns>A next statue of a Shortcut.</returns>
+ string Execute();
+ }
+}
--- /dev/null
+/*
+ * 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;
+
+namespace TVHome.DataModels
+{
+ public interface IEnumerableItem
+ {
+ IDictionary<int, string> ItemProperties
+ {
+ set;
+ get;
+ }
+
+ }
+}
--- /dev/null
+/*
+ * 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;
+using LibTVRefCommonPortable.Utils;
+
+namespace LibTVRefCommonPortable.DataModels
+{
+ /// <summary>
+ /// A Media ControlAction.
+ /// </summary>
+ class MediaControlAction : AppControlAction
+ {
+ /// <summary>
+ /// A file URI to be open
+ /// </summary>
+ public string FileUri { get; set; }
+
+ /// <summary>
+ /// A method execute a action.
+ /// </summary>
+ /// <returns>A next statue of a Shortcut.</returns>
+ new public string Execute()
+ {
+ // Warn : Do NOT pass 'E'xtraData, it will create a new Dictionary and it might cause unexpected situation.
+ AppControlUtils.SendLaunchRequest(AppID, extraData, FileUri);
+ return "default";
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Collections;
+
+namespace LibTVRefCommonPortable.DataModels
+{
+ /// <summary>
+ /// Types for recent shortcut
+ /// </summary>
+ public enum RecentShortcutType
+ {
+ Application = 0,
+ Media = 1,
+ }
+
+ /// <summary>
+ /// A Recent Shortcut information
+ /// </summary>
+ public class RecentShortcutInfo : ShortcutInfo, IComparable
+ {
+ /// <summary>
+ /// A type for the content of the shortcut
+ /// </summary>
+ public RecentShortcutType Type { get; set; }
+
+ /// <summary>
+ /// An Id for the content of the shortcut
+ /// </summary>
+ public string Id { get; set; }
+ /// <summary>
+ /// A Last used Time
+ /// </summary>
+ public DateTime Date { get; set; }
+
+ /// <summary>
+ /// A Screenshot image path
+ /// </summary>
+ public string ScreenshotPath { get; set; }
+
+ /// <summary>
+ /// Initialize State of a shortcut.
+ /// </summary>
+ public override void UpdateState()
+ {
+ SetCurrentState("default");
+ }
+
+ int IComparable.CompareTo(object target)
+ {
+ var rightShortcutInfo = target as RecentShortcutInfo;
+ return Date.CompareTo(rightShortcutInfo.Date) * -1;
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 Setting Shortcut information
+ /// </summary>
+ public class SettingShortcutInfo : ShortcutInfo
+ {
+ /// <summary>
+ /// Initialize State of a shortcut.
+ /// </summary>
+ public override void UpdateState()
+ {
+ SetCurrentState("default");
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Xml.Serialization;
+using LibTVRefCommonPortable.Utils;
+
+namespace LibTVRefCommonPortable.DataModels
+{
+ /// <summary>
+ /// TVHome and TVApps has several buttons that represent Apps, Contents, Settings.
+ /// The ShortcutInfo is a model for those buttons with detail information of the represented object.
+ /// </summary>
+ public abstract class ShortcutInfo : INotifyPropertyChanged
+ {
+ /// <summary>
+ /// An event handler for handing property changed. </summary>
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ /// <summary>
+ /// State descriptions of Shortcut. </summary>
+ [XmlIgnore]
+ private Dictionary<String, StateDescription> stateDescriptions = new Dictionary<String, StateDescription>();
+
+ /// <summary>
+ /// State descriptions of Shortcut. </summary>
+ [XmlIgnore]
+ public Dictionary<String, StateDescription> StateDescriptions
+ {
+ get
+ {
+ return stateDescriptions;
+ }
+ }
+
+ /// <summary>
+ /// A method notifies property changed event. </summary>
+ /// <param name="propertyName"> A property name.</param>
+ protected void OnPropertyChanged(string propertyName)
+ {
+ var handler = PropertyChanged;
+ if (handler != null)
+ {
+ handler(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+
+ /// <summary>
+ /// A current state description of a Shortcut. </summary>
+ [XmlIgnore]
+ public StateDescription CurrentStateDescription
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// A current state description of a Shortcut. </summary>
+ /// <param name="state"> A property name.</param>
+ /// <returns> A result of state transition</returns>
+ protected bool SetCurrentState(string state)
+ {
+ if (stateDescriptions.ContainsKey(state) == false)
+ {
+ DebuggingUtils.Err(state + " is doesn't exists!!!");
+ return false;
+ }
+
+ if (CurrentStateDescription != null &&
+ CurrentStateDescription == stateDescriptions[state])
+ {
+ return true;
+ }
+
+ CurrentStateDescription = stateDescriptions[state];
+ OnPropertyChanged("CurrentStateDescription");
+ return true;
+ }
+
+ /// <summary>
+ /// Initialize State of a shortcut.
+ /// </summary>
+ abstract public void UpdateState();
+
+ /// <summary>
+ /// A method executes a action.
+ /// After execution of the action, status will be changed if returned status is available. </summary>
+ /// <returns> A result of action invocation. </returns>
+ public bool DoAction()
+ {
+ if (CurrentStateDescription == null)
+ {
+ DebuggingUtils.Err("Current state is not set!!!");
+ return false;
+ }
+
+ String newState = CurrentStateDescription.Action.Execute();
+ if (newState == null)
+ {
+ DebuggingUtils.Err("Invalid State returned!!!");
+ return false;
+ }
+
+ return SetCurrentState(newState);
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 class represents a state of a Shortcut.
+ /// </summary>
+ public class StateDescription
+ {
+ /// <summary>
+ /// Constructor.
+ /// </summary>
+ public StateDescription()
+ {
+ Label = "";
+ IconPath = "";
+ }
+
+ /// <summary>
+ /// A Shortcut label.
+ /// </summary>
+ public string Label
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// A Shortcut icon path.
+ /// </summary>
+ public string IconPath
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// A Action instance to be called when a Shortcut is pressed.
+ /// </summary>
+ public IAction Action
+ {
+ get;
+ set;
+ }
+
+ }
+}
--- /dev/null
+/*
+ * 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 File Watcher type enumeration.
+ /// </summary>
+ public enum WatcherType
+ {
+ /// <summary>
+ /// The creation of a file or folder.
+ /// </summary>
+ Created = 1,
+ /// <summary>
+ /// The deletion of a file or folder.
+ /// </summary>
+ Deleted = 2,
+ /// <summary>
+ /// The change of a file or folder. The types of changes include: changes to size,
+ /// attributes, security settings, last write, and last access time.
+ /// </summary>
+ Changed = 4,
+ /// <summary>
+ /// The renaming of a file or folder.
+ /// </summary>
+ Renamed = 8,
+ /// <summary>
+ /// The creation, deletion, change, or renaming of a file or folder.
+ /// </summary>
+ All = 15
+ }
+}
--- /dev/null
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>netstandard2.0</TargetFramework>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Tizen.Xamarin.Forms.Extension" Version="2.4.0-v00005" />
+ <PackageReference Include="Xamarin.Forms" Version="2.4.0.266-pre1" />
+ </ItemGroup>
+
+</Project>
--- /dev/null
+/*
+ * 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;
+using System.Collections.Generic;
+using LibTVRefCommonPortable.DataModels;
+using LibTVRefCommonPortable.Utils;
+using System.Threading.Tasks;
+
+namespace LibTVRefCommonPortable.Models
+{
+ /// <summary>
+ /// A class provides Application related information to ViewModel.
+ /// The TVHome shows the Pinned app list when the App Home Menu is pressed,
+ /// by invoking AppShortcutController's API to retrieve the pinned app list.
+ /// The TVApps shows the installed the Tizen UI apps in the main screen.
+ /// To provides the installed apps, the TVApps invokes an AppShortcutController's API.
+ /// </summary>
+ public class AppShortcutController
+ {
+ /// <summary>
+ /// A default app icon for no icon applications.
+ /// </summary>
+ private static String DefaultAppIcon = "AppIcon.png";
+
+ /// <summary>
+ /// A method provides installed app list.
+ /// The returned app list has only Tizen UI apps not the system app or no display apps.
+ /// </summary>
+ /// <returns>An installed app list.</returns>
+ public async Task<IEnumerable<AppShortcutInfo>> GetInstalledApps()
+ {
+ List<AppShortcutInfo> appShortcutInfoList = new List<AppShortcutInfo>();
+
+ var installedAppList = await ApplicationManagerUtils.Instance.GetAllInstalledApplication();
+
+ foreach (var item in installedAppList)
+ {
+ if (ManagedApps.IsNonPinnableApps(item.AppID))
+ {
+ continue;
+ }
+
+ var defaultStateDescription = new StateDescription()
+ {
+ Label = item.Applabel ?? "No Name",
+ IconPath = item.IconPath ?? DefaultAppIcon,
+ Action = new AppControlAction()
+ {
+ AppID = item.AppID,
+ }
+ };
+
+ var appShortcutInfo = new AppShortcutInfo()
+ {
+ IsRemovable = ApplicationManagerUtils.Instance.GetAppInfoRemovable(item.AppID),
+ Installed = item.InstalledTime,
+ };
+
+ appShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
+ appShortcutInfo.CurrentStateDescription = defaultStateDescription;
+ appShortcutInfo.AppID = item.AppID;
+ appShortcutInfoList.Add(appShortcutInfo);
+ }
+
+ return appShortcutInfoList;
+ }
+
+ /// <summary>
+ /// A method appends an All Apps Shortcut and a MediaHub Shortcut at first in the given App Shortcut list.
+ /// Actually this method is used for making the Pinned App Shortcut panel of the TVHome
+ /// </summary>
+ /// <seealso cref="GetDefaultShortcuts"/>
+ /// <seealso cref="GetPinnedAppsWithDefaultShortcuts"/>
+ /// <param name="returnPinnedAppsInfo">An App Shortcut list contains the additional Shortcuts.</param>
+ private void AddAllAppsAndMediaHubShortcut(ref List<ShortcutInfo> returnPinnedAppsInfo)
+ {
+ var allAppsShortcutInfo = new AppShortcutInfo()
+ {
+ StateDescriptions =
+ {
+ {
+ "default",
+ new StateDescription
+ {
+ Label = "All apps",
+ IconPath = "ic_home_menu_apps_138.png",
+ Action = new AppControlAction
+ {
+ AppID = ManagedApps.TVAppsAppID,
+ }
+ }
+ },
+ {
+ "focused",
+ new StateDescription
+ {
+ Label = "All apps",
+ IconPath = "ic_home_menu_apps_182.png",
+ Action = new AppControlAction
+ {
+ AppID = ManagedApps.TVAppsAppID,
+ }
+ }
+ },
+ }
+ };
+
+ allAppsShortcutInfo.UpdateState();
+ returnPinnedAppsInfo.Insert(0, allAppsShortcutInfo);
+
+ var mediaHubShortcutInfo = new AppShortcutInfo()
+ {
+ StateDescriptions =
+ {
+ {
+ "default",
+ new StateDescription
+ {
+ Label = "Media Hub",
+ IconPath = "ic_launcher_mediahub_138.png",
+ Action = new AppControlAction
+ {
+ AppID = ManagedApps.MediaHubAppID,
+ }
+ }
+ },
+ {
+ "focused",
+ new StateDescription
+ {
+ Label = "Media Hub",
+ IconPath = "ic_launcher_mediahub_182.png",
+ Action = new AppControlAction
+ {
+ AppID = ManagedApps.MediaHubAppID,
+ }
+ }
+ },
+ }
+ };
+
+ mediaHubShortcutInfo.UpdateState();
+ returnPinnedAppsInfo.Insert(1, mediaHubShortcutInfo);
+ }
+
+ /// <summary>
+ /// A method appends an Add Pin Shortcut in the given App Shortcut list.
+ /// </summary>
+ /// <seealso cref="GetDefaultShortcuts"/>
+ /// <seealso cref="GetPinnedAppsWithDefaultShortcuts"/>
+ /// <param name="returnPinnedAppsInfo">An App Shortcut list contains the additional Shortcuts.</param>
+ private void AppendAddPinShortcut(ref List<ShortcutInfo> returnPinnedAppsInfo)
+ {
+ var addPinCommandAction = new CommandAction()
+ {
+ NextStateDescription = "default",
+ CommandParameter = "",
+ };
+
+ addPinCommandAction.Command += new EventHandler<string>((s, e) =>
+ {
+ AppControlUtils.SendAddAppRequestToApps();
+ });
+
+ var addPinShortcutInfo = new AppShortcutInfo()
+ {
+ StateDescriptions =
+ {
+ {
+ "default",
+ new StateDescription
+ {
+ Label = "Add pin",
+ IconPath = "ic_home_menu_addpin_138.png",
+ Action = addPinCommandAction,
+ }
+ },
+ {
+ "focused",
+ new StateDescription
+ {
+ Label = "Add pin",
+ IconPath = "ic_home_menu_addpin_182.png",
+ Action = addPinCommandAction,
+ }
+ },
+ }
+ };
+
+ addPinShortcutInfo.UpdateState();
+ returnPinnedAppsInfo.Add(addPinShortcutInfo);
+ }
+
+ /// <summary>
+ /// A method provides Pinned App Shortcut list by retrieving from the AppShortcutStorage.
+ /// This method provides only the Pinned App Shortcut list not including any additional Shortcuts
+ /// such as the All Apps, the Media Hub, and the Add Pin.
+ /// </summary>
+ /// <returns>A Pinned App Shortcut list.</returns>
+ private async Task<List<ShortcutInfo>> GetPinnedApps()
+ {
+ IEnumerable<AppShortcutInfo> pinned_apps_info = await AppShortcutStorage.Read();
+
+ List<ShortcutInfo> returnPinnedAppsInfo = new List<ShortcutInfo>();
+
+ int numberOfPinnedApp = 0;
+ foreach (AppShortcutInfo appShortcutInfo in pinned_apps_info)
+ {
+ if (numberOfPinnedApp >= 10)
+ {
+ break;
+ }
+
+ if (appShortcutInfo.AppID == null ||
+ appShortcutInfo.AppID.Length < 1)
+ {
+ continue;
+ }
+
+ if (ManagedApps.IsNonPinnableApps(appShortcutInfo.AppID))
+ {
+ continue;
+ }
+
+ InstalledApp appInfo = ApplicationManagerUtils.Instance.GetInstalledApplication(appShortcutInfo.AppID);
+ if (appInfo == null)
+ {
+ continue;
+ }
+
+ string appLabel = appInfo.Applabel ?? "No Name";
+ string appIconPath = appInfo.IconPath ?? DefaultAppIcon;
+
+ var defaultStateDescription = new StateDescription()
+ {
+ Label = appLabel,
+ IconPath = appIconPath,
+ Action = new AppControlAction
+ {
+ AppID = appShortcutInfo.AppID,
+ }
+ };
+
+ appShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
+ appShortcutInfo.CurrentStateDescription = defaultStateDescription;
+ appShortcutInfo.IsPinned = true;
+ returnPinnedAppsInfo.Add(appShortcutInfo);
+
+ numberOfPinnedApp += 1;
+ }
+
+ return returnPinnedAppsInfo;
+ }
+
+ /// <summary>
+ /// A method provides an App Shortcut list which contains default App Shortcuts
+ /// such as the All Apps, the Media Hub, and the Add Pin.
+ /// </summary>
+ /// <returns>A default App Shortcut list.</returns>
+ public IEnumerable<ShortcutInfo> GetDefaultShortcuts()
+ {
+ List<ShortcutInfo> returnPinnedAppsInfo = new List<ShortcutInfo>();
+
+ AddAllAppsAndMediaHubShortcut(ref returnPinnedAppsInfo);
+ AppendAddPinShortcut(ref returnPinnedAppsInfo);
+
+ return returnPinnedAppsInfo;
+ }
+
+ /// <summary>
+ /// A method provides the App Shortcut list with the default App Shortcut icons.
+ /// The pinned apps, the All Apps, the MediaHub, and the Add Pin are included in the return App Shortcut list.
+ /// </summary>
+ /// <returns>App Shortcut list.</returns>
+ public async Task<IEnumerable<ShortcutInfo>> GetPinnedAppsWithDefaultShortcuts()
+ {
+ List<ShortcutInfo> returnPinnedAppsInfo = await GetPinnedApps();
+
+ AddAllAppsAndMediaHubShortcut(ref returnPinnedAppsInfo);
+ AppendAddPinShortcut(ref returnPinnedAppsInfo);
+
+ return returnPinnedAppsInfo;
+ }
+
+ /// <summary>
+ /// A method provides only pinned app's app ID as a hash table.
+ /// </summary>
+ /// <returns>A hash table includes pinned app's app ID.</returns>
+ public async Task<Dictionary<string, string>> GetPinnedAppsAppIDs()
+ {
+ IEnumerable<AppShortcutInfo> pinned_apps_info = await AppShortcutStorage.Read();
+ Dictionary<string, string> pinnedAppsDictionary = new Dictionary<string, string>();
+
+ int numberOfPinnedApp = 0;
+ foreach (AppShortcutInfo appShortcutInfo in pinned_apps_info)
+ {
+ if (numberOfPinnedApp >= 10)
+ {
+ break;
+ }
+
+ if (ManagedApps.IsNonPinnableApps(appShortcutInfo.AppID))
+ {
+ continue;
+ }
+
+ pinnedAppsDictionary.Add(appShortcutInfo.AppID, appShortcutInfo.AppID);
+ numberOfPinnedApp += 1;
+ }
+
+ return pinnedAppsDictionary;
+ }
+
+ /// <summary>
+ /// A method updates the pinned App list by using the AppShortcutStorage.
+ /// </summary>
+ /// <param name="pinnedAppsInfo">A pinned app list.</param>
+ public void UpdatePinnedApps(IEnumerable<AppShortcutInfo> pinnedAppsInfo)
+ {
+ AppShortcutStorage.Write(pinnedAppsInfo);
+ }
+
+ /// <summary>
+ /// A listener to get notification of the AppShortcutStorage.
+ /// </summary>
+ /// <param name="eventListener">A Event Handler for the nonfiction of AppShortutStorage.</param>
+ public void AddFileSystemChangedListener(EventHandler<EventArgs> eventListener)
+ {
+ if (AppShortcutStorage.Instance != null)
+ {
+ AppShortcutStorage.Instance.AddStorageChangedListener(eventListener);
+ }
+ else
+ {
+ DebuggingUtils.Err("AppShortcutStorage Instance is NULL");
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LibTVRefCommonPortable.Models
+{
+ /// <summary>
+ /// A class has some apps have to managed in the TVHome, TVApps by platform policy reason.
+ /// </summary>
+ public class ManagedApps
+ {
+ /// <summary>
+ /// The app ID of TV reference home application
+ /// </summary>
+ public static string TVHomeAppID
+ {
+ get
+ {
+ return "org.tizen.xahome";
+ }
+ }
+
+ /// <summary>
+ /// The app ID of TV reference apps-tray application
+ /// </summary>
+ public static string TVAppsAppID
+ {
+ get
+ {
+ return "org.tizen.xaapps";
+ }
+ }
+
+ /// <summary>
+ /// The app ID of TV reference apps-tray application
+ /// </summary>
+ public static string MediaHubAppID
+ {
+ get
+ {
+ return "org.tizen.xamediahub";
+ }
+ }
+
+ /// <summary>
+ /// The Settings App ID
+ /// </summary>
+ public static string SettingsAppID
+ {
+ get
+ {
+ return "org.tizen.settings";
+ }
+ }
+
+ /// <summary>
+ /// Checks application isn't pinnable
+ /// </summary>
+ /// <param name="appID">Application id for checking</param>
+ /// <returns>If the application isn't pinnable return 'true'</returns>
+ public static bool IsNonPinnableApps(string appID)
+ {
+ if (appID == null)
+ {
+ return true;
+ }
+
+ if (appID.CompareTo(TVHomeAppID) == 0 ||
+ appID.CompareTo(TVAppsAppID) == 0 ||
+ appID.CompareTo(MediaHubAppID) == 0 ||
+ appID.CompareTo(SettingsAppID) == 0)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /// <summary>
+ /// Checks application have to be hidden at recently used application
+ /// </summary>
+ /// <param name="appID">Application id for checking</param>
+ /// <returns>If the application have to be hidden, return 'true'</returns>
+ public static bool IsHiddenRecentApp(string appID)
+ {
+ if (appID == null)
+ {
+ return true;
+ }
+
+ if (appID.CompareTo(TVHomeAppID) == 0 ||
+ appID.CompareTo(TVAppsAppID) == 0 ||
+ appID.CompareTo(MediaHubAppID) == 0 ||
+ appID.CompareTo(SettingsAppID) == 0)
+ {
+ return true;
+ }
+
+ return false;
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using LibTVRefCommonPortable.Utils;
+
+
+namespace LibTVRefCommonPortable.Models
+{
+ /// <summary>
+ /// A class provides Recent Shortcut information to the ViewModel
+ /// The Recent Shortcut can be an app which is recently used and
+ /// a content which is recently consumed in the TV.
+ /// </summary>
+ public class RecentShortcutController
+ {
+ /// <summary>
+ /// A method removes a Recent Shortcut.
+ /// </summary>
+ /// <param name="appId">a Recent Shortcut's appId to be removed.</param>
+ public void Remove(string appId)
+ {
+ RecentShortcutStorage.Delete(appId);
+ }
+
+ /// <summary>
+ /// A method removes all Recent Shortcuts.
+ /// </summary>
+ public void RemoveAll()
+ {
+ RecentShortcutStorage.DeleteAll();
+ }
+
+ /// <summary>
+ /// A method provides a Recent Shortcut list.
+ /// </summary>
+ /// <returns>A Recent Shortcut list.</returns>
+ public IEnumerable<RecentShortcutInfo> GetList()
+ {
+ return RecentShortcutStorage.Read();
+ }
+ }
+}
--- /dev/null
+<StyleCopSettings Version="105">
+ <GlobalSettings>
+ <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
+ </GlobalSettings>
+ <Analyzers>
+ <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
+ <Rules>
+ <Rule Name="ElementsMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustHaveSummaryText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="EnumerationItemsMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationMustContainValidXml">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustHaveSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PartialElementDocumentationMustHaveSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustNotHaveDefaultSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="VoidReturnValueMustNotBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParametersMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParametersMustBeDocumentedPartialClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustHaveText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertySummaryDocumentationMustMatchAccessors">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustNotBeCopiedAndPasted">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationTextMustNotBeEmpty">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationTextMustContainWhitespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationMustMeetCharacterPercentage">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationHeadersMustNotContainBlankLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncludedDocumentationXPathDoesNotExist">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncludeNodeDoesNotContainValidFileAndPath">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="InheritDocMustBeUsedWithInheritingClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustBeSpelledCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMustHaveHeader">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustShowCopyright">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustHaveCopyrightText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustContainFileName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderFileNameDocumentationMustMatchFileName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustHaveValidCompanyText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderFileNameDocumentationMustMatchTypeName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
+ <Rules>
+ <Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustBeginWithLowerCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotContainUnderscore">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementMustBeginWithLowerCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotUseHungarianNotation">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="VariableNamesMustNotBePrefixed">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotBeginWithUnderscore">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticReadonlyFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
+ <Rules>
+ <Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleBlankLinesInARow">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentMustBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustBeSeparatedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.MaintainabilityRules">
+ <Rules>
+ <Rule Name="AccessModifierMustBeDeclared">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldsMustBePrivate">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeAnalysisSuppressionMustHaveJustification">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DebugAssertMustProvideMessageText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DebugFailMustProvideMessageText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMayOnlyContainASingleClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMayOnlyContainASingleNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StatementMustNotUseUnnecessaryParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ArithmeticExpressionsMustDeclarePrecedence">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConditionalExpressionsMustDeclarePrecedence">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="RemoveDelegateParenthesisWhenPossible">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="AttributeConstructorMustNotUseUnnecessaryParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="RemoveUnnecessaryCode">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
+ <Rules>
+ <Rule Name="UsingDirectivesMustBePlacedWithinNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustAppearInTheCorrectOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustBeOrderedByAccess">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConstantsMustAppearBeforeFields">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticElementsMustAppearBeforeInstanceElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DeclarationKeywordsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ProtectedMustComeBeforeInternal">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertyAccessorsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="EventAccessorsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NoValueFirstComparison">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingStaticDirectivesMustBePlacedAfterUsingNamespaceDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">
+ <Rules>
+ <Rule Name="CommentsMustContainText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PrefixLocalCallsWithThis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PrefixCallsCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningParenthesisMustBeOnDeclarationLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CommaMustBeOnSameLineAsPreviousParameter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterListMustFollowDeclaration">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterMustFollowComma">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SplitParametersMustStartOnLineAfterDeclaration">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParametersMustBeOnSameLineOrSeparateLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterMustNotSpanMultipleLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClauseMustFollowPreviousClause">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClausesMustBeOnSeparateLinesOrAllOnOneLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClausesSpanningMultipleLinesMustBeginOnOwnLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotPlaceRegionsWithinElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainEmptyStatements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleStatementsOnOneLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="BlockStatementsMustNotContainEmbeddedComments">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="BlockStatementsMustNotContainEmbeddedRegions">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseStringEmptyForEmptyStrings">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseBuiltInTypeAlias">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseShorthandForNullableTypes">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
+ <Rules>
+ <Rule Name="CommasMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SemicolonsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationLinesMustBeginWithSingleSpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustBeginWithSingleSpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PreprocessorKeywordsMustNotBePrecededBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OperatorKeywordMustBeFollowedBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingCurlyBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningGenericBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingGenericBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningAttributeBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingAttributeBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NullableTypeSymbolsMustNotBePrecededBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="MemberAccessSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncrementDecrementSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NegativeSignsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PositiveSignsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ColonsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleWhitespaceInARow">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="TabsMustNotBeUsed">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotSplitNullConditionalOperators">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ </Analyzers>
+</StyleCopSettings>
\ No newline at end of file
--- /dev/null
+/*
+ * 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 System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace LibTVRefCommonPortable.Stubs
+{
+ /// <summary>
+ /// A unit testing stub of IApplicationManagerAPIs.
+ /// </summary>
+ public class ApplicationManagerAPITestStub : IApplicationManagerAPIs
+ {
+ /// <summary>
+ /// A method for removing all recent applications
+ /// </summary>
+ public void DeleteAllRecentApplication()
+ {
+ throw new NotImplementedException();
+ }
+
+ /// <summary>
+ /// A method for removing the specified recent application
+ /// </summary>
+ /// <param name="appId">An application ID</param>
+ public void DeleteRecentApplication(string appId)
+ {
+ throw new NotImplementedException();
+ }
+
+ /// <summary>
+ /// A method provides installed application list.
+ /// </summary>
+ /// <returns>An installed application list</returns>
+ public Task<IEnumerable<InstalledApp>> GetAllInstalledApplication()
+ {
+ return Task.Run(() =>
+ {
+ List<InstalledApp> installedApps = new List<InstalledApp>();
+
+ installedApps.Add(new InstalledApp
+ {
+ Applabel = "app1",
+ AppID = "app1",
+ IconPath = "path/app1",
+ InstalledTime = new DateTime(2017, 05, 02),
+ });
+
+ installedApps.Add(new InstalledApp
+ {
+ Applabel = "app2.removable",
+ AppID = "app2.removable",
+ IconPath = "path/app2",
+ InstalledTime = new DateTime(2017, 05, 02),
+ });
+
+ installedApps.Add(new InstalledApp
+ {
+ Applabel = "invalid.app3.noid",
+ IconPath = "path/app3",
+ InstalledTime = new DateTime(2017, 05, 02),
+ });
+
+ installedApps.Add(new InstalledApp
+ {
+ Applabel = "app4.noicon",
+ AppID = "app4.noicon",
+ InstalledTime = new DateTime(2017, 05, 02),
+ });
+
+ installedApps.Add(new InstalledApp
+ {
+ Applabel = "app5.nolabel",
+ AppID = "app5.nolabel",
+ IconPath = "path/app5",
+ InstalledTime = new DateTime(2017, 05, 02),
+ });
+
+ installedApps.Add(new InstalledApp
+ {
+ Applabel = "invalid.org.tizen.xahome",
+ AppID = "org.tizen.xahome",
+ IconPath = "path/app3",
+ InstalledTime = new DateTime(2017, 05, 02),
+ });
+
+ installedApps.Add(new InstalledApp
+ {
+ Applabel = "invalid.org.tizen.xaapps",
+ AppID = "org.tizen.xaapps",
+ IconPath = "path/app4",
+ InstalledTime = new DateTime(2017, 05, 02),
+ });
+
+ installedApps.Add(new InstalledApp
+ {
+ Applabel = "invalid.org.tizen.xamediahub",
+ AppID = "org.tizen.xamediahub",
+ IconPath = "path/app5",
+ InstalledTime = new DateTime(2017, 05, 02),
+ });
+
+ installedApps.Add(new InstalledApp
+ {
+ Applabel = "invalid.org.tizen.settings",
+ AppID = "org.tizen.settings",
+ IconPath = "path/app6",
+ InstalledTime = new DateTime(2017, 05, 02),
+ });
+
+ return (IEnumerable<InstalledApp>)installedApps;
+ });
+ }
+
+ /// <summary>
+ /// Gets the app ID by the app label
+ /// </summary>
+ /// <param name="appLabel">the app label to get</param>
+ /// <returns>the app ID of the app label</returns>
+ public Task<string> GetAppIDbyAppLabel(string appLabel)
+ {
+ throw new NotImplementedException();
+ }
+
+ /// <summary>
+ /// Checks whether application is removable
+ /// </summary>
+ /// <param name="appID">The app ID to get</param>
+ /// <returns>If the application is removable, true; otherwise, false</returns>
+ public bool GetAppInfoRemovable(string appID)
+ {
+ return appID.Contains("removable");
+ }
+
+ /// <summary>
+ /// A method provides application information which is matched with the given app ID.
+ /// </summary>
+ /// <param name="applicationId">An application ID</param>
+ /// <returns>An installed application information</returns>
+ public InstalledApp GetInstalledApplication(string applicationId)
+ {
+ return new InstalledApp
+ {
+ AppID = applicationId,
+ Applabel = applicationId,
+ IconPath = "path/" + applicationId,
+ InstalledTime = DateUtils.GetRandomDate(),
+ };
+ }
+
+ /// <summary>
+ /// A method provides a recent application list.
+ /// </summary>
+ /// <returns>A Recent application list.</returns>
+ public IEnumerable<RecentApp> GetRecentApplications()
+ {
+ IList<RecentApp> testData = new List<RecentApp>();
+
+ testData.Add(new RecentApp
+ {
+ InstanceID = "recentapp1",
+ InstanceLabel = "recentapp1",
+ AppID = "org.tizen.recentapp1",
+ Applabel = "recentapp1",
+ IconPath = "/test/recentapp1",
+ LaunchedTime = new DateTime(2014, 11, 12),
+ Uri = "uri/recentapp1",
+ ScreenShot = "screenshot/recentapp1",
+ });
+ testData.Add(new RecentApp
+ {
+ InstanceID = "recentapp2.noscreenshot",
+ InstanceLabel = "recentapp2.noscreenshot",
+ AppID = "org.tizen.recentapp2.noscreenshot",
+ Applabel = "recentapp2.noscreenshot",
+ IconPath = "/test/recentapp2",
+ LaunchedTime = new DateTime(2014, 11, 12),
+ Uri = "uri/recentapp2",
+ });
+ testData.Add(new RecentApp
+ {
+ InstanceID = "invalid.recentapp3.nolabel",
+ AppID = "invalid.org.tizen.recentapp3.nolabel",
+ IconPath = "/test/recentapp3",
+ LaunchedTime = new DateTime(2014, 11, 12),
+ Uri = "uri/recentapp3",
+ ScreenShot = "screenshot/recentapp3",
+ });
+ testData.Add(new RecentApp
+ {
+ InstanceID = "invalid.recentapp4.notime",
+ AppID = "invalid.org.tizen.recentapp4.notime",
+ Applabel = "recentapp4.notime",
+ IconPath = "/test/recentapp4",
+ Uri = "uri/recentapp4",
+ ScreenShot = "screenshot/recentapp4",
+ });
+ testData.Add(new RecentApp
+ {
+ InstanceID = "recentapp5",
+ InstanceLabel = "recentapp5",
+ AppID = "org.tizen.recentapp5",
+ Applabel = "recentapp5",
+ IconPath = "/test/recentapp5",
+ LaunchedTime = new DateTime(2017, 05, 02),
+ Uri = "uri/recentapp5",
+ ScreenShot = "screenshot/recentapp5",
+ });
+ testData.Add(new RecentApp
+ {
+ InstanceID = "recentapp6",
+ InstanceLabel = "recentapp6",
+ AppID = "org.tizen.recentapp6",
+ Applabel = "recentapp6",
+ IconPath = "/test/recentapp6",
+ LaunchedTime = new DateTime(2017, 02, 26),
+ Uri = "uri/recentapp6",
+ ScreenShot = "screenshot/recentapp6",
+ });
+ testData.Add(new RecentApp
+ {
+ InstanceID = "recentapp7",
+ InstanceLabel = "recentapp7",
+ AppID = "org.tizen.recentapp7",
+ Applabel = "recentapp7",
+ IconPath = "/test/recentapp7",
+ LaunchedTime = new DateTime(2016, 04, 25),
+ Uri = "uri/recentapp7",
+ ScreenShot = "screenshot/recentapp7",
+ });
+
+ return testData;
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 System;
+using System.IO;
+using System.Text;
+
+namespace LibTVRefCommonPortable.Stubs
+{
+ /// <summary>
+ /// A unit test stub for FileSystemUtils
+ /// </summary>
+ public class FileSystemAPITestStub : IFileSystemAPIs
+ {
+ /// <summary>
+ /// A directory path which should be used for app data storing.
+ /// </summary>
+ public string AppDataStorage
+ {
+ get
+ {
+ return "test_app_data_path/";
+ }
+ }
+
+ /// <summary>
+ /// A directory path which should be used for app resource storing.
+ /// </summary>
+ public string AppResourceStorage
+ {
+ get
+ {
+ return "test_app_resource_path/";
+ }
+ }
+
+ /// <summary>
+ /// A directory path which should be used for sharing between apps.
+ /// </summary>
+ public string PlatformShareStorage
+ {
+ get
+ {
+ return "test_platform_share_path/";
+ }
+ }
+
+ /// <summary>
+ /// A method closes the file.
+ /// </summary>
+ /// <param name="stream">A file descriptor</param>
+ public void CloseFile(Stream stream)
+ {
+ }
+
+ /// <summary>
+ /// A method flushing the stream to write remains.
+ /// </summary>
+ /// <param name="stream">A file descriptor</param>
+ public void Flush(Stream stream)
+ {
+ }
+
+ /// <summary>
+ /// A method checks if a file existence in the file system.
+ /// </summary>
+ /// <param name="filePath">A file path</param>
+ /// <returns>An existence of the file</returns>
+ public bool IsFileExist(string filePath)
+ {
+ return true;
+ }
+
+ /// <summary>
+ /// A method checks if file is read to use.
+ /// </summary>
+ /// <param name="filePath">A file path</param>
+ /// <returns>A status of ready</returns>
+ public bool IsFileReady(string filePath)
+ {
+ return true;
+ }
+
+ /// <summary>
+ /// A method opens a file on the given mode.
+ /// </summary>
+ /// <param name="filePath">A file path</param>
+ /// <param name="mode">An opening mode</param>
+ /// <returns>A file descriptor</returns>
+ public Stream OpenFile(string filePath, UtilFileMode mode)
+ {
+ if (mode != UtilFileMode.Open)
+ {
+ throw new NotImplementedException();
+ }
+
+ if (filePath.Contains("pinned_apps_info"))
+ {
+ StringBuilder pinnedApps = new StringBuilder();
+
+ pinnedApps.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ pinnedApps.Append("<ArrayOfAppShortcutInfo");
+ pinnedApps.Append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
+ pinnedApps.Append(" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.xahome</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.xaapps</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.xamediahub</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.settings</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.TocToc.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.YouTube.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.Toda.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.Butterfly4.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.Butterfly5.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.Butterfly6.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.Butterfly7.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.Butterfly8.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.Butterfly9.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.Butterfly10.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID>org.tizen.example.Butterfly11.Tizen</AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append(" <AppShortcutInfo>");
+ pinnedApps.Append(" <AppID></AppID>");
+ pinnedApps.Append(" </AppShortcutInfo>");
+ pinnedApps.Append("</ArrayOfAppShortcutInfo>");
+
+ MemoryStream stream = new MemoryStream();
+ StreamWriter writer = new StreamWriter(stream);
+ writer.Write(pinnedApps.ToString());
+ writer.Flush();
+ stream.Position = 0;
+ return stream;
+ }
+
+ throw new NotImplementedException();
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 System;
+
+namespace LibTVRefCommonPortable.Stubs
+{
+ /// <summary>
+ /// A unit test stub for FileSystemUtils
+ /// </summary>
+ public class FileWatcherAPITestStub : IFileSystemWatcherAPIs
+ {
+ /// <summary>
+ /// A EventHandler for the file system watcher.
+ /// </summary>
+ public event EventHandler<EventArgs> CustomChanged;
+
+ /// <summary>
+ /// A method starts the file system watcher.
+ /// </summary>
+ /// <param name="path">Target file path</param>
+ /// <param name="fileName">Target file name</param>
+ public void Run(String path, String fileName)
+ {
+ CustomChanged?.Invoke(this, EventArgs.Empty);
+
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 System;
+using System.Collections.Generic;
+
+namespace LibTVRefCommonPortable.Stubs
+{
+ /// <summary>
+ /// A unit testing stub for MediaContentUtils
+ /// </summary>
+ public class MediaContentAPITestStub : IMediaContentAPIs
+ {
+ /// <summary>
+ /// A method for getting recently played media content list
+ /// </summary>
+ /// <param name="limitation">Maximum count of list</param>
+ /// <returns>The recently played media content list</returns>
+ public IEnumerable<RecentlyPlayedMedia> GetRecentlyPlayedMedia(int limitation)
+ {
+ IList<RecentlyPlayedMedia> recentlyPlayed = new List<RecentlyPlayedMedia>();
+
+ recentlyPlayed.Add(new RecentlyPlayedMedia
+ {
+ MediaId = "id/recent_media1",
+ ThumbnailPath = "thumbnail/recent_media1",
+ FilePath = "filepath/recent_media1",
+ DisplayName = "recent_media1",
+ PlayedAt = new DateTime(2017, 05, 22),
+ });
+
+ recentlyPlayed.Add(new RecentlyPlayedMedia
+ {
+ MediaId = "invalid.recent_media2.nofilepath",
+ ThumbnailPath = "invalid.recent_media2.nofilepath",
+ DisplayName = "invalid.recent_media2.nofilepath",
+ PlayedAt = new DateTime(2017, 2, 26),
+ });
+
+ recentlyPlayed.Add(new RecentlyPlayedMedia
+ {
+ MediaId = "id/recent_media3.nothumbnail",
+ FilePath = "filepath/recent_media3.nothumbnail",
+ DisplayName = "recent_media3.nothumbnail",
+ PlayedAt = new DateTime(2016, 4, 25),
+ });
+
+ recentlyPlayed.Add(new RecentlyPlayedMedia
+ {
+ MediaId = "id/recent_media4",
+ ThumbnailPath = "thumbnail/recent_media4",
+ FilePath = "filepath/recent_media4",
+ DisplayName = "recent_media4",
+ PlayedAt = new DateTime(2015, 12, 7),
+ });
+
+ recentlyPlayed.Add(new RecentlyPlayedMedia
+ {
+ MediaId = "id/recent_media5",
+ ThumbnailPath = "thumbnail/recent_media5",
+ FilePath = "filepath/recent_media5",
+ DisplayName = "recent_media5",
+ PlayedAt = new DateTime(2015, 10, 1),
+ });
+
+ recentlyPlayed.Add(new RecentlyPlayedMedia
+ {
+ MediaId = "id/recent_media6",
+ ThumbnailPath = "thumbnail/recent_media6",
+ FilePath = "filepath/recent_media6",
+ DisplayName = "recent_media6",
+ PlayedAt = new DateTime(2015, 3, 3),
+ });
+
+ recentlyPlayed.Add(new RecentlyPlayedMedia
+ {
+ MediaId = "id/recent_media7",
+ ThumbnailPath = "thumbnail/recent_media7",
+ FilePath = "filepath/recent_media7",
+ DisplayName = "recent_media8",
+ PlayedAt = new DateTime(2014, 11, 17),
+ });
+
+ return recentlyPlayed;
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 Xamarin.Forms;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// A class provides App Control utility APIs.
+ /// </summary>
+ public sealed class AppControlUtils
+ {
+ /// <summary>
+ /// A method makes the app to be launched.
+ /// </summary>
+ /// <param name="appID">An application ID of the targeted application.</param>
+ /// <param name="extraData">An extra data for App Control invoking.</param>
+ /// <param name="fileUri">A file Uri to be opened.</param>
+ public static void SendLaunchRequest(string appID, IDictionary<string, string> extraData = null, string fileUri = null)
+ {
+ if (DependencyService.Get<IAppControl>() == null)
+ {
+ return;
+ }
+
+ DependencyService.Get<IAppControl>().SendLaunchRequest(appID, extraData, fileUri);
+ }
+
+ /// <summary>
+ /// A method sends a add pin request App Control to TVApps app.
+ /// </summary>
+ public static void SendAddAppRequestToApps()
+ {
+ if (DependencyService.Get<IAppControl>() == null)
+ {
+ return;
+ }
+
+ DependencyService.Get<IAppControl>().SendAddAppRequestToApps();
+ }
+
+ /// <summary>
+ /// A method sends a pin added notification App control to TVHome app.
+ /// </summary>
+ /// <param name="addedAddID">An app ID of newly added.</param>
+ public static void SendAppAddedNotificationToHome(string addedAddID)
+ {
+ if (DependencyService.Get<IAppControl>() == null)
+ {
+ return;
+ }
+
+ DependencyService.Get<IAppControl>().SendAppAddedNotificationToHome(addedAddID);
+ }
+
+ /// <summary>
+ /// A method terminates caller application.
+ /// </summary>
+ public static void SelfTerminate()
+ {
+ if (DependencyService.Get<IAppLifeControl>() == null)
+ {
+ return;
+ }
+
+ DependencyService.Get<IAppLifeControl>().SelfTerminate();
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Collections.Generic;
+using System.Xml.Serialization;
+using System.IO;
+using LibTVRefCommonPortable.DataModels;
+using System.Threading.Tasks;
+using System.Diagnostics;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// A class manages App Shortcuts by using subsystem.
+ /// </summary>
+ public class AppShortcutStorage
+ {
+ /// <summary>
+ /// A storage path.
+ /// </summary>
+ private static String StoragePath;
+
+ /// <summary>
+ /// A file system watcher which checks if the targeted storage is changed.
+ /// </summary>
+ private static IFileSystemWatcherAPIs fileSystemWatcher = FileSystemUtils.Instance.FileSysteamWatcherInstance;
+
+ /// <summary>
+ /// An instance of AppShortcutStorage.
+ /// </summary>
+ private static AppShortcutStorage instance = new AppShortcutStorage();
+
+ /// <summary>
+ /// An instance of AppShortcutStorage.
+ /// </summary>
+ public static AppShortcutStorage Instance
+ {
+ get { return instance; }
+ }
+
+ /// <summary>
+ /// A constructor of AppShortcutStorage.
+ /// </summary>
+ private AppShortcutStorage()
+ {
+ StoragePath = FileSystemUtils.Instance.PlatformShareStorage + "pinned_apps_info.xml";
+
+ CheckStorage();
+
+ fileSystemWatcher.Run(FileSystemUtils.Instance.PlatformShareStorage, "pinned_apps_info.xml");
+ }
+
+ /// <summary>
+ /// Check if the storage is exist
+ /// </summary>
+ private static void CheckStorage()
+ {
+ if (FileSystemUtils.Instance.IsFileExist(StoragePath) == false)
+ {
+ DebuggingUtils.Err("Set Default Pinned Apps" + StoragePath);
+ List<AppShortcutInfo> result = new List<AppShortcutInfo>();
+ Write(result);
+ }
+ }
+
+ /// <summary>
+ /// A method provides an app Shortcut list.
+ /// </summary>
+ /// <returns>An app Shortcut list.</returns>
+ public static async Task<IEnumerable<AppShortcutInfo>> Read()
+ {
+ CheckStorage();
+
+ for (int i = 0; i <= 6; i++)
+ {
+ if (FileSystemUtils.Instance.IsFileReady(StoragePath))
+ {
+ break;
+ }
+ else if (i == 6)
+ {
+ DebuggingUtils.Err("Can't open storage" + StoragePath);
+ return new List<AppShortcutInfo>();
+ }
+
+ await Task.Delay(100);
+ DebuggingUtils.Dbg("[" + i + "] Waiting for Writing" + StoragePath);
+ }
+
+ using (Stream fileStream = FileSystemUtils.Instance.OpenFile(StoragePath, UtilFileMode.Open))
+ {
+ Debug.Assert(fileStream != null);
+
+ XmlSerializer serializer = new XmlSerializer(typeof(List<AppShortcutInfo>));
+ StreamReader streamReader = new StreamReader(fileStream);
+ List<AppShortcutInfo> list = (List<AppShortcutInfo>)serializer.Deserialize(streamReader);
+
+ return list;
+ }
+ }
+
+ /// <summary>
+ /// A method updates App Shortcuts of the storage
+ /// </summary>
+ /// <param name="pinnedAppInfo">An app Shortcuts that pinned by a user.</param>
+ /// <returns>A status of storage update.</returns>
+ public static bool Write(IEnumerable<AppShortcutInfo> pinnedAppInfo)
+ {
+ using (Stream fileStream = FileSystemUtils.Instance.OpenFile(StoragePath, UtilFileMode.Create))
+ {
+ Debug.Assert(fileStream != null);
+
+ XmlSerializer serializer = new XmlSerializer(typeof(List<AppShortcutInfo>));
+ StreamWriter streamWriter = new StreamWriter(fileStream);
+ serializer.Serialize(streamWriter, pinnedAppInfo);
+ streamWriter.Flush();
+ }
+
+ return true;
+ }
+
+ /// <summary>
+ /// A method sets an event listener for the storage watcher
+ /// </summary>
+ /// <param name="eventListener">An event handler for the storage event </param>
+ public void AddStorageChangedListener(EventHandler<EventArgs> eventListener)
+ {
+ fileSystemWatcher.CustomChanged += eventListener;
+ }
+ }
+}
--- /dev/null
+/*
+ * 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.Stubs;
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Xamarin.Forms;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// A class provides application controlling functions
+ /// </summary>
+ public sealed class ApplicationManagerUtils
+ {
+ /// <summary>
+ /// A instance of platform specific application manager port.
+ /// </summary>
+ private static IApplicationManagerAPIs applicationManagerAPIs;
+
+ /// <summary>
+ /// A instance of ApplicationManagerUtils
+ /// </summary>
+ private static readonly ApplicationManagerUtils instance = new ApplicationManagerUtils();
+
+ /// <summary>
+ /// A getter of ApplicationManagerUtils instance
+ /// </summary>
+ public static ApplicationManagerUtils Instance
+ {
+ get
+ {
+ return instance;
+ }
+ }
+
+ /// <summary>
+ /// A constructor
+ /// </summary>
+ private ApplicationManagerUtils()
+ {
+ applicationManagerAPIs = new ApplicationManagerAPITestStub();
+
+ try
+ {
+ if (DependencyService.Get<IApplicationManagerAPIs>() != null)
+ {
+ applicationManagerAPIs = DependencyService.Get<IApplicationManagerAPIs>();
+ }
+ }
+ catch (InvalidOperationException e)
+ {
+ DebuggingUtils.Err(e.Message);
+ }
+ }
+
+ /// <summary>
+ /// A method for removing all recent applications
+ /// </summary>
+ public void DeleteAllRecentApplication()
+ {
+ applicationManagerAPIs.DeleteAllRecentApplication();
+ }
+
+ /// <summary>
+ /// A method for removing the specified recent application
+ /// </summary>
+ /// <param name="appId">An application ID</param>
+ public void DeleteRecentApplication(string appId)
+ {
+ applicationManagerAPIs.DeleteRecentApplication(appId);
+ }
+
+
+ /// <summary>
+ /// Gets the information of the recent applications
+ /// </summary>
+ /// <returns>The list of the recent applications</returns>
+ public IEnumerable<RecentApp> GetRecentApplications()
+ {
+ return applicationManagerAPIs.GetRecentApplications();
+ }
+
+ /// <summary>
+ /// Gets the information of the specified application with the app ID
+ /// </summary>
+ /// <param name="appID">The app Id to get</param>
+ /// <returns>The information of the installed application</returns>
+ public InstalledApp GetInstalledApplication(string appID)
+ {
+ return applicationManagerAPIs.GetInstalledApplication(appID);
+ }
+
+ /// <summary>
+ /// Gets the information of the installed applications asynchronously
+ /// </summary>
+ /// <returns>The list of the installed applications</returns>
+ public Task<IEnumerable<InstalledApp>> GetAllInstalledApplication()
+ {
+ return applicationManagerAPIs.GetAllInstalledApplication();
+ }
+
+ /// <summary>
+ /// Checks whether application is removable
+ /// </summary>
+ /// <param name="appID">The app ID to get</param>
+ /// <returns>If the application is removable, true; otherwise, false</returns>
+ public bool GetAppInfoRemovable(string appID)
+ {
+ return applicationManagerAPIs.GetAppInfoRemovable(appID);
+ }
+
+ /// <summary>
+ /// Gets the app ID by the app label
+ /// </summary>
+ /// <param name="appLabel">the app label to get</param>
+ /// <returns>the app ID of the app label</returns>
+ public Task<string> GetAppIDbyAppLabel(string appLabel)
+ {
+ return applicationManagerAPIs.GetAppIDbyAppLabel(appLabel);
+ }
+ }
+}
--- /dev/null
+/*
+ * 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.Utils
+{
+ /// <summary>
+ /// A class provides Date, Time related functions
+ /// </summary>
+ public class DateUtils
+ {
+ /// <summary>
+ /// A random seed
+ /// </summary>
+ private static Random seed = new Random();
+
+ /// <summary>
+ /// A method provides a random date.
+ /// </summary>
+ /// <returns>A date</returns>
+ public static DateTime GetRandomDate()
+ {
+ DateTime baseDate = DateTime.Now.AddYears(-10);
+ return baseDate.AddDays(seed.Next((DateTime.Now - baseDate).Days));
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Runtime.CompilerServices;
+using Xamarin.Forms;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// A debugging utility class.
+ /// </summary>
+ public sealed class DebuggingUtils
+ {
+ /// <summary>
+ /// A debugging API interface
+ /// </summary>
+ private static IDebuggingAPIs ism;
+
+ /// <summary>
+ /// An instance of DebuggingUtils
+ /// </summary>
+ private static readonly DebuggingUtils instance = new DebuggingUtils();
+
+ /// <summary>
+ /// A method provides instance of DebuggingUtils. </summary>
+ public static DebuggingUtils Instance
+ {
+ get { return instance; }
+ }
+
+ /// <summary>
+ /// Default implementation of IDebuggingAPIs interface .
+ /// This is required for the unit testing of the Calculator application.
+ /// </summary>
+ private class DefaultSM : IDebuggingAPIs
+ {
+ /// <summary>
+ /// A method displays an error log.
+ /// </summary>
+ /// <param name="message"> An error message.</param>
+ /// <param name="file"> A file name.</param>
+ /// <param name="func"> A function name.</param>
+ /// <param name="line"> A line number.</param>
+ public void Dbg(string message, String file, String func, Int32 line)
+ {
+ }
+
+ /// <summary>
+ /// A method displays a dialog with a given message.
+ /// </summary>
+ /// <param name="message"> A debugging message.</param>
+ /// <param name="file"> A file name.</param>
+ /// <param name="func"> A function name.</param>
+ /// <param name="line"> A line number.</param>
+ public void Err(string message, String file, String func, Int32 line)
+ {
+ }
+
+ /// <summary>
+ /// A method displays a debugging log.
+ /// </summary>
+ /// <param name="message"> A debugging message.</param>
+ public void Popup(string message)
+ {
+ }
+ }
+
+ /// <summary>
+ /// DebuggingUtils constructor which set interface instance.
+ /// </summary>
+ private DebuggingUtils()
+ {
+ ism = new DefaultSM();
+
+ try
+ {
+ if (DependencyService.Get<IDebuggingAPIs>() != null)
+ {
+ ism = DependencyService.Get<IDebuggingAPIs>();
+ }
+ }
+ catch (InvalidOperationException e)
+ {
+ Err(e.Message);
+ }
+ }
+
+ /// <summary>
+ /// A method displays a debugging message
+ /// </summary>
+ /// <param name="message"> A list of command line arguments.</param>
+ /// <param name="file"> A file name.</param>
+ /// <param name="func"> A function name.</param>
+ /// <param name="line"> A line number.</param>
+ public static void Dbg(string message, [CallerFilePath] System.String file = "", [CallerMemberName] System.String func = "", [CallerLineNumber] System.Int32 line = 0)
+ {
+ ism.Dbg(message, file, func, line);
+ }
+
+ /// <summary>
+ /// A method displays an error message
+ /// </summary>
+ /// <param name="message"> A list of command line arguments.</param>
+ /// <param name="file"> A file name.</param>
+ /// <param name="func"> A function name.</param>
+ /// <param name="line"> A line number.</param>
+ public static void Err(string message, [CallerFilePath] System.String file = "", [CallerMemberName] System.String func = "", [CallerLineNumber] System.Int32 line = 0)
+ {
+ ism.Err(message, file, func, line);
+ }
+
+ /// <summary>
+ /// A method displays a pop up message
+ /// </summary>
+ /// <param name="message"> A list of command line arguments.</param>
+ public static void Popup(string message)
+ {
+ ism.Popup(message);
+ }
+ }
+}
--- /dev/null
+/*
+ * 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.Stubs;
+using System;
+using System.IO;
+using Xamarin.Forms;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// A class for file system control function.
+ /// </summary>
+ class FileSystemUtils
+ {
+ /// <summary>
+ /// A instance of file system port layer
+ /// </summary>
+ private static IFileSystemAPIs fileSystemAPIs;
+
+ /// <summary>
+ /// A instance of file system watcher port layer
+ /// </summary>
+ private static IFileSystemWatcherAPIs fileSystemWatcherAPIs;
+
+ /// <summary>
+ /// A instance of FileSystemUtils
+ /// </summary>
+ private static readonly FileSystemUtils instance = new FileSystemUtils();
+
+ /// <summary>
+ /// A property of FileSystemUtils instance
+ /// </summary>
+ public static FileSystemUtils Instance
+ {
+ get
+ {
+ return instance;
+ }
+ }
+
+ /// <summary>
+ /// A property of file system watcher instance
+ /// </summary>
+ public IFileSystemWatcherAPIs FileSysteamWatcherInstance
+ {
+ get
+ {
+ return fileSystemWatcherAPIs;
+ }
+ }
+
+ /// <summary>
+ /// A constructor
+ /// </summary>
+ private FileSystemUtils()
+ {
+ fileSystemAPIs = new FileSystemAPITestStub();
+ fileSystemWatcherAPIs = new FileWatcherAPITestStub();
+
+ try
+ {
+ if (DependencyService.Get<IFileSystemAPIs>() != null)
+ {
+ fileSystemAPIs = DependencyService.Get<IFileSystemAPIs>();
+ }
+
+ if (DependencyService.Get<IFileSystemWatcherAPIs>() != null)
+ {
+ fileSystemWatcherAPIs = DependencyService.Get<IFileSystemWatcherAPIs>();
+ }
+ }
+ catch (InvalidOperationException e)
+ {
+ DebuggingUtils.Err(e.Message);
+ }
+ }
+
+ /// <summary>
+ /// A directory path which should be used for app data storing.
+ /// </summary>
+ public string AppDataStorage
+ {
+ get
+ {
+ return fileSystemAPIs.AppDataStorage;
+ }
+ }
+
+ /// <summary>
+ /// A directory path which should be used for app resource storing.
+ /// </summary>
+ public string AppResourceStorage
+ {
+ get
+ {
+ return fileSystemAPIs.AppResourceStorage;
+ }
+ }
+
+ /// <summary>
+ /// A directory path which should be used for sharing between apps.
+ /// </summary>
+ public string PlatformShareStorage
+ {
+ get
+ {
+ return fileSystemAPIs.PlatformShareStorage;
+ }
+ }
+
+ /// <summary>
+ /// A method opens a file on the given mode.
+ /// </summary>
+ /// <param name="filePath">A file path</param>
+ /// <param name="mode">An opening mode</param>
+ /// <returns>A file descriptor</returns>
+ public Stream OpenFile(string filePath, UtilFileMode mode)
+ {
+ return fileSystemAPIs.OpenFile(filePath, mode);
+ }
+
+ /// <summary>
+ /// A method flushing the stream to write remains.
+ /// </summary>
+ /// <param name="stream">A file descriptor</param>
+ public void Flush(Stream stream)
+ {
+ fileSystemAPIs.Flush(stream);
+ }
+
+ /// <summary>
+ /// A method closes the file.
+ /// </summary>
+ /// <param name="stream">A file descriptor</param>
+ public void CloseFile(Stream stream)
+ {
+ fileSystemAPIs.CloseFile(stream);
+ }
+
+ /// <summary>
+ /// A method checks if a file existence in the file system.
+ /// </summary>
+ /// <param name="filePath">A file path</param>
+ /// <returns>An existence of the file</returns>
+ public bool IsFileExist(String filePath)
+ {
+ return fileSystemAPIs.IsFileExist(filePath);
+ }
+
+ /// <summary>
+ /// A method checks if file is read to use.
+ /// </summary>
+ /// <param name="filePath">A file path</param>
+ /// <returns>A status of ready</returns>
+ public bool IsFileReady(String filePath)
+ {
+ return fileSystemAPIs.IsFileReady(filePath);
+ }
+
+
+ }
+}
--- /dev/null
+/*
+ * 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;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// An interface for App Control feature
+ /// </summary>
+ public interface IAppControl
+ {
+ /// <summary>
+ /// Sends the launch request
+ /// </summary>
+ /// <param name="appId"> The app ID to explicitly launch</param>
+ /// <param name="extraData">The extra data for the app control</param>
+ /// <param name="fileUri">The file uri to be opened</param>
+ void SendLaunchRequest(string appId, IDictionary<string, string> extraData, string fileUri);
+
+ /// <summary>
+ /// A method sends add pin request App Control to TVApps app.
+ /// </summary>
+ void SendAddAppRequestToApps();
+
+ /// <summary>
+ /// A method sends a pin added notification App control to TVHome app.
+ /// </summary>
+ /// <param name="addedAddID">An app ID of newly added.</param>
+ void SendAppAddedNotificationToHome(string addedAddID);
+ }
+}
--- /dev/null
+/*
+ * 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>
+ /// An interface for app life management.
+ /// </summary>
+ public interface IAppLifeControl
+ {
+ /// <summary>
+ /// A method terminates the caller app.
+ /// </summary>
+ void SelfTerminate();
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// A class to store RecentApp information.
+ /// </summary>
+ public class RecentApp
+ {
+ /// <summary>
+ /// A Recent instance ID
+ /// </summary>
+ public String InstanceID;
+
+ /// <summary>
+ /// A Recent instance label
+ /// </summary>
+ public String InstanceLabel;
+
+ /// <summary>
+ /// An app ID
+ /// </summary>
+ public String AppID;
+
+ /// <summary>
+ /// An app label
+ /// </summary>
+ public String Applabel;
+
+ /// <summary>
+ /// An app icon path
+ /// </summary>
+ public String IconPath;
+
+ /// <summary>
+ /// A last launched date
+ /// </summary>
+ public DateTime LaunchedTime;
+
+ /// <summary>
+ /// A URI of accessible content if the Recent is a content.
+ /// </summary>
+ public String Uri;
+
+ /// <summary>
+ /// A File Path of screenshot of the recent app or recent content.
+ /// </summary>
+ public String ScreenShot;
+ }
+
+ /// <summary>
+ /// A class to store installed app information.
+ /// </summary>
+ public class InstalledApp
+ {
+ /// <summary>
+ /// An app ID
+ /// </summary>
+ public String AppID;
+
+ /// <summary>
+ /// An app label
+ /// </summary>
+ public String Applabel;
+
+ /// <summary>
+ /// An app icon path
+ /// </summary>
+ public String IconPath;
+
+ /// <summary>
+ /// A installed date
+ /// </summary>
+ public DateTime InstalledTime;
+ }
+
+ /// <summary>
+ /// An interface for Application Manager feature
+ /// </summary>
+ public interface IApplicationManagerAPIs
+ {
+ /// <summary>
+ /// A method provides installed application list.
+ /// </summary>
+ /// <returns>An installed application list</returns>
+ Task<IEnumerable<InstalledApp>> GetAllInstalledApplication();
+
+ /// <summary>
+ /// A method provides a recent application list.
+ /// </summary>
+ /// <returns>A Recent application list.</returns>
+ IEnumerable<RecentApp> GetRecentApplications();
+
+ /// <summary>
+ /// A method provides application information which is matched with the given app ID.
+ /// </summary>
+ /// <param name="applicationId">An application ID</param>
+ /// <returns>An installed application information</returns>
+ InstalledApp GetInstalledApplication(string applicationId);
+
+ /// <summary>
+ /// A method for removing all recent applications
+ /// </summary>
+ void DeleteAllRecentApplication();
+
+ /// <summary>
+ /// A method for removing the specified recent application
+ /// </summary>
+ /// <param name="appId">An application ID</param>
+ void DeleteRecentApplication(string appId);
+
+ /// <summary>
+ /// Checks whether application is removable
+ /// </summary>
+ /// <param name="appID">The app ID to get</param>
+ /// <returns>If the application is removable, true; otherwise, false</returns>
+ bool GetAppInfoRemovable(string appID);
+
+ /// <summary>
+ /// Gets the app ID by the app label
+ /// </summary>
+ /// <param name="appLabel">the app label to get</param>
+ /// <returns>the app ID of the app label</returns>
+ Task<string> GetAppIDbyAppLabel(string appLabel);
+ }
+}
--- /dev/null
+/*
+ * 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.Utils
+{
+ /// <summary>
+ /// An interface contains debugging methods which are using platform subsystems.
+ /// </summary>
+ /// <remarks>
+ /// Implementing this class should be occurred in platform project.
+ /// Also the implementation should be registered to the DependencyService in an app initialization.
+ /// Please refer to Xamarin Dependency Service
+ /// https://developer.xamarin.com/guides/xamarin-forms/dependency-service/introduction/
+ /// </remarks>
+ public interface IDebuggingAPIs
+ {
+ /// <summary>
+ /// A method displays a debugging log. </summary>
+ /// <param name="message"> A debugging message.</param>
+ void Popup(string message);
+
+ /// <summary>
+ /// A method displays an error log. </summary>
+ /// <param name="message"> An error message.</param>
+ /// <param name="file"> A file name.</param>
+ /// <param name="func"> A function name.</param>
+ /// <param name="line"> A line number.</param>
+ void Dbg(string message, String file, String func, Int32 line);
+
+ /// <summary>
+ /// A method displays a dialog with a given message. </summary>
+ /// <param name="message"> A debugging message.</param>
+ /// <param name="file"> A file name.</param>
+ /// <param name="func"> A function name.</param>
+ /// <param name="line"> A line number.</param>
+ void Err(string message, String file, String func, Int32 line);
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.IO;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// An enumeration for the file open mode.
+ /// </summary>
+ public enum UtilFileMode
+ {
+ CreateNew = 1,
+ Create = 2,
+ Open = 3,
+ OpenOrCreate = 4,
+ Truncate = 5,
+ Append = 6
+ }
+
+ /// <summary>
+ /// An interface for the file operations
+ /// </summary>
+ public interface IFileSystemAPIs
+ {
+ /// <summary>
+ /// A directory path which should be used for app data storing.
+ /// </summary>
+ string AppDataStorage
+ {
+ get;
+ }
+
+ /// <summary>
+ /// A directory path which should be used for app resource storing.
+ /// </summary>
+ string AppResourceStorage
+ {
+ get;
+ }
+
+ /// <summary>
+ /// A directory path which should be used for sharing between apps.
+ /// </summary>
+ string PlatformShareStorage
+ {
+ get;
+ }
+
+ /// <summary>
+ /// A method opens a file on the given mode.
+ /// </summary>
+ /// <param name="filePath">A file path</param>
+ /// <param name="mode">An opening mode</param>
+ /// <returns>A file descriptor</returns>
+ Stream OpenFile(string filePath, UtilFileMode mode);
+
+ /// <summary>
+ /// A method flushing the stream to write remains.
+ /// </summary>
+ /// <param name="stream">A file descriptor</param>
+ void Flush(Stream stream);
+
+ /// <summary>
+ /// A method closes the file.
+ /// </summary>
+ /// <param name="stream">A file descriptor</param>
+ void CloseFile(Stream stream);
+
+ /// <summary>
+ /// A method checks if a file existence in the file system.
+ /// </summary>
+ /// <param name="filePath">A file path</param>
+ /// <returns>An existence of the file</returns>
+ bool IsFileExist(String filePath);
+
+ /// <summary>
+ /// A method checks if file is read to use.
+ /// </summary>
+ /// <param name="filePath">A file path</param>
+ /// <returns>A status of ready</returns>
+ bool IsFileReady(String filePath);
+ }
+}
--- /dev/null
+/*
+ * 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.Utils
+{
+ /// <summary>
+ /// An interface for the file system watcher.
+ /// </summary>
+ public interface IFileSystemWatcherAPIs
+ {
+ /// <summary>
+ /// A EventHandler for the file system watcher.
+ /// </summary>
+ event EventHandler<EventArgs> CustomChanged;
+
+ /// <summary>
+ /// A method starts the file system watcher.
+ /// </summary>
+ /// <param name="path">Target file path</param>
+ /// <param name="fileName">Target file name</param>
+ void Run(String path, String fileName);
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Collections.Generic;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// An information of recently played media content
+ /// </summary>
+ public struct RecentlyPlayedMedia
+ {
+ /// <summary>
+ /// An ID of media content
+ /// </summary>
+ public string MediaId;
+
+ /// <summary>
+ /// A path of media content thumbnail
+ /// </summary>
+ public string ThumbnailPath;
+
+ /// <summary>
+ /// A path of media content
+ /// </summary>
+ public string FilePath;
+
+ /// <summary>
+ /// A title of media content
+ /// </summary>
+ public string DisplayName;
+
+ /// <summary>
+ /// Last played time of media content
+ /// </summary>
+ public DateTime PlayedAt;
+ }
+
+ /// <summary>
+ /// An interface for getting recently played media contents.
+ /// </summary>
+ public interface IMediaContentAPIs
+ {
+ /// <summary>
+ /// A method for getting recently played media content list
+ /// </summary>
+ /// <param name="limitation">Maximum count of list</param>
+ /// <returns>The recently played media content list</returns>
+ IEnumerable<RecentlyPlayedMedia> GetRecentlyPlayedMedia(int limitation);
+ }
+}
--- /dev/null
+/*
+ * 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;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// An interface for package manager subsystem.
+ /// </summary>
+ public interface IPackageManager
+ {
+ /// <summary>
+ /// A method provides installed package list.
+ /// </summary>
+ /// <returns>A package list</returns>
+ Dictionary<string, string[]> GetPackageList();
+
+ /// <summary>
+ /// A method provides a detail information (TBD)
+ /// </summary>
+ /// <param name="pkgID">A package ID</param>
+ /// <returns>A package label</returns>
+ string GetPackageLabel(string pkgID);
+
+ /// <summary>
+ /// Gets the package ID by the app ID
+ /// </summary>
+ /// <param name="appID">The app ID to get</param>
+ /// <returns>The package ID that contains given app ID</returns>
+ string GetPackageIDByAppID(string appID);
+
+ /// <summary>
+ /// A method removes the package.
+ /// </summary>
+ /// <param name="pkgID">A package ID</param>
+ /// <returns>A status of uninstall</returns>
+ bool UninstallPackage(string pkgID);
+
+ /// <summary>
+ /// A method remove the package by using an app ID.
+ /// </summary>
+ /// <param name="appID">an app ID</param>
+ /// <returns>A status of uninstall</returns>
+ bool UninstallPackageByAppID(string appID);
+
+ /// <summary>
+ /// Gets applications list by the package ID
+ /// </summary>
+ /// <param name="pkgID">The package ID to get applications</param>
+ /// <returns>The list of applications</returns>
+ List<string> GetApplicationsByPkgID(string pkgID);
+ }
+}
--- /dev/null
+/*
+ * 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>
+ /// An interface for the platform notification.
+ /// </summary>
+ public interface IPlatformNotification
+ {
+ /// <summary>
+ /// A method will be called when the Home remote control key is pressed.
+ /// </summary>
+ void OnHomeKeyPressed();
+
+ /// <summary>
+ /// A method will be called when the Menu remote control key is pressed.
+ /// </summary>
+ void OnMenuKeyPressed();
+
+ /// <summary>
+ /// A method will be called if an app is installed.
+ /// </summary>
+ /// <param name="pkgID">A package ID of newly installed.</param>
+ void OnAppInstalled(string pkgID);
+
+ /// <summary>
+ /// A method will be called if an app is uninstalled.
+ /// </summary>
+ /// <param name="pkgID">A package ID of uninstalled.</param>
+ void OnAppUninstalled(string pkgID);
+
+ /// <summary>
+ /// A method will be called if the app gets a App Control request for pinning a app.
+ /// </summary>
+ void OnPinAppRequestReceived();
+
+ /// <summary>
+ /// A method will be called if the app gets an app pinned notification App Control request.
+ /// </summary>
+ /// <param name="appID">A pinned app ID</param>
+ void OnAppPinnedNotificationReceived(string appID);
+
+ /// <summary>
+ /// A method will be called when the Navigation remote control key is pressed.
+ /// </summary>
+ /// <param name="keyName">A pressed remote control key name</param>
+ void OnNavigationKeyPressed(string keyName);
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ public enum AppState
+ {
+ HomeMainPanelRecentFocused,
+ HomeMainPanelAppsFocused,
+ HomeMainPanelSettingsFocused,
+ HomeSubPanelRecentFocused,
+ HomeSubPanelAppsFocused,
+ HomeSubPanelSettingsFocused,
+ HomeShowOptions,
+ HomeMove,
+ HomeIconified,
+ }
+
+ public interface IStatePublisher
+ {
+ AppState CurrentState
+ {
+ get;
+ set;
+ }
+
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ public interface IStateSubscriber
+ {
+ void OnStateChanged(AppState state);
+ }
+}
--- /dev/null
+/*
+ * 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>
+ /// An interface for getting system setting informations.
+ /// </summary>
+ public interface ISystemSettings
+ {
+ /// <summary>
+ /// A method for getting system model name.
+ /// </summary>
+ /// <param name="modelName">The system model name</param>
+ /// <returns>The result whether getting the modelName is done</returns>
+ bool GetSystemModelName(out string modelName);
+ }
+}
--- /dev/null
+/*
+ * 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.Models;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// An interface for the TVHomeImpl class
+ /// The Models' instances in the TVHomeImpl class,
+ /// so to use the Models from other files, it should access the instance of the TVHomeImpl.
+ /// To reduce dependency between the TVHome and any other file,
+ /// the instance of the TVHomeImpl will be provided as a ITVHome interface.
+ /// </summary>
+ public interface ITVHome
+ {
+ /// <summary>
+ /// An instance of the AppShortcutController
+ /// </summary>
+ /// <see cref="AppShortcutController"/>
+ AppShortcutController AppShortcutControllerInstance
+ {
+ get;
+ }
+
+ /// <summary>
+ /// An instance of the RecentShortcutController
+ /// </summary>
+ /// <see cref="RecentShortcutController"/>
+ RecentShortcutController RecentShortcutControllerInstance
+ {
+ get;
+ }
+ }
+}
--- /dev/null
+/*
+ * 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>
+ /// An interface for the Window management.
+ /// </summary>
+ public interface IWindowAPIs
+ {
+ /// <summary>
+ /// A method minimizes the app's window.
+ /// </summary>
+ /// <param name="iconified">A minimize status</param>
+ void SetIconified(bool iconified);
+
+ /// <summary>
+ /// A method provides a minimized status of the App.
+ /// </summary>
+ /// <returns>A status of minimized of app.</returns>
+ bool GetIconified();
+ }
+}
--- /dev/null
+/*
+ * 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.Stubs;
+using System;
+using System.Collections.Generic;
+using Xamarin.Forms;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// A class provides media contents and related functions.
+ /// </summary>
+ public class MediaContentUtils
+ {
+ /// <summary>
+ /// A instance of IMediaContentAPIs port.
+ /// </summary>
+ private static IMediaContentAPIs mediaContentAPIs;
+
+ /// <summary>
+ /// A instance of MediaContentUtils
+ /// </summary>
+ private static readonly MediaContentUtils instance = new MediaContentUtils();
+
+ /// <summary>
+ /// A property of MediaContentUtils instance.
+ /// </summary>
+ public static MediaContentUtils Instance
+ {
+ get
+ {
+ return instance;
+ }
+ }
+
+ /// <summary>
+ /// A Constructor
+ /// </summary>
+ private MediaContentUtils()
+ {
+ mediaContentAPIs = new MediaContentAPITestStub();
+
+ try
+ {
+ if (DependencyService.Get<IMediaContentAPIs>() != null)
+ {
+ mediaContentAPIs = DependencyService.Get<IMediaContentAPIs>();
+ }
+ }
+ catch (InvalidOperationException e)
+ {
+ DebuggingUtils.Err(e.Message);
+ }
+ }
+
+ /// <summary>
+ /// A method provides media playing history.
+ /// </summary>
+ /// <param name="limitation">A number of getting media playing history</param>
+ /// <returns>A list of played medias.</returns>
+ public IEnumerable<RecentlyPlayedMedia> GetRecentlyPlayedMedia(int limitation)
+ {
+ return mediaContentAPIs.GetRecentlyPlayedMedia(limitation);
+ }
+
+ }
+}
--- /dev/null
+/*
+ * 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 Xamarin.Forms;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// A class for package manager function.
+ /// </summary>
+ public sealed class PackageManagerUtils
+ {
+ /// <summary>
+ /// A method provides installed package list.
+ /// </summary>
+ /// <returns>A package list</returns>
+ public static Dictionary<string, string[]> GetPackageList()
+ {
+ if (DependencyService.Get<IPackageManager>() == null)
+ {
+ return new Dictionary<string, string[]>();
+ }
+
+ return DependencyService.Get<IPackageManager>().GetPackageList();
+ }
+
+ /// <summary>
+ /// A method provides a detail information (TBD)
+ /// </summary>
+ /// <param name="pkgID">A package ID</param>
+ /// <returns>A package label</returns>
+ public static string GetPackageLabel(string pkgID)
+ {
+ if (DependencyService.Get<IPackageManager>() == null)
+ {
+ return null;
+ }
+
+ return DependencyService.Get<IPackageManager>().GetPackageLabel(pkgID);
+ }
+
+ /// <summary>
+ /// Gets the pacakge ID by the app ID
+ /// </summary>
+ /// <param name="appID">The app ID to get</param>
+ /// <returns>The pacakge ID that contains given app ID</returns>
+ public static string GetPackageIDByAppID(string appID)
+ {
+ if (DependencyService.Get<IPackageManager>() == null)
+ {
+ return null;
+ }
+
+ return DependencyService.Get<IPackageManager>().GetPackageIDByAppID(appID);
+ }
+
+ /// <summary>
+ /// A method removes the package.
+ /// </summary>
+ /// <param name="pkgID">A package ID</param>
+ /// <returns>A status of uninstall</returns>
+ public static bool UninstallPackage(string pkgID)
+ {
+ if (DependencyService.Get<IPackageManager>() == null)
+ {
+ return false;
+ }
+
+ return DependencyService.Get<IPackageManager>().UninstallPackage(pkgID);
+ }
+
+ /// <summary>
+ /// A method remove the package by using an app ID.
+ /// </summary>
+ /// <param name="appID">An app ID</param>
+ /// <returns>A status of uninstallation</returns>
+ public static bool UninstallPackageByAppID(string appID)
+ {
+ if (DependencyService.Get<IPackageManager>() == null)
+ {
+ return false;
+ }
+
+ return DependencyService.Get<IPackageManager>().UninstallPackageByAppID(appID);
+ }
+
+ /// <summary>
+ /// Gets applications list by the package ID
+ /// </summary>
+ /// <param name="pkgID">The package ID to get applications</param>
+ /// <returns>The list of applications</returns>
+ public static List<string> GetApplicationsByPkgID(string pkgID)
+ {
+ if (DependencyService.Get<IPackageManager>() == null)
+ {
+ return null;
+ }
+
+ return DependencyService.Get<IPackageManager>().GetApplicationsByPkgID(pkgID);
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System;
+using LibTVRefCommonPortable.Models;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// A class to manage the Recent Shortcuts.
+ /// </summary>
+ public sealed class RecentShortcutStorage
+ {
+ /// <summary>
+ /// A maximum number of recent apps and contents
+ /// </summary>
+ private static readonly int MaxRecents = 10;
+
+ /// <summary>
+ /// A method provides all Recent Shortcuts' information list.
+ /// </summary>
+ /// <returns>a Recent Shortcut information list.</returns>
+ public static IEnumerable<RecentShortcutInfo> Read()
+ {
+ List<RecentShortcutInfo> recentShortcutInfoList = new List<RecentShortcutInfo>();
+ IEnumerable<RecentApp> recentApps = null;
+
+ try
+ {
+ recentApps = ApplicationManagerUtils.Instance.GetRecentApplications();
+ }
+ catch (Exception e)
+ {
+ DebuggingUtils.Err("GetRecentApplications failed. " + e.Message);
+ }
+
+ if (recentApps != null)
+ {
+ foreach (var item in recentApps)
+ {
+ if (ManagedApps.IsHiddenRecentApp(item.AppID))
+ {
+ continue;
+ }
+
+ if (item.Applabel == null || item.Applabel.Length == 0 ||
+ item.LaunchedTime.CompareTo(new DateTime()) == 0)
+ {
+ continue;
+ }
+
+ var defaultStateDescription = new StateDescription()
+ {
+ Label = item.Applabel,
+ IconPath = item.IconPath,
+ Action = new AppControlAction()
+ {
+ AppID = item.AppID,
+ }
+ };
+ var recentShortcutInfo = new RecentShortcutInfo();
+
+ if (item.ScreenShot == null)
+ {
+ recentShortcutInfo.ScreenshotPath = "screenshot.png";
+
+ string capturedAppScreen = FileSystemUtils.Instance.PlatformShareStorage + item.AppID + ".jpg";
+ if (FileSystemUtils.Instance.IsFileExist(capturedAppScreen))
+ {
+ recentShortcutInfo.ScreenshotPath = capturedAppScreen;
+ }
+ else
+ {
+ string testScreenShot = FileSystemUtils.Instance.AppResourceStorage + item.AppID + ".png";
+ if (FileSystemUtils.Instance.IsFileExist(testScreenShot))
+ {
+ recentShortcutInfo.ScreenshotPath = testScreenShot;
+ }
+ }
+ }
+ else
+ {
+ recentShortcutInfo.ScreenshotPath = item.ScreenShot;
+ }
+
+ recentShortcutInfo.Type = RecentShortcutType.Application;
+ recentShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
+ recentShortcutInfo.CurrentStateDescription = defaultStateDescription;
+ recentShortcutInfo.Id = item.AppID;
+ recentShortcutInfo.Date = item.LaunchedTime;
+ recentShortcutInfoList.Add(recentShortcutInfo);
+ }
+ }
+
+ IEnumerable<RecentlyPlayedMedia> recentMedias = MediaContentUtils.Instance.GetRecentlyPlayedMedia(MaxRecents);
+ foreach (var item in recentMedias)
+ {
+ if (item.FilePath == null || item.FilePath.Length == 0)
+ {
+ continue;
+ }
+
+ // DebuggingUtils.Dbg("media :" + item.DisplayName + ", PlayedAt : " + item.PlayedAt.ToString());
+ var defaultStateDescription = new StateDescription()
+ {
+ Label = item.DisplayName,
+ IconPath = "ic_launcher_mediahub_138.png",
+ Action = new MediaControlAction()
+ {
+ AppID = "org.tizen.xamediahub",
+ FileUri = "file://" + item.FilePath,
+ }
+ };
+ var mediaControlAction = defaultStateDescription.Action as MediaControlAction;
+
+ mediaControlAction?.ExtraData.Add("View By", "All");
+ mediaControlAction?.ExtraData.Add("Media type", "Video");
+ mediaControlAction?.ExtraData.Add("Media Id", item.MediaId);
+
+ var recentShortcutInfo = new RecentShortcutInfo();
+
+ recentShortcutInfo.ScreenshotPath = item.FilePath + ".tn";
+
+ if (item.ThumbnailPath != null)
+ {
+ if (FileSystemUtils.Instance.IsFileExist(item.ThumbnailPath))
+ {
+ recentShortcutInfo.ScreenshotPath = item.ThumbnailPath;
+ }
+ }
+
+ recentShortcutInfo.Type = RecentShortcutType.Media;
+ recentShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
+ recentShortcutInfo.CurrentStateDescription = defaultStateDescription;
+ recentShortcutInfo.Id = "org.tizen.xamediahub";
+ recentShortcutInfo.Date = item.PlayedAt.ToUniversalTime();
+ recentShortcutInfoList.Add(recentShortcutInfo);
+ }
+
+ recentShortcutInfoList.Sort();
+ if (recentShortcutInfoList.Count > MaxRecents)
+ {
+ recentShortcutInfoList.RemoveRange(MaxRecents, recentShortcutInfoList.Count - MaxRecents);
+ }
+
+ return recentShortcutInfoList;
+ }
+
+ /// <summary>
+ /// A method deletes a Recent Shortcut.
+ /// </summary>
+ /// <param name="appId">An application ID</param>
+ public static void Delete(string appId)
+ {
+ ApplicationManagerUtils.Instance.DeleteRecentApplication(appId);
+ }
+
+ /// <summary>
+ /// A method deletes all Recent Shortcuts.
+ /// </summary>
+ public static void DeleteAll()
+ {
+ ApplicationManagerUtils.Instance.DeleteAllRecentApplication();
+ }
+ }
+}
--- /dev/null
+/*
+ * 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.Utils
+{
+ /// <summary>
+ /// A class provides Size metric related functions
+ /// </summary>
+ public class SizeUtils
+ {
+ /// <summary>
+ /// Base Screen Height
+ /// </summary>
+ private static int baseScreenWidth = 1920;
+
+ /// <summary>
+ /// Base Screen Height
+ /// </summary>
+ public static int BaseScreenWidth
+ {
+ get
+ {
+ return baseScreenWidth;
+ }
+ }
+
+ /// <summary>
+ /// Base Screen Height
+ /// </summary>
+ private static int baseScreenHeight = 1080;
+
+ /// <summary>
+ /// Base Screen Height
+ /// </summary>
+ public static int BaseScreenHeight
+ {
+ get
+ {
+ return baseScreenHeight;
+ }
+ }
+
+
+ /// <summary>
+ /// Screen Height
+ /// </summary>
+ public static int ScreenHeight { set; get; }
+
+ /// <summary>
+ /// Screen Width
+ /// </summary>
+ public static int ScreenWidth { set; get; }
+
+ /// <summary>
+ /// Device DPI
+ /// </summary>
+ public static double Dpi { set; get; }
+
+ /// <summary>
+ /// Font Scale ratio
+ /// </summary>
+ public static double ScaleRatio { set; get; }
+
+ /// <summary>
+ /// Platform Model enumerations
+ /// </summary>
+ private enum PlatformModel
+ {
+ TV,
+ Emulator,
+ Other,
+ }
+
+ /// <summary>
+ /// Platform Model Name
+ /// </summary>
+ private static PlatformModel ModelName = PlatformModel.TV;
+
+ /// <summary>
+ /// Set model name of running device.
+ /// </summary>
+ /// <param name="modelName">a model name</param>
+ public static void SetModelName(string modelName)
+ {
+ if (modelName == null)
+ {
+ return;
+ }
+
+ DebuggingUtils.Dbg("ModelName is " + modelName);
+ switch (modelName.ToLower()[0])
+ {
+ case 'e':
+ ModelName = PlatformModel.Emulator;
+ break;
+
+ default:
+ case 'x':
+ ModelName = PlatformModel.Other;
+ break;
+ }
+ }
+
+ /// <summary>
+ /// A method provides a converted height size.
+ /// </summary>
+ /// <param name="heightBaseSize">A height value in BaseScreen ratio</param>
+ /// <returns>A converted height size</returns>
+ public static int GetHeightSize(int heightBaseSize)
+ {
+ return Convert.ToInt32((double)((double)heightBaseSize / (double)BaseScreenHeight) * (double)(ScreenHeight));
+ }
+
+ /// <summary>
+ /// A method provides a converted width size.
+ /// </summary>
+ /// <param name="widthBaseSize">A width value in BaseScreen ratio</param>
+ /// <returns>A converted width size</returns>
+ public static int GetWidthSize(int widthBaseSize)
+ {
+ return Convert.ToInt32((double)((double)widthBaseSize / (double)BaseScreenWidth) * (double)(ScreenWidth));
+ }
+
+ /// <summary>
+ /// A method provides a converted width size by double type.
+ /// </summary>
+ /// <param name="widthBaseSize">A width value in BaseScreen ratio</param>
+ /// <returns>A converted width size</returns>
+ public static double GetWidthSizeDouble(double widthBaseSize)
+ {
+ return (double)(widthBaseSize / (double)BaseScreenWidth) * (double)(ScreenWidth);
+ }
+
+ /// <summary>
+ /// A method provides a converted font size.
+ /// </summary>
+ /// <param name="fontBaseSize">A base font size value in BaseScreen ratio</param>
+ /// <returns>A converted font size</returns>
+ public static int GetFontSize(int fontBaseSize)
+ {
+ switch (ModelName)
+ {
+ case PlatformModel.Emulator:
+ //DebuggingUtils.Dbg("Emulator, Font size = " + fontBaseSize + " => " + ((double)((double)fontBaseSize / (double)BaseScreenHeight) * (double)ScreenHeight) * ScaleRatio);
+ return Convert.ToInt32(((double)((double)fontBaseSize / (double)BaseScreenHeight) * (double)ScreenHeight) * ScaleRatio);
+
+ default:
+ case PlatformModel.Other:
+ case PlatformModel.TV:
+ //DebuggingUtils.Dbg(String.Format("TV/Other, fontBaseSize = {0}, BaseScreenHeight = {1}, ScreenHeight = {2}, ScaleRatio = {3}", fontBaseSize, BaseScreenHeight, ScreenHeight, ScaleRatio));
+ double tempAdjustmentRatio = 1D;
+ return Convert.ToInt32(((double)((double)fontBaseSize / (double)BaseScreenHeight) * (double)ScreenHeight) * ScaleRatio * tempAdjustmentRatio);
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * 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.Models;
+
+namespace LibTVRefCommonPortable.Utils
+{
+ /// <summary>
+ /// A main instance class of the TVHome, TVApps to providing the Model functions.
+ /// This class is a kind of the Singleton class and includes major Model classes
+ /// such as the AppShortcutController, the RecentShortcutController, and the SettingShortcutcontroller
+ /// that are providing major functions related with TVHome, TVApps using scenarios.
+ /// </summary>
+ /// <see cref="AppShortcutController"/>
+ /// <see cref="RecentShortcutController"/>
+ /// <see cref="SettingShortcutController"/>
+ public class TVHomeImpl : ITVHome
+ {
+ /// <summary>
+ /// An instance of the TVHomeImpl
+ /// </summary>
+ private static readonly TVHomeImpl instance = new TVHomeImpl();
+
+ /// <summary>
+ /// An instance of the TVHomeImpl
+ /// </summary>
+ public static ITVHome GetInstance
+ {
+ get
+ {
+ return instance;
+ }
+ }
+
+ /// <summary>
+ /// A constructor of TVHomeImpl
+ /// Initializes Model implementations.
+ /// </summary>
+ private TVHomeImpl()
+ {
+
+ }
+
+ /// <summary>
+ /// An instance of the AppShortcutController
+ /// </summary>
+ private static readonly AppShortcutController appShortcutController = new AppShortcutController();
+ public AppShortcutController AppShortcutControllerInstance
+ {
+ get
+ {
+ return appShortcutController;
+ }
+ }
+
+ /// <summary>
+ /// An instance of the RecentShortcutController
+ /// </summary>
+ private static readonly RecentShortcutController recentShortcutController = new RecentShortcutController();
+ public RecentShortcutController RecentShortcutControllerInstance
+ {
+ get
+ {
+ return recentShortcutController;
+ }
+ }
+ }
+}
--- /dev/null
+{
+ "runtimeTarget": {
+ "name": ".NETStandard,Version=v2.0/",
+ "signature": "cf5149bdff09bd8db6df7773b79e5a86c601ccd4"
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETStandard,Version=v2.0": {},
+ ".NETStandard,Version=v2.0/": {
+ "LibCommon.Shared/1.0.0": {
+ "dependencies": {
+ "NETStandard.Library": "2.0.0",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "LibCommon.Shared.dll": {}
+ }
+ },
+ "Microsoft.NETCore.Platforms/1.1.0": {},
+ "NETStandard.Library/2.0.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0"
+ }
+ },
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "dependencies": {
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "lib/netstandard1.0/Tizen.Xamarin.Forms.Extension.dll": {}
+ }
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "runtime": {
+ "lib/netstandard1.0/Xamarin.Forms.Core.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Platform.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Xaml.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "LibCommon.Shared/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Microsoft.NETCore.Platforms/1.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
+ "path": "microsoft.netcore.platforms/1.1.0",
+ "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
+ },
+ "NETStandard.Library/2.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYmBPA==",
+ "path": "netstandard.library/2.0.0",
+ "hashPath": "netstandard.library.2.0.0.nupkg.sha512"
+ },
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-MKUamVt5XloZ/JziyOXLdbahn7T0LDQDJGUt3ynt0iSia4aLpZLOua6/iypBhnC79FgMaNfUA7APjVfjh3NLTg==",
+ "path": "tizen.xamarin.forms.extension/2.4.0-v00005",
+ "hashPath": "tizen.xamarin.forms.extension.2.4.0-v00005.nupkg.sha512"
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-pMu+b01vdH1ul5EJo1opQjEcwisWT35DdZO6EuR9HNKfY1dWyKmAlWgRdGUtjtdbhjOAtCOQUxI7F3x4hvV8KA==",
+ "path": "xamarin.forms/2.4.0.266-pre1",
+ "hashPath": "xamarin.forms.2.4.0.266-pre1.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>netstandard2.0</TargetFramework>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Tizen.NET" Version="4.0.0-preview1-00143" />
+ <PackageReference Include="Tizen.Xamarin.Forms.Extension" Version="2.4.0-v00005" />
+ <PackageReference Include="Xamarin.Forms" Version="2.4.0.266-pre1" />
+ <PackageReference Include="Xamarin.Forms.Platform.Tizen" Version="2.4.0-r266-006" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\LibCommon.Shared\LibCommon.Shared.csproj" />
+ </ItemGroup>
+
+</Project>
--- /dev/null
+/*
+ * 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;
+using LibTVRefCommonPortable.Utils;
+using Tizen.Applications;
+using System.Collections.Generic;
+
+namespace LibTVRefCommonTizen.Ports
+{
+ /// <summary>
+ /// Handles the AppControl APIs
+ /// </summary>
+ public class AppControlPort : IAppControl
+ {
+ /// <summary>
+ /// The app ID of TV reference home application
+ /// </summary>
+ public static string TVHomeAppID = "org.tizen.xahome";
+
+ /// <summary>
+ /// The app ID of TV reference apps-tray application
+ /// </summary>
+ public static string TVAppsAppID = "org.tizen.xaapps";
+
+ /// <summary>
+ /// Represents the operation to be performed between TVHome and TVApps
+ /// This operation is sent from TVHomes to TVApps
+ /// </summary>
+ public static string AddAppOperation = "http://xahome.tizen.org/appcontrol/operation/add_app";
+
+ /// <summary>
+ /// Represents the operation to be performed between TVHome and TVApps
+ /// This operation is sent from TVApps to TVHome
+ /// </summary>
+ public static string AppAddedNotifyOperation = "http://xahome.tizen.org/appcontrol/operation/app_added";
+
+ public static string KeyAddedAppID = "AddedAppID";
+
+ /// <summary>
+ /// Sends the launch request
+ /// </summary>
+ /// <param name="appId"> The app ID to explicitly launch</param>
+ /// <param name="extraData">The extra data for the app control</param>
+ /// <param name="fileUri">The file URI to be opened</param>
+ public void SendLaunchRequest(string appId, IDictionary<string, string> extraData = null, string fileUri = null)
+ {
+ try
+ {
+ AppControl appControl = new AppControl();
+
+ if (appId == null || appId.Length <= 0)
+ {
+ DbgPort.E("The AppID is null or blank");
+ return;
+ }
+
+ string value;
+
+ appControl.ApplicationId = appId;
+
+ if (extraData != null)
+ {
+ foreach (var key in extraData.Keys)
+ {
+ if (extraData.TryGetValue(key, out value))
+ {
+ appControl.ExtraData.Add(key, value);
+ }
+ }
+ }
+
+ if (fileUri != null && fileUri.Length != 0)
+ {
+ appControl.Uri = fileUri;
+ appControl.LaunchMode = AppControlLaunchMode.Group;
+ appControl.Mime = "video/*";
+ appControl.Operation = AppControlOperations.View;
+ }
+
+ AppControl.SendLaunchRequest(appControl);
+ }
+ catch (InvalidOperationException)
+ {
+ DbgPort.E("Failed to create AppControl");
+ }
+ }
+
+ /// <summary>
+ /// Sends the 'Add PIN apps' operation to TV Apps
+ /// </summary>
+ public void SendAddAppRequestToApps()
+ {
+ AppControl appControl = new AppControl()
+ {
+ ApplicationId = TVAppsAppID,
+ Operation = AddAppOperation,
+ };
+ AppControl.SendLaunchRequest(appControl);
+ }
+
+ /// <summary>
+ /// Sends the pinned app ID to TV Home
+ /// </summary>
+ /// <param name="addedAddID">The app ID to add PIN list int the TV Home</param>
+ public void SendAppAddedNotificationToHome(string addedAddID)
+ {
+ AppControl appControl = new AppControl()
+ {
+ ApplicationId = TVHomeAppID,
+ Operation = AppAddedNotifyOperation,
+ };
+ appControl.ExtraData.Add(KeyAddedAppID, addedAddID);
+ AppControl.SendLaunchRequest(appControl);
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Tizen.Applications;
+using LibTVRefCommonPortable.Utils;
+
+namespace LibTVRefCommonTizen.Ports
+{
+ /// <summary>
+ /// Handles the ApplicationsManager APIs
+ /// </summary>
+ public class ApplicationManagerPort : IApplicationManagerAPIs
+ {
+ /// <summary>
+ /// Defines the default app icon
+ /// If the app icon is not exist, shows the default app icon
+ /// </summary>
+ private static String DefaultAppIcon = "AppIcon.png";
+
+ /// <summary>
+ /// The constructor of this class
+ /// Adds the EventHandler for ApplicationLaunched
+ /// </summary>
+ public ApplicationManagerPort()
+ {
+ ApplicationManager.ApplicationLaunched += new EventHandler<ApplicationLaunchedEventArgs>(OnApplicationLaunched);
+ }
+
+ /// <summary>
+ /// Arguments for the event that is raised when the application is launched
+ /// </summary>
+ /// <param name="sender">The source of the event</param>
+ /// <param name="args">An object that contains no event data</param>
+ /// <remarks>
+ /// https://msdn.microsoft.com/en-us/library/system.eventhandler(v=vs.110).aspx
+ /// </remarks>
+ void OnApplicationLaunched(object sender, EventArgs args)
+ {
+ ApplicationLaunchedEventArgs launchedEventArgs = args as ApplicationLaunchedEventArgs;
+ DbgPort.D(launchedEventArgs.ApplicationRunningContext.ApplicationId + " launched");
+ }
+
+ /// <summary>
+ /// Clears all recent applications
+ /// </summary>
+ public void DeleteAllRecentApplication()
+ {
+ RecentApplicationControl.DeleteAll();
+ }
+
+ /// <summary>
+ /// Removes the specified application with the app ID
+ /// </summary>
+ /// <param name="appId">An 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>
+ public IEnumerable<RecentApp> GetRecentApplications()
+ {
+ bool isNoRecentApps = true;
+ List<RecentApp> resultList = new List<RecentApp>();
+
+ try
+ {
+ IEnumerable<RecentApplicationInfo> recentApps = ApplicationManager.GetRecentApplications();
+
+ foreach (var app in recentApps)
+ {
+ if (app.IsNoDisplay ||
+ app.ApplicationId == null ||
+ app.ApplicationId.Length < 1)
+ {
+ continue;
+ }
+
+ DbgPort.D("Recent App (" + app.Label + "): " + app.ApplicationId);
+
+ resultList.Add(new RecentApp()
+ {
+ InstanceID = app.InstanceId,
+ InstanceLabel = app.InstanceName,
+ AppID = app.ApplicationId,
+ Applabel = (app.Label == null || app.Label.Length < 1) ? "No Name" : app.Label,
+ IconPath = app.IconPath,
+ LaunchedTime = app.LaunchTime,
+ Uri = app.Uri,
+ });
+ isNoRecentApps = false;
+ }
+ }
+ catch (InvalidOperationException)
+ {
+ DbgPort.E("Failed to get the information of the recent applications");
+ return null;
+ }
+
+ if (isNoRecentApps)
+ {
+ DbgPort.E("No Recent Apps!!!");
+ }
+
+ return resultList;
+ }
+
+ /// <summary>
+ /// Gets the information of the specified application with the app ID
+ /// </summary>
+ /// <param name="appID">The app Id to get</param>
+ /// <returns>The information of the installed application</returns>
+ public InstalledApp GetInstalledApplication(string appID)
+ {
+ InstalledApp result = null;
+ ApplicationInfo appInfo = null;
+
+ try
+ {
+ appInfo = ApplicationManager.GetInstalledApplication(appID);
+ if (appInfo == null)
+ {
+ DbgPort.D("GetInstalledApplication failed");
+ return null;
+ }
+
+ result = new InstalledApp()
+ {
+ AppID = appInfo.ApplicationId,
+ Applabel = appInfo.Label,
+ IconPath = (System.IO.File.Exists(appInfo.IconPath)) ? appInfo.IconPath : DefaultAppIcon,
+ };
+ }
+ catch (Exception exception)
+ {
+ DbgPort.E("Failed to get the installed application(" + appID + ") :" + exception.Message);
+ return null;
+ }
+
+ return result;
+ }
+
+ /// <summary>
+ /// Gets the information of the installed applications asynchronously
+ /// </summary>
+ /// <returns>The list of the installed applications</returns>
+ public async Task<IEnumerable<InstalledApp>> GetAllInstalledApplication()
+ {
+ try
+ {
+ IList<InstalledApp> resultList = new List<InstalledApp>();
+ Task<IEnumerable<ApplicationInfo>> task = ApplicationManager.GetInstalledApplicationsAsync();
+
+ IEnumerable<ApplicationInfo> installedList = await task;
+
+ foreach (var appInfo in installedList)
+ {
+ if (appInfo.Label == null ||
+ appInfo.ApplicationId == null ||
+ appInfo.IsNoDisplay)
+ {
+ continue;
+ }
+
+ Package pkgInfo = PackageManager.GetPackage(appInfo.PackageId);
+ if (pkgInfo == null)
+ {
+ continue;
+ }
+
+ if (pkgInfo.IsSystemPackage)
+ {
+ continue;
+ }
+
+ resultList.Add(new InstalledApp
+ {
+ AppID = appInfo.ApplicationId,
+ Applabel = appInfo.Label,
+ IconPath = (System.IO.File.Exists(appInfo.IconPath)) ? appInfo.IconPath : DefaultAppIcon,
+ InstalledTime = new DateTime(pkgInfo.InstalledTime),
+ });
+ }
+
+ return resultList;
+ }
+ catch (Exception exception)
+ {
+ DbgPort.E("Failed to get the all installed applications : " + exception.Message);
+ return null;
+ }
+ }
+
+ /// <summary>
+ /// Checks whether application is removable
+ /// </summary>
+ /// <param name="appID">The app ID to get</param>
+ /// <returns>If the application is removable, true; otherwise, false</returns>
+ public bool GetAppInfoRemovable(string appID)
+ {
+ ApplicationInfo appInfo = null;
+
+ try
+ {
+ appInfo = ApplicationManager.GetInstalledApplication(appID);
+ if (appInfo == null)
+ {
+ DbgPort.D("Failed to get the installed application(" + appID + ")");
+ return false;
+ }
+
+ return !appInfo.IsPreload;
+ }
+ catch (Exception exception)
+ {
+ DbgPort.E("Failed to get the installed application(" + appID + ") :" + exception.Message);
+ return false;
+ }
+ }
+
+ /// <summary>
+ /// Gets the app ID by the app label
+ /// </summary>
+ /// <param name="appLabel">the app label to get</param>
+ /// <returns>the app ID of the app label</returns>
+ public async Task<string> GetAppIDbyAppLabel(string appLabel)
+ {
+ IEnumerable<ApplicationInfo> installedList = await ApplicationManager.GetInstalledApplicationsAsync();
+
+ foreach (var app in installedList)
+ {
+ if (app != null && app.Label.Equals(appLabel))
+ {
+ return app.ApplicationId;
+ }
+ }
+
+ return null;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * 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.Runtime.CompilerServices;
+using System;
+using ElmSharp;
+
+namespace LibTVRefCommonTizen.Ports
+{
+ /// <summary>
+ /// Platform dependent implementation for the Logging and the Popup displaying
+ /// DbgPort is implementing IDebuggingAPIs which is defined in Calculator shared project
+ /// </summary>
+ /// <remarks>
+ /// Please refer to Xamarin Dependency Service
+ /// https://developer.xamarin.com/guides/xamarin-forms/dependency-service/introduction/
+ /// </remarks>
+ public class DbgPort : IDebuggingAPIs
+ {
+ /// <summary>
+ /// A TV Home Windows reference
+ /// This is used to display a Dialog
+ /// </summary>
+ public static Window MainWindow
+ {
+ set;
+ get;
+ }
+
+ /// <summary>
+ /// A Logging Tag
+ /// </summary>
+ public static string TAG = "home";
+
+
+ /// <summary>
+ /// A flag which enables console log writting
+ /// </summary>
+ private static readonly bool IsNeedToShowInConsole = true;
+
+ public static string Prefix
+ {
+ set;
+ get;
+ }
+
+ /// <summary>
+ /// Displays a log message which developer want to check
+ /// </summary>
+ /// <param name="message"> A debugging message </param>
+ /// <param name="file"> A file name that debugging message is exist </param>
+ /// <param name="func"> A function name that debugging message is exist </param>
+ /// <param name="line"> A line number that debugging message is exist </param>
+ public void Dbg(string message, String file, String func, Int32 line)
+ {
+ D(message, file, func, line);
+ }
+
+ /// <summary>
+ /// </summary>
+ /// <param name="message"> A debugging message </param>
+ /// <param name="file"> A file name that debugging message is exist </param>
+ /// <param name="func"> A function name that debugging message is exist </param>
+ /// <param name="line"> A line number that debugging message is exist </param>
+ public void Err(string message, String file, String func, Int32 line)
+ {
+ E(message, file, func, line);
+ }
+
+ /// <summary>
+ /// Displays a dialog with a given message
+ /// </summary>
+ /// <param name="message"> A debugging message </param>
+ public void Popup(string message)
+ {
+ if (MainWindow == null)
+ {
+ return;
+ }
+ //bool result = await Xamarin.Forms.Page.DisplayAlert("Calculator", message, "OK");
+
+ Dialog toast = new Dialog(MainWindow);
+ toast.Title = message;
+ toast.Timeout = 2.3;
+ toast.BackButtonPressed += (s, e) =>
+ {
+ toast.Dismiss();
+ };
+ toast.Show();
+ }
+
+ /// <summary>
+ /// Displays a log message which developer want to check
+ /// </summary>
+ /// <param name="message"> A debugging message </param>
+ /// <param name="file"> A file name that debugging message is exist </param>
+ /// <param name="func"> A function name that debugging message is exist </param>
+ /// <param name="line"> A line number that debugging message is exist </param>
+ public static void D(string message, [CallerFilePath] System.String file = "", [CallerMemberName] System.String func = "", [CallerLineNumber] System.Int32 line = 0)
+ {
+ Log.Debug(TAG, Prefix + ", " + message, file, func, line);
+ if (IsNeedToShowInConsole)
+ {
+ Console.WriteLine(String.Format("{0}, {1}:{2},{3}", message, file.Substring(file.LastIndexOf("\\")), line, func));
+ }
+
+ }
+
+ /// <summary>
+ /// Displays an error log message
+ /// </summary>
+ /// <param name="message"> A debugging message </param>
+ /// <param name="file"> A file name that debugging message is exist </param>
+ /// <param name="func"> A function name that debugging message is exist </param>
+ /// <param name="line"> A line number that debugging message is exist </param>
+ public static void E(string message, [CallerFilePath] System.String file = "", [CallerMemberName] System.String func = "", [CallerLineNumber] System.Int32 line = 0)
+ {
+ Log.Error(TAG, Prefix + ", " + message, file, func, line);
+ if (IsNeedToShowInConsole)
+ {
+ Console.WriteLine(String.Format("{0}, {1}:{2},{3}", message, file.Substring(file.LastIndexOf("\\")), line, func));
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * 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;
+using System.IO;
+using LibTVRefCommonPortable.Utils;
+
+namespace LibTVRefCommonTizen.Ports
+{
+ /// <summary>
+ /// Handles FileSystem APIs
+ /// </summary>
+ public class FileSystemPort : IFileSystemAPIs
+ {
+ /// <summary>
+ /// A directory path which should be used for app data storing.
+ /// </summary>
+ public static string AppDataStroagePath { private get; set; }
+
+ /// <summary>
+ /// A property of AppDataStroagePath to be exported to PCL.
+ /// </summary>
+ public string AppDataStorage
+ {
+ get
+ {
+ return AppDataStroagePath ?? "";
+ }
+ }
+
+ public static string AppResourceStoragePath { private get; set; }
+
+ public string AppResourceStorage
+ {
+ get
+ {
+ return AppResourceStoragePath ?? "";
+ }
+ }
+
+ /// <summary>
+ /// A directory path which should be used for sharing between apps.
+ /// </summary>
+ public static string PlatformShareStroagePath { private get; set; }
+
+ /// <summary>
+ /// A property of PlatformShareStroagePath to be exported to PCL.
+ /// </summary>
+ public string PlatformShareStorage
+ {
+ get
+ {
+ return PlatformShareStroagePath ?? "";
+ }
+ }
+
+ /// <summary>
+ /// Opens the given file
+ /// </summary>
+ /// <param name="filePath">A relative or absolute path for the file that the current FileStream object will encapsulate</param>
+ /// <param name="mode">A constant that determines how to open or create the file</param>
+ /// <returns>A generic view of a sequence of bytes</returns>
+ public Stream OpenFile(string filePath, UtilFileMode mode)
+ {
+ Stream fileStream = null;
+ DbgPort.D("[" + mode.ToString() + "] Opening the file, " + filePath);
+ try
+ {
+ fileStream = new FileStream(filePath, (FileMode)mode);
+ }
+ catch (Exception exception)
+ {
+ DbgPort.E("Exception!! " + exception.Message);
+ }
+
+ return fileStream;
+ }
+
+ /// <summary>
+ /// Flushes the given steam
+ /// </summary>
+ /// <param name="stream">The stream to flush</param>
+ public void Flush(Stream stream)
+ {
+ var fileStream = stream as FileStream;
+ fileStream.Flush();
+ }
+
+ /// <summary>
+ /// Closes the given stream
+ /// </summary>
+ /// <param name="stream">The stream to close</param>
+ public void CloseFile(Stream stream)
+ {
+ var fileStream = stream as FileStream;
+ fileStream.Dispose();
+ }
+
+ /// <summary>
+ /// Checks whether the given file exist
+ /// </summary>
+ /// <param name="fileName">The file to check</param>
+ /// <returns>
+ /// true if the caller has the required permissions and path contains the name of an existing file, otherwise, false
+ /// </returns>
+ /// <remarks>
+ /// https://msdn.microsoft.com/en-us/library/system.io.file.exists(v=vs.110).aspx
+ /// </remarks>
+ public bool IsFileExist(String fileName)
+ {
+ return File.Exists(fileName);
+ }
+
+ /// <summary>
+ /// Checks whether the given file ready
+ /// </summary>
+ /// <param name="fileName">The file to check</param>
+ /// <returns>
+ /// true if the file is ready to open, otherwise, false
+ /// </returns>
+ /// <remarks>
+ /// https://msdn.microsoft.com/en-us/library/y973b725(v=vs.110).aspx
+ /// </remarks>
+ public bool IsFileReady(String fileName)
+ {
+ try
+ {
+ using (FileStream inputStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
+ {
+ return (inputStream.Length > 0) ? true : false;
+ }
+ }
+ catch (Exception)
+ {
+ return false;
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.IO;
+using LibTVRefCommonPortable.Utils;
+using LibTVRefCommonPortable.DataModels;
+
+namespace LibTVRefCommonTizen.Ports
+{
+ /// <summary>
+ /// Handles FileSystemWatcher APIs
+ /// </summary>
+ public class FileSystemWatcherPort : IFileSystemWatcherAPIs
+ {
+ static FileSystemWatcher watcher;
+ public event EventHandler<EventArgs> CustomChanged;
+ private FileSystemEventCustomArgs args;
+
+ /// <summary>
+ /// Listens to the file system change notifications and raises events when a directory, or file in a directory, changes
+ /// If the 'pinned_apps_info.xml' is created, changed, or deleted, invokes event handler method
+ /// </summary>
+ /// <param name="path">A file path which has the target file</param>
+ /// <param name="fileName">A file name to be watching</param>
+ /// <remarks>
+ /// https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx
+ /// </remarks>
+ public void Run(String path, String fileName)
+ {
+ if (File.Exists(path + fileName) == false)
+ {
+ DbgPort.E("Watching File is not exist!!!" + path + fileName);
+ }
+
+ watcher = new FileSystemWatcher();
+ watcher.Path = path;
+ watcher.NotifyFilter = NotifyFilters.LastWrite;
+ watcher.Filter = fileName;
+
+ watcher.Created += new FileSystemEventHandler(WatcherChanged);
+ watcher.Changed += new FileSystemEventHandler(WatcherChanged);
+ watcher.Deleted += new FileSystemEventHandler(WatcherChanged);
+ watcher.IncludeSubdirectories = true;
+ watcher.EnableRaisingEvents = true;
+ }
+
+ /// <summary>
+ /// Represents the method that will handle the Changed, Created, or Deleted event of a FileSystemWatcher class
+ /// </summary>
+ /// <param name="sender">The source of the event</param>
+ /// <param name="e">The FileSystemEventArgs that contains the event data</param>
+ /// <remarks>
+ /// https://msdn.microsoft.com/en-us/library/system.io.filesystemeventhandler(v=vs.110).aspx
+ /// </remarks>
+ private void WatcherChanged(object sender, FileSystemEventArgs e)
+ {
+ args = new FileSystemEventCustomArgs((WatcherType)e.ChangeType, e.FullPath, e.Name);
+ if (e.ChangeType.Equals(WatcherChangeTypes.Changed))
+ {
+ CustomChanged.Invoke(this, args);
+ }
+
+ DbgPort.D(e.ChangeType + ", " + e.Name);
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Collections.Generic;
+using Tizen.Content.MediaContent;
+using LibTVRefCommonPortable.Utils;
+
+namespace LibTVRefCommonTizen.Ports
+{
+ /// <summary>
+ /// Handles the MediaContent APIs
+ /// </summary>
+ public class MediaContentPort : IMediaContentAPIs
+ {
+ private MediaDatabase mediaDatabase;
+ private MediaInfoCommand mediaInfoCommand;
+ /// <summary>
+ /// The constructor of this class
+ /// Connects content database
+ /// </summary>
+ public MediaContentPort()
+ {
+ DbgPort.D("MediaContentPort");
+ mediaDatabase = new MediaDatabase();
+ mediaDatabase.Connect();
+ mediaInfoCommand = new MediaInfoCommand(mediaDatabase);
+ }
+
+ /// <summary>
+ /// A method for getting recently played media content list
+ /// </summary>
+ /// <param name="limitation">Maximum count of list</param>
+ /// <returns>The recently played media content list</returns>
+ public IEnumerable<RecentlyPlayedMedia> GetRecentlyPlayedMedia(int limitation)
+ {
+ var recentlyPlayedVideos = new List<RecentlyPlayedMedia>();
+ var selectArguments = new SelectArguments();
+
+ selectArguments.SortOrder = "MEDIA_LAST_PLAYED_TIME";
+ //contentFilter.OrderKey = "MEDIA_LAST_PLAYED_TIME";
+ //contentFilter.Order = ContentOrder.Desc;
+ selectArguments.FilterExpression = "MEDIA_TYPE=1 AND MEDIA_LAST_PLAYED_TIME!=0";
+ selectArguments.StartRowIndex = 0;
+ selectArguments.TotalRowCount = limitation;
+
+ IEnumerable<VideoInfo> mediaInformations = new List<VideoInfo>();
+
+ try
+ {
+ var reader = mediaInfoCommand.SelectMedia(selectArguments);
+ while (reader.Read())
+ {
+ var videoInfo = reader.Current as VideoInfo;
+ recentlyPlayedVideos.Add(
+ new RecentlyPlayedMedia()
+ {
+ MediaId = videoInfo.Id,
+ ThumbnailPath = videoInfo.ThumbnailPath,
+ DisplayName = videoInfo.DisplayName,
+ //videoInfo.
+ //PlayedAt = videoInfo.PlayedAt,
+ FilePath = videoInfo.Path,
+ });
+ }
+ }
+ catch (Exception exception)
+ {
+ DbgPort.E(exception.Message);
+ }
+
+ return recentlyPlayedVideos;
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 Tizen.Applications;
+
+using LibTVRefCommonPortable.Utils;
+using System;
+
+namespace LibTVRefCommonTizen.Ports
+{
+ /// <summary>
+ /// Handles PackageManager APIs
+ /// </summary>
+ public class PackageManagerPort : IPackageManager
+ {
+ /// <summary>
+ /// An interface for platform notification
+ /// </summary>
+ private static IPlatformNotification Notification
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// The constructor for this class
+ /// </summary>
+ public PackageManagerPort()
+ {
+
+ }
+
+ /// <summary>
+ /// Registers a callback function to be invoked when the package is installed or uninstalled
+ /// </summary>
+ /// <param name="app">The instance of TVApps</param>
+ public static void RegisterCallbacks(IPlatformNotification app)
+ {
+ Notification = app;
+ PackageManager.InstallProgressChanged += PackageManager_InstallProgressChanged;
+ PackageManager.UninstallProgressChanged += PackageManager_UninstallProgressChanged;
+ }
+
+ /// <summary>
+ /// Unregisters the callback function
+ /// </summary>
+ public static void UnregisterCallbacks()
+ {
+ Notification = null;
+ PackageManager.InstallProgressChanged -= PackageManager_InstallProgressChanged;
+ PackageManager.UninstallProgressChanged -= PackageManager_UninstallProgressChanged;
+ }
+
+ /// <summary>
+ /// UninstallProgressChanged event
+ /// This event is occurred when a package is getting uninstalled and the progress of the request to the package manager changes
+ /// </summary>
+ /// <param name="sender">The source of the event</param>
+ /// <param name="e">An object that contains no event data</param>
+ private static void PackageManager_UninstallProgressChanged(object sender, PackageManagerEventArgs e)
+ {
+ if (e.State == PackageEventState.Completed)
+ {
+ if (Notification != null)
+ {
+ Notification.OnAppUninstalled(e.PackageId);
+ }
+ }
+ }
+
+ /// <summary>
+ /// InstallProgressChanged event
+ /// This event is occurred when a package is getting installed and the progress of the request to the package manager changes
+ /// </summary>
+ /// <param name="sender">The source of the event</param>
+ /// <param name="e">An object that contains no event data</param>
+ private static void PackageManager_InstallProgressChanged(object sender, PackageManagerEventArgs e)
+ {
+ if (e.State == PackageEventState.Completed)
+ {
+ Notification?.OnAppInstalled(e.PackageId);
+ }
+ }
+
+ /// <summary>
+ /// Retrieves package information of all installed packages
+ /// </summary>
+ /// <returns>The list of packages</returns>
+ public Dictionary<string, string[]> GetPackageList()
+ {
+ Dictionary<string, string[]> pkgList = new Dictionary<string, string[]>();
+ IEnumerable<Package> packages = PackageManager.GetPackages();
+
+ string[] result;
+
+ foreach (var item in packages)
+ {
+ if (item.Id == null)
+ {
+ continue;
+ }
+
+ result = new string[3];
+ var itemLabel = "No Name";
+
+ if (!string.IsNullOrEmpty(item.Label))
+ {
+ itemLabel = item.Label;
+ }
+
+ result[0] = itemLabel;
+ result[1] = item.Id;
+ result[2] = (System.IO.File.Exists(item.IconPath)) ? item.IconPath : "AppIcon.png";
+
+ pkgList.Add(itemLabel, result);
+ }
+
+ return pkgList;
+ }
+
+ /// <summary>
+ /// Gets the package label for the given package
+ /// </summary>
+ /// <param name="pkgID">The ID of the package</param>
+ /// <returns>The package label for the given package ID</returns>
+ public string GetPackageLabel(string pkgID)
+ {
+ try
+ {
+ Package tempItem = PackageManager.GetPackage(pkgID);
+
+ if(tempItem == null)
+ {
+ return null;
+ }
+ else
+ {
+ return tempItem.Label;
+ }
+ }
+ catch (Exception e)
+ {
+ DbgPort.E("Failed to get package information(" + pkgID + ") : " + e.Message);
+
+ return null;
+ }
+ }
+
+ /// <summary>
+ /// Gets the pacakge ID by the app ID
+ /// </summary>
+ /// <param name="appID">The app ID to get</param>
+ /// <returns>The pacakge ID that contains given app ID</returns>
+ public string GetPackageIDByAppID(string appID)
+ {
+ try
+ {
+ return PackageManager.GetPackageIdByApplicationId(appID);
+ }
+ catch (Exception e)
+ {
+ DbgPort.E("Failed to get the package ID by app ID(" + appID + ") : " + e.Message);
+
+ return null;
+ }
+ }
+
+ /// <summary>
+ /// Uninstalls package with the given package
+ /// </summary>
+ /// <param name="pkgID">The ID of the package to be uninstalled</param>
+ /// <returns>Returns true if uninstalltion request is successful, false otherwise</returns>
+ public bool UninstallPackage(string pkgID)
+ {
+ try
+ {
+ Package tempItem = PackageManager.GetPackage(pkgID);
+ if(tempItem == null)
+ {
+ return false;
+ }
+ else
+ {
+ return PackageManager.Uninstall(tempItem.Id, tempItem.PackageType);
+ }
+ }
+ catch (Exception e)
+ {
+ DbgPort.E("Failed to get package information(" + pkgID + ") : " + e.Message);
+
+ return false;
+ }
+
+ }
+
+ /// <summary>
+ /// Uninstalls package with the given app ID
+ /// </summary>
+ /// <param name="appID">The app ID to be uninstalled<</param>
+ /// <returns>Returns true if uninstallation request is successful, false otherwise</returns>
+ public bool UninstallPackageByAppID(string appID)
+ {
+ try
+ {
+ string pkgID = PackageManager.GetPackageIdByApplicationId(appID);
+
+ return UninstallPackage(pkgID);
+ }
+ catch (Exception e)
+ {
+ DbgPort.E("Failed to uninstall by AppID(" + appID + ") : " + e.Message);
+
+ return false;
+ }
+ }
+
+ /// <summary>
+ /// Gets applications list by the package ID
+ /// </summary>
+ /// <param name="pkgID">The package ID to get applications</param>
+ /// <returns>The list of applications</returns>
+ public List<string> GetApplicationsByPkgID(string pkgID)
+ {
+ try
+ {
+ int index = 0;
+ List<string> apps = new List<string>();
+ Package pkg = PackageManager.GetPackage(pkgID);
+ if(pkg == null)
+ {
+ return null;
+ }
+ IEnumerable<ApplicationInfo> appsList = pkg.GetApplications();
+ if (appsList == null)
+ {
+ DbgPort.E("Failed to get apps list(" + pkgID + ")");
+
+ return null;
+ }
+
+ foreach (var app in appsList)
+ {
+ apps.Add(app.ApplicationId);
+ DbgPort.D("[" + index + "] " + app.ApplicationId);
+ index++;
+ }
+
+ return apps;
+ }
+ catch (Exception e)
+ {
+ DbgPort.E("Failed to get the package information(" + pkgID + ") : " + e.Message);
+
+ return new List<string>();
+ }
+
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * 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;
+using System.Runtime.InteropServices;
+using LibTVRefCommonPortable.Utils;
+using Xamarin.Forms.Platform.Tizen.Native;
+
+
+namespace LibTVRefCommonTizen.Ports
+{
+ /// <summary>
+ /// Handles the SystemSettings APIs
+ /// </summary>
+ public class SystemSettingsPort : ISystemSettings
+ {
+ public static readonly int ErrorNone = 0;
+ public static readonly string KeyModelName = "http://tizen.org/system/model_name";
+
+ internal class SystemInfo
+ {
+ [DllImport("libcapi-system-info.so.0", EntryPoint = "system_info_get_platform_string", CallingConvention = CallingConvention.Cdecl)]
+ internal static extern int SystemInfoGetPlatformString(string key, out string value);
+ }
+
+ /// <summary>
+ /// A method for getting system model name.
+ /// </summary>
+ /// <param name="modelName">The system model name</param>
+ /// <returns>The result whether getting the modelName is done</returns>
+ public bool GetSystemModelName(out string modelName)
+ {
+ if (SystemInfo.SystemInfoGetPlatformString(KeyModelName, out modelName) != ErrorNone)
+ {
+ modelName = "";
+ return false;
+ }
+
+ return true;
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+using System.Runtime.InteropServices;
+using LibTVRefCommonPortable.Utils;
+using ElmSharp;
+
+namespace LibTVRefCommonTizen.Ports
+{
+ /// <summary>
+ /// Handles Window APIs
+ /// </summary>
+ public class WindowPort : IWindowAPIs
+ {
+ internal class ElmWindow
+ {
+ [DllImport("libelementary.so.1", EntryPoint = "elm_win_keygrab_set", CallingConvention = CallingConvention.Cdecl)]
+ internal static extern IntPtr ElmWinKeygrabSet(IntPtr obj, string key, ulong modifiers, ulong not_modifiers, int proirity, int grab_mode);
+
+ [DllImport("libelementary.so.1", EntryPoint = "elm_win_iconified_set", CallingConvention = CallingConvention.Cdecl)]
+ internal static extern void ElmWinIconfiedSet(IntPtr obj, bool iconified);
+
+ [DllImport("libelementary.so.1", EntryPoint = "elm_win_iconified_get", CallingConvention = CallingConvention.Cdecl)]
+ internal static extern bool ElmWinIconifiedGet(IntPtr obj);
+ }
+
+ /// <summary>
+ /// The main window of the App
+ /// </summary>
+ static private Window mainWindow;
+ public Window MainWindow
+ {
+ set
+ {
+ mainWindow = value;
+ }
+ }
+
+ /// <summary>
+ /// Sets the keygrab of the Elm_Win object
+ /// </summary>
+ /// <param name="key">
+ /// keyname string to set keygrab
+ /// </param>
+ public void SetKeyGrabExclusively(string key)
+ {
+ if (mainWindow != null)
+ {
+ ElmWindow.ElmWinKeygrabSet((IntPtr)mainWindow, key, 0, 0, 0, 1024);
+ }
+ }
+
+ /// <summary>
+ /// Sets the iconified state of a window
+ /// </summary>
+ /// <param name="iconified">
+ /// If true the window is iconified, otherwise false
+ /// </param>
+ public void SetIconified(bool iconified)
+ {
+ if (mainWindow != null)
+ {
+ ElmWindow.ElmWinIconfiedSet((IntPtr)mainWindow, iconified);
+ }
+ }
+
+ /// <summary>
+ /// Gets the iconified state of a window
+ /// </summary>
+ /// <returns>
+ /// true if the window is iconified, otherwise false
+ /// </returns>
+ public bool GetIconified()
+ {
+ return (mainWindow != null) ? ElmWindow.ElmWinIconifiedGet((IntPtr)mainWindow) : false;
+ }
+
+ /// <summary>
+ /// Activates the window object
+ /// </summary>
+ /// <remarks>
+ /// This is just a request that a Window Manager may ignore, so calling this function does not ensure in any way that the window is going to be the active one after it
+ /// </remarks>
+ public void Active()
+ {
+ mainWindow?.Active();
+ }
+ }
+}
--- /dev/null
+<StyleCopSettings Version="105">
+ <GlobalSettings>
+ <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
+ </GlobalSettings>
+ <Analyzers>
+ <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
+ <Rules>
+ <Rule Name="ElementsMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustHaveSummaryText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="EnumerationItemsMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationMustContainValidXml">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustHaveSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PartialElementDocumentationMustHaveSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustNotHaveDefaultSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="VoidReturnValueMustNotBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParametersMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParametersMustBeDocumentedPartialClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustHaveText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertySummaryDocumentationMustMatchAccessors">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustNotBeCopiedAndPasted">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationTextMustNotBeEmpty">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationTextMustContainWhitespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationMustMeetCharacterPercentage">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationHeadersMustNotContainBlankLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncludedDocumentationXPathDoesNotExist">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncludeNodeDoesNotContainValidFileAndPath">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="InheritDocMustBeUsedWithInheritingClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustBeSpelledCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMustHaveHeader">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustShowCopyright">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustHaveCopyrightText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustContainFileName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderFileNameDocumentationMustMatchFileName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustHaveValidCompanyText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderFileNameDocumentationMustMatchTypeName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
+ <Rules>
+ <Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustBeginWithLowerCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotContainUnderscore">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementMustBeginWithLowerCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotUseHungarianNotation">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="VariableNamesMustNotBePrefixed">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotBeginWithUnderscore">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticReadonlyFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
+ <Rules>
+ <Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleBlankLinesInARow">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentMustBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustBeSeparatedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.MaintainabilityRules">
+ <Rules>
+ <Rule Name="AccessModifierMustBeDeclared">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldsMustBePrivate">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeAnalysisSuppressionMustHaveJustification">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DebugAssertMustProvideMessageText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DebugFailMustProvideMessageText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMayOnlyContainASingleClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMayOnlyContainASingleNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StatementMustNotUseUnnecessaryParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ArithmeticExpressionsMustDeclarePrecedence">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConditionalExpressionsMustDeclarePrecedence">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="RemoveDelegateParenthesisWhenPossible">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="AttributeConstructorMustNotUseUnnecessaryParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="RemoveUnnecessaryCode">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
+ <Rules>
+ <Rule Name="UsingDirectivesMustBePlacedWithinNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustAppearInTheCorrectOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustBeOrderedByAccess">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConstantsMustAppearBeforeFields">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticElementsMustAppearBeforeInstanceElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DeclarationKeywordsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ProtectedMustComeBeforeInternal">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertyAccessorsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="EventAccessorsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NoValueFirstComparison">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingStaticDirectivesMustBePlacedAfterUsingNamespaceDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">
+ <Rules>
+ <Rule Name="CommentsMustContainText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PrefixLocalCallsWithThis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PrefixCallsCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningParenthesisMustBeOnDeclarationLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CommaMustBeOnSameLineAsPreviousParameter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterListMustFollowDeclaration">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterMustFollowComma">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SplitParametersMustStartOnLineAfterDeclaration">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParametersMustBeOnSameLineOrSeparateLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterMustNotSpanMultipleLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClauseMustFollowPreviousClause">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClausesMustBeOnSeparateLinesOrAllOnOneLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClausesSpanningMultipleLinesMustBeginOnOwnLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotPlaceRegionsWithinElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainEmptyStatements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleStatementsOnOneLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="BlockStatementsMustNotContainEmbeddedComments">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="BlockStatementsMustNotContainEmbeddedRegions">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseStringEmptyForEmptyStrings">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseBuiltInTypeAlias">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseShorthandForNullableTypes">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
+ <Rules>
+ <Rule Name="CommasMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SemicolonsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationLinesMustBeginWithSingleSpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustBeginWithSingleSpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PreprocessorKeywordsMustNotBePrecededBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OperatorKeywordMustBeFollowedBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingCurlyBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningGenericBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingGenericBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningAttributeBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingAttributeBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NullableTypeSymbolsMustNotBePrecededBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="MemberAccessSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncrementDecrementSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NegativeSignsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PositiveSignsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ColonsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleWhitespaceInARow">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="TabsMustNotBeUsed">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotSplitNullConditionalOperators">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ </Analyzers>
+</StyleCopSettings>
\ No newline at end of file
--- /dev/null
+{
+ "runtimeTarget": {
+ "name": ".NETStandard,Version=v2.0/",
+ "signature": "2a93253ff39d191d9ba22d2151167c179fe82d97"
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETStandard,Version=v2.0": {},
+ ".NETStandard,Version=v2.0/": {
+ "LibCommon.Tizen/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "NETStandard.Library": "2.0.0",
+ "Tizen.NET": "4.0.0-preview1-00143",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1",
+ "Xamarin.Forms.Platform.Tizen": "2.4.0-r266-006"
+ },
+ "runtime": {
+ "LibCommon.Tizen.dll": {}
+ }
+ },
+ "Microsoft.NETCore.Platforms/1.1.0": {},
+ "NETStandard.Library/2.0.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0"
+ }
+ },
+ "Tizen.NET/4.0.0-preview1-00143": {
+ "runtime": {
+ "lib/netstandard1.6/ElmSharp.Wearable.dll": {},
+ "lib/netstandard1.6/ElmSharp.dll": {},
+ "lib/netstandard1.6/Tizen.Account.AccountManager.dll": {},
+ "lib/netstandard1.6/Tizen.Account.FidoClient.dll": {},
+ "lib/netstandard1.6/Tizen.Account.OAuth2.dll": {},
+ "lib/netstandard1.6/Tizen.Account.SyncManager.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Alarm.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.AttachPanel.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Badge.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Common.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.DataControl.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.MessagePort.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Notification.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.NotificationEventListener.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.PackageManager.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Preference.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.RemoteView.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Service.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.ToastMessage.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.UI.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.WatchApplication.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.WidgetApplication.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.WidgetControl.dll": {},
+ "lib/netstandard1.6/Tizen.Content.Download.dll": {},
+ "lib/netstandard1.6/Tizen.Content.MediaContent.dll": {},
+ "lib/netstandard1.6/Tizen.Content.MimeType.dll": {},
+ "lib/netstandard1.6/Tizen.Context.dll": {},
+ "lib/netstandard1.6/Tizen.Location.Geofence.dll": {},
+ "lib/netstandard1.6/Tizen.Location.dll": {},
+ "lib/netstandard1.6/Tizen.Log.dll": {},
+ "lib/netstandard1.6/Tizen.Maps.dll": {},
+ "lib/netstandard1.6/Tizen.Messaging.Push.dll": {},
+ "lib/netstandard1.6/Tizen.Messaging.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.AudioIO.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Camera.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.MediaCodec.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.MediaPlayer.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Metadata.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Radio.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Recorder.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Remoting.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.StreamRecorder.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Util.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Vision.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.dll": {},
+ "lib/netstandard1.6/Tizen.NUI.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Bluetooth.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Connection.dll": {},
+ "lib/netstandard1.6/Tizen.Network.IoTConnectivity.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Nfc.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Nsd.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Smartcard.dll": {},
+ "lib/netstandard1.6/Tizen.Network.WiFi.dll": {},
+ "lib/netstandard1.6/Tizen.Network.WiFiDirect.dll": {},
+ "lib/netstandard1.6/Tizen.PhonenumberUtils.dll": {},
+ "lib/netstandard1.6/Tizen.Pims.Calendar.dll": {},
+ "lib/netstandard1.6/Tizen.Pims.Contacts.dll": {},
+ "lib/netstandard1.6/Tizen.Security.SecureRepository.dll": {},
+ "lib/netstandard1.6/Tizen.Security.TEEC.dll": {},
+ "lib/netstandard1.6/Tizen.Security.dll": {},
+ "lib/netstandard1.6/Tizen.Sensor.dll": {},
+ "lib/netstandard1.6/Tizen.System.Feedback.dll": {},
+ "lib/netstandard1.6/Tizen.System.Information.dll": {},
+ "lib/netstandard1.6/Tizen.System.MediaKey.dll": {},
+ "lib/netstandard1.6/Tizen.System.PlatformConfig.dll": {},
+ "lib/netstandard1.6/Tizen.System.Storage.dll": {},
+ "lib/netstandard1.6/Tizen.System.SystemSettings.dll": {},
+ "lib/netstandard1.6/Tizen.System.dll": {},
+ "lib/netstandard1.6/Tizen.Telephony.dll": {},
+ "lib/netstandard1.6/Tizen.Tracer.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.InputMethod.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.InputMethodManager.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.Stt.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.Tts.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.VoiceControl.dll": {},
+ "lib/netstandard1.6/Tizen.WebView.dll": {},
+ "lib/netstandard1.6/Tizen.dll": {}
+ }
+ },
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "dependencies": {
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "lib/netstandard1.0/Tizen.Xamarin.Forms.Extension.dll": {}
+ }
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "runtime": {
+ "lib/netstandard1.0/Xamarin.Forms.Core.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Platform.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Xaml.dll": {}
+ }
+ },
+ "Xamarin.Forms.Platform.Tizen/2.4.0-r266-006": {
+ "dependencies": {
+ "Tizen.NET": "4.0.0-preview1-00143",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "lib/netstandard1.6/Xamarin.Forms.Platform.Tizen.dll": {}
+ }
+ },
+ "LibCommon.Shared/1.0.0": {
+ "dependencies": {
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "LibCommon.Shared.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "LibCommon.Tizen/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Microsoft.NETCore.Platforms/1.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
+ "path": "microsoft.netcore.platforms/1.1.0",
+ "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
+ },
+ "NETStandard.Library/2.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYmBPA==",
+ "path": "netstandard.library/2.0.0",
+ "hashPath": "netstandard.library.2.0.0.nupkg.sha512"
+ },
+ "Tizen.NET/4.0.0-preview1-00143": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-woW6D9FsWZD2lJRwbND2hzMIi9l7QYwUqfpCxrMT3+Mh3+8UdFM86skDdw3mAgpLIqfC1plUfbISksQ9G2Gcgg==",
+ "path": "tizen.net/4.0.0-preview1-00143",
+ "hashPath": "tizen.net.4.0.0-preview1-00143.nupkg.sha512"
+ },
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-MKUamVt5XloZ/JziyOXLdbahn7T0LDQDJGUt3ynt0iSia4aLpZLOua6/iypBhnC79FgMaNfUA7APjVfjh3NLTg==",
+ "path": "tizen.xamarin.forms.extension/2.4.0-v00005",
+ "hashPath": "tizen.xamarin.forms.extension.2.4.0-v00005.nupkg.sha512"
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-pMu+b01vdH1ul5EJo1opQjEcwisWT35DdZO6EuR9HNKfY1dWyKmAlWgRdGUtjtdbhjOAtCOQUxI7F3x4hvV8KA==",
+ "path": "xamarin.forms/2.4.0.266-pre1",
+ "hashPath": "xamarin.forms.2.4.0.266-pre1.nupkg.sha512"
+ },
+ "Xamarin.Forms.Platform.Tizen/2.4.0-r266-006": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xDEcJnKerroXtMLLUVssB9+f2mZMB5ngulNB09OsIp0gRqP7GnpqJEyWQsISFRCk272lNVd57UhXGCUFl9/aRg==",
+ "path": "xamarin.forms.platform.tizen/2.4.0-r266-006",
+ "hashPath": "xamarin.forms.platform.tizen.2.4.0-r266-006.nupkg.sha512"
+ },
+ "LibCommon.Shared/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
+++ /dev/null
-/*
- * 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;
-using LibTVRefCommonPortable.Utils;
-using System.Collections.Generic;
-
-namespace LibTVRefCommonPortable.DataModels
-{
- /// <summary>
- /// A class defines App Control behavior.
- /// </summary>
- public class AppControlAction : IAction
- {
- /// <summary>
- /// A target application ID
- /// </summary>
- public string AppID { get; set; }
-
- /// <summary>
- /// A dictionary which has extra data for App Control
- /// </summary>
- protected Dictionary<string, string> extraData;
-
- /// <summary>
- /// A dictionary which has extra data for App Control
- /// </summary>
- public Dictionary<string, string> ExtraData
- {
- get
- {
- if (extraData == null)
- {
- extraData = new Dictionary<string, string>();
- }
-
- return extraData;
- }
- }
-
- /// <summary>
- /// A method which invoke an App Control to the application of the AppID
- /// </summary>
- /// <returns>a next state after App Control invocation</returns>
- public string Execute()
- {
- // Warn : Do NOT pass 'E'xtraData, it will create a new Dictionary and it might cause unexpected situation.
- AppControlUtils.SendLaunchRequest(AppID, extraData);
- return "default";
- }
- }
-}
+++ /dev/null
-/*
- * 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 System;
-using System.Xml.Serialization;
-using Xamarin.Forms;
-
-namespace LibTVRefCommonPortable.DataModels
-{
- /// <summary>
- /// A class defines App Shortcut button
- /// </summary>
- public class AppShortcutInfo : ShortcutInfo
- {
- /// <summary>
- /// An application ID of the App Shortcut.
- /// </summary>
- public string AppID { get; set; }
-
- /// <summary>
- /// An App Shortcut status.
- /// </summary>
- [XmlIgnore]
- public string Status { get; set; }
-
- /// <summary>
- /// A flag indicates that a App Shortcut is checked or not.
- /// </summary>
- [XmlIgnore]
- private bool isChecked;
-
- /// <summary>
- /// A flag indicates that a App Shortcut is checked or not.
- /// </summary>
- [XmlIgnore]
- public bool IsChecked
- {
- get
- {
- return isChecked;
- }
-
- set
- {
- if (isChecked != value)
- {
- isChecked = value;
- OnPropertyChanged("IsChecked");
- }
- }
- }
-
- /// <summary>
- /// A flag indicates that a App Shortcut is pinned or not.
- /// </summary>
- [XmlIgnore]
- private bool isPinned;
-
- /// <summary>
- /// A flag indicates that a App Shortcut is pinned or not.
- /// </summary>
- [XmlIgnore]
- public bool IsPinned
- {
- get
- {
- return isPinned;
- }
-
- set
- {
- if (isPinned != value)
- {
- isPinned = value;
- OnPropertyChanged("IsPinned");
- }
- }
- }
-
- /// <summary>
- /// A flag indicates that a App Shortcut can be removed.
- /// </summary>
- [XmlIgnore]
- public bool IsRemovable { get; set; }
-
- /// <summary>
- /// A flag indicates that a App Shortcut is focused or not.
- /// </summary>
- [XmlIgnore]
- private bool isFocused;
-
- /// <summary>
- /// A flag indicates that a App Shortcut is focused or not.
- /// </summary>
- [XmlIgnore]
- public bool IsFocused
- {
- get
- {
- return isFocused;
- }
-
- set
- {
- if (isFocused != value)
- {
- isFocused = value;
- OnPropertyChanged("IsFocused");
- }
- }
- }
-
- /// <summary>
- /// A flag indicates that a App Shortcut is dimmed or not.
- /// </summary>
- [XmlIgnore]
- private bool isDim;
-
- /// <summary>
- /// A flag indicates that a App Shortcut is dimmed or not.
- /// </summary>
- [XmlIgnore]
- public bool IsDim
- {
- get
- {
- return isDim;
- }
-
- set
- {
- if (isDim != value)
- {
- isDim = value;
- OnPropertyChanged("IsDim");
- }
- }
- }
-
- /// <summary>
- /// A flag indicates that a App Shortcut is showing options or not.
- /// </summary>
- [XmlIgnore]
- private bool isShowOptions;
-
- /// <summary>
- /// A flag indicates that a App Shortcut is showing options or not.
- /// </summary>
- [XmlIgnore]
- public bool IsShowOptions
- {
- get
- {
- return isShowOptions;
- }
-
- set
- {
- if (isShowOptions != value)
- {
- isShowOptions = value;
- OnPropertyChanged("IsShowOptions");
- }
- }
- }
-
- /// <summary>
- /// An app installed time.
- /// </summary>
- [XmlIgnore]
- public DateTime Installed { get; set; }
-
- /// <summary>
- /// A pin command of the Option menu.
- /// </summary>
- [XmlIgnore]
- public Command OptionMenuPinToggleCommand { get; set; }
-
- /// <summary>
- /// A deleting app command of the Option menu.
- /// </summary>
- [XmlIgnore]
- public Command OptionMenuDeleteCommand { get; set; }
-
- [XmlIgnore]
- public Command ToDefaultCommand { get; set; }
-
- /// <summary>
- /// A Constructor.
- /// Initializes AppShortcutInfo.
- /// </summary>
- public AppShortcutInfo()
- {
- OptionMenuPinToggleCommand = new Command(() =>
- {
- MessagingCenter.Send<AppShortcutInfo, string>(this, "OptionMenuPinToggle", AppID);
- });
-
- OptionMenuDeleteCommand = new Command(() =>
- {
- MessagingCenter.Send<AppShortcutInfo, string>(this, "OptionMenuDelete", AppID);
- });
-
- ToDefaultCommand = new Command(() =>
- {
- MessagingCenter.Send<AppShortcutInfo>(this, "ChangeToDefaultMode");
- });
- }
-
- /// <summary>
- /// Update State of a shortcut.
- /// </summary>
- public override void UpdateState()
- {
- SetCurrentState("default");
- }
- }
-}
+++ /dev/null
-/*
- * 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 Action class which can invoke a Command
- /// </summary>
- public class CommandAction : IAction
- {
- /// <summary>
- /// A next description after invocation of the Command.
- /// </summary>
- public string NextStateDescription { get; set; }
-
- /// <summary>
- /// A Command to be executed
- /// </summary>
- public event EventHandler<String> Command;
-
- /// <summary>
- /// A Command parameter.
- /// </summary>
- public string CommandParameter { get; set; }
-
- /// <summary>
- /// A method execute a action.
- /// </summary>
- /// <returns>A next statue of a Shortcut.</returns>
- public string Execute()
- {
- Command?.Invoke(this, CommandParameter);
- return NextStateDescription;
- }
- }
-}
+++ /dev/null
-/*
- * 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 contains file system event arguments.
- /// </summary>
- public class FileSystemEventCustomArgs : EventArgs
- {
- /// <summary>
- /// Initializes a new instance of the System.IO.FileSystemEventArgs class.
- /// </summary>
- /// <param name="changeType">One of the System.IO.WatcherChangeTypes values, which represents the kind of change detected in the file system.</param>
- /// <param name="directory">The root directory of the affected file or directory.</param>
- /// <param name="name">The name of the affected file or directory.</param>
- public FileSystemEventCustomArgs(WatcherType changeType, string directory, string name)
- {
- ChangeType = changeType;
- FullPath = directory;
- Name = name;
- }
-
- /// <summary>
- /// Gets the type of directory event that occurred.
- /// One of the System.IO.WatcherChangeTypes values that represents the kind of change
- /// detected in the file system.
- /// </summary>
- public WatcherType ChangeType { set; get; }
-
- /// <summary>
- /// Gets the fully qualified path of the affected file or directory.
- /// The path of the affected file or directory.
- /// </summary>
- public string FullPath { set; get; }
-
- /// <summary>
- /// Gets the name of the affected file or directory.
- /// The name of the affected file or directory.
- /// </summary>
- public string Name { set; get; }
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * 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 Home Menu AppShortcut information
- /// </summary>
- /// <seealso cref="ShortcutInfo"/>
- public class HomeMenuAppShortcutInfo : ShortcutInfo
- {
- /// <summary>
- /// A Shortcut status
- /// </summary>
- public string Status { get; set; }
-
- /// <summary>
- /// A method initializes a status of a Shortcut.
- /// </summary>
- public override void UpdateState()
- {
- SetCurrentState("default");
- }
-
- /// <summary>
- /// A method changes current status of a Shortcut.
- /// </summary>
- /// <param name="status">A new status</param>
- public void ChangeStatus(string status)
- {
- Status = status;
- OnPropertyChanged("Status");
- SetCurrentState(status);
- }
- }
-}
+++ /dev/null
-/*
- * 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>
- /// An interface defines behaviors that will be exported by inherited classes.
- /// </summary>
- public interface IAction
- {
- /// <summary>
- /// A method execute an action.
- /// </summary>
- /// <returns>A next statue of a Shortcut.</returns>
- string Execute();
- }
-}
+++ /dev/null
-/*
- * 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;
-
-namespace TVHome.DataModels
-{
- public interface IEnumerableItem
- {
- IDictionary<int, string> ItemProperties
- {
- set;
- get;
- }
-
- }
-}
+++ /dev/null
-/*
- * 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;
-using LibTVRefCommonPortable.Utils;
-
-namespace LibTVRefCommonPortable.DataModels
-{
- /// <summary>
- /// A Media ControlAction.
- /// </summary>
- class MediaControlAction : AppControlAction
- {
- /// <summary>
- /// A file URI to be open
- /// </summary>
- public string FileUri { get; set; }
-
- /// <summary>
- /// A method execute a action.
- /// </summary>
- /// <returns>A next statue of a Shortcut.</returns>
- new public string Execute()
- {
- // Warn : Do NOT pass 'E'xtraData, it will create a new Dictionary and it might cause unexpected situation.
- AppControlUtils.SendLaunchRequest(AppID, extraData, FileUri);
- return "default";
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Collections;
-
-namespace LibTVRefCommonPortable.DataModels
-{
- /// <summary>
- /// Types for recent shortcut
- /// </summary>
- public enum RecentShortcutType
- {
- Application = 0,
- Media = 1,
- }
-
- /// <summary>
- /// A Recent Shortcut information
- /// </summary>
- public class RecentShortcutInfo : ShortcutInfo, IComparable
- {
- /// <summary>
- /// A type for the content of the shortcut
- /// </summary>
- public RecentShortcutType Type { get; set; }
-
- /// <summary>
- /// An Id for the content of the shortcut
- /// </summary>
- public string Id { get; set; }
- /// <summary>
- /// A Last used Time
- /// </summary>
- public DateTime Date { get; set; }
-
- /// <summary>
- /// A Screenshot image path
- /// </summary>
- public string ScreenshotPath { get; set; }
-
- /// <summary>
- /// Initialize State of a shortcut.
- /// </summary>
- public override void UpdateState()
- {
- SetCurrentState("default");
- }
-
- int IComparable.CompareTo(object target)
- {
- var rightShortcutInfo = target as RecentShortcutInfo;
- return Date.CompareTo(rightShortcutInfo.Date) * -1;
- }
- }
-}
+++ /dev/null
-/*
- * 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 Setting Shortcut information
- /// </summary>
- public class SettingShortcutInfo : ShortcutInfo
- {
- /// <summary>
- /// Initialize State of a shortcut.
- /// </summary>
- public override void UpdateState()
- {
- SetCurrentState("default");
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Xml.Serialization;
-using LibTVRefCommonPortable.Utils;
-
-namespace LibTVRefCommonPortable.DataModels
-{
- /// <summary>
- /// TVHome and TVApps has several buttons that represent Apps, Contents, Settings.
- /// The ShortcutInfo is a model for those buttons with detail information of the represented object.
- /// </summary>
- public abstract class ShortcutInfo : INotifyPropertyChanged
- {
- /// <summary>
- /// An event handler for handing property changed. </summary>
- public event PropertyChangedEventHandler PropertyChanged;
-
- /// <summary>
- /// State descriptions of Shortcut. </summary>
- [XmlIgnore]
- private Dictionary<String, StateDescription> stateDescriptions = new Dictionary<String, StateDescription>();
-
- /// <summary>
- /// State descriptions of Shortcut. </summary>
- [XmlIgnore]
- public Dictionary<String, StateDescription> StateDescriptions
- {
- get
- {
- return stateDescriptions;
- }
- }
-
- /// <summary>
- /// A method notifies property changed event. </summary>
- /// <param name="propertyName"> A property name.</param>
- protected void OnPropertyChanged(string propertyName)
- {
- var handler = PropertyChanged;
- if (handler != null)
- {
- handler(this, new PropertyChangedEventArgs(propertyName));
- }
- }
-
- /// <summary>
- /// A current state description of a Shortcut. </summary>
- [XmlIgnore]
- public StateDescription CurrentStateDescription
- {
- get;
- set;
- }
-
- /// <summary>
- /// A current state description of a Shortcut. </summary>
- /// <param name="state"> A property name.</param>
- /// <returns> A result of state transition</returns>
- protected bool SetCurrentState(string state)
- {
- if (stateDescriptions.ContainsKey(state) == false)
- {
- DebuggingUtils.Err(state + " is doesn't exists!!!");
- return false;
- }
-
- if (CurrentStateDescription != null &&
- CurrentStateDescription == stateDescriptions[state])
- {
- return true;
- }
-
- CurrentStateDescription = stateDescriptions[state];
- OnPropertyChanged("CurrentStateDescription");
- return true;
- }
-
- /// <summary>
- /// Initialize State of a shortcut.
- /// </summary>
- abstract public void UpdateState();
-
- /// <summary>
- /// A method executes a action.
- /// After execution of the action, status will be changed if returned status is available. </summary>
- /// <returns> A result of action invocation. </returns>
- public bool DoAction()
- {
- if (CurrentStateDescription == null)
- {
- DebuggingUtils.Err("Current state is not set!!!");
- return false;
- }
-
- String newState = CurrentStateDescription.Action.Execute();
- if (newState == null)
- {
- DebuggingUtils.Err("Invalid State returned!!!");
- return false;
- }
-
- return SetCurrentState(newState);
- }
- }
-}
+++ /dev/null
-/*
- * 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 class represents a state of a Shortcut.
- /// </summary>
- public class StateDescription
- {
- /// <summary>
- /// Constructor.
- /// </summary>
- public StateDescription()
- {
- Label = "";
- IconPath = "";
- }
-
- /// <summary>
- /// A Shortcut label.
- /// </summary>
- public string Label
- {
- get;
- set;
- }
-
- /// <summary>
- /// A Shortcut icon path.
- /// </summary>
- public string IconPath
- {
- get;
- set;
- }
-
- /// <summary>
- /// A Action instance to be called when a Shortcut is pressed.
- /// </summary>
- public IAction Action
- {
- get;
- set;
- }
-
- }
-}
+++ /dev/null
-/*
- * 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 File Watcher type enumeration.
- /// </summary>
- public enum WatcherType
- {
- /// <summary>
- /// The creation of a file or folder.
- /// </summary>
- Created = 1,
- /// <summary>
- /// The deletion of a file or folder.
- /// </summary>
- Deleted = 2,
- /// <summary>
- /// The change of a file or folder. The types of changes include: changes to size,
- /// attributes, security settings, last write, and last access time.
- /// </summary>
- Changed = 4,
- /// <summary>
- /// The renaming of a file or folder.
- /// </summary>
- Renamed = 8,
- /// <summary>
- /// The creation, deletion, change, or renaming of a file or folder.
- /// </summary>
- All = 15
- }
-}
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
- <PropertyGroup>
- <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{67F9D3A8-F71E-4428-913F-C37AE82CDB24}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>LibTVRefCommonPortable</RootNamespace>
- <AssemblyName>LibTVRefCommonPortable</AssemblyName>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>
- <FileAlignment>512</FileAlignment>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <NuGetPackageImportStamp>
- </NuGetPackageImportStamp>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="DataModels\AppControlAction.cs" />
- <Compile Include="DataModels\AppShortcutInfo.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="Models\AppShortcutController.cs" />
- <Compile Include="Models\ManagedApps.cs" />
- <Compile Include="Models\RecentShortcutController.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="Stubs\ApplicationManagerAPITestStub.cs" />
- <Compile Include="Stubs\FileSystemAPITestStub.cs" />
- <Compile Include="Stubs\FileWatcherAPITestStub.cs" />
- <Compile Include="Stubs\MediaContentAPITestStub.cs" />
- <Compile Include="Utils\AppControlUtils.cs" />
- <Compile Include="Utils\ApplicationManagerUtils.cs" />
- <Compile Include="Utils\AppShortcutStorage.cs" />
- <Compile Include="Utils\FileSystemUtils.cs" />
- <Compile Include="Utils\IMediaContentAPIs.cs" />
- <Compile Include="Utils\IStatePublisher.cs" />
- <Compile Include="Utils\IStateSubscriber.cs" />
- <Compile Include="Utils\ISystemSettings.cs" />
- <Compile Include="Utils\MediaContentUtils.cs" />
- <Compile Include="Utils\SizeUtils.cs" />
- <Compile Include="Utils\DateUtils.cs" />
- <Compile Include="Utils\DebuggingUtils.cs" />
- <Compile Include="Utils\IAppControl.cs" />
- <Compile Include="Utils\IApplicationManagerAPIs.cs" />
- <Compile Include="Utils\IAppLifeControl.cs" />
- <Compile Include="Utils\IWindowAPIs.cs" />
- <Compile Include="Utils\IPlatformNotification.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\PackageManagerUtils.cs" />
- <Compile Include="Utils\RecentShortcutStorage.cs" />
- <Compile Include="Utils\TVHomeImpl.cs" />
- </ItemGroup>
- <ItemGroup>
- <PackageReference Include="Tizen.Xamarin.Forms.Extension">
- <Version>2.3.5-v00015</Version>
- </PackageReference>
- <PackageReference Include="Xamarin.Forms">
- <Version>2.4.0-r266-001</Version>
- </PackageReference>
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
- <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
- </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.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
\ No newline at end of file
+++ /dev/null
-/*
- * 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;
-using System.Collections.Generic;
-using LibTVRefCommonPortable.DataModels;
-using LibTVRefCommonPortable.Utils;
-using System.Threading.Tasks;
-
-namespace LibTVRefCommonPortable.Models
-{
- /// <summary>
- /// A class provides Application related information to ViewModel.
- /// The TVHome shows the Pinned app list when the App Home Menu is pressed,
- /// by invoking AppShortcutController's API to retrieve the pinned app list.
- /// The TVApps shows the installed the Tizen UI apps in the main screen.
- /// To provides the installed apps, the TVApps invokes an AppShortcutController's API.
- /// </summary>
- public class AppShortcutController
- {
- /// <summary>
- /// A default app icon for no icon applications.
- /// </summary>
- private static String DefaultAppIcon = "AppIcon.png";
-
- /// <summary>
- /// A method provides installed app list.
- /// The returned app list has only Tizen UI apps not the system app or no display apps.
- /// </summary>
- /// <returns>An installed app list.</returns>
- public async Task<IEnumerable<AppShortcutInfo>> GetInstalledApps()
- {
- List<AppShortcutInfo> appShortcutInfoList = new List<AppShortcutInfo>();
-
- var installedAppList = await ApplicationManagerUtils.Instance.GetAllInstalledApplication();
-
- foreach (var item in installedAppList)
- {
- if (ManagedApps.IsNonPinnableApps(item.AppID))
- {
- continue;
- }
-
- var defaultStateDescription = new StateDescription()
- {
- Label = item.Applabel ?? "No Name",
- IconPath = item.IconPath ?? DefaultAppIcon,
- Action = new AppControlAction()
- {
- AppID = item.AppID,
- }
- };
-
- var appShortcutInfo = new AppShortcutInfo()
- {
- IsRemovable = ApplicationManagerUtils.Instance.GetAppInfoRemovable(item.AppID),
- Installed = item.InstalledTime,
- };
-
- appShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
- appShortcutInfo.CurrentStateDescription = defaultStateDescription;
- appShortcutInfo.AppID = item.AppID;
- appShortcutInfoList.Add(appShortcutInfo);
- }
-
- return appShortcutInfoList;
- }
-
- /// <summary>
- /// A method appends an All Apps Shortcut and a MediaHub Shortcut at first in the given App Shortcut list.
- /// Actually this method is used for making the Pinned App Shortcut panel of the TVHome
- /// </summary>
- /// <seealso cref="GetDefaultShortcuts"/>
- /// <seealso cref="GetPinnedAppsWithDefaultShortcuts"/>
- /// <param name="returnPinnedAppsInfo">An App Shortcut list contains the additional Shortcuts.</param>
- private void AddAllAppsAndMediaHubShortcut(ref List<ShortcutInfo> returnPinnedAppsInfo)
- {
- var allAppsShortcutInfo = new AppShortcutInfo()
- {
- StateDescriptions =
- {
- {
- "default",
- new StateDescription
- {
- Label = "All apps",
- IconPath = "ic_home_menu_apps_138.png",
- Action = new AppControlAction
- {
- AppID = ManagedApps.TVAppsAppID,
- }
- }
- },
- {
- "focused",
- new StateDescription
- {
- Label = "All apps",
- IconPath = "ic_home_menu_apps_182.png",
- Action = new AppControlAction
- {
- AppID = ManagedApps.TVAppsAppID,
- }
- }
- },
- }
- };
-
- allAppsShortcutInfo.UpdateState();
- returnPinnedAppsInfo.Insert(0, allAppsShortcutInfo);
-
- var mediaHubShortcutInfo = new AppShortcutInfo()
- {
- StateDescriptions =
- {
- {
- "default",
- new StateDescription
- {
- Label = "Media Hub",
- IconPath = "ic_launcher_mediahub_138.png",
- Action = new AppControlAction
- {
- AppID = ManagedApps.MediaHubAppID,
- }
- }
- },
- {
- "focused",
- new StateDescription
- {
- Label = "Media Hub",
- IconPath = "ic_launcher_mediahub_182.png",
- Action = new AppControlAction
- {
- AppID = ManagedApps.MediaHubAppID,
- }
- }
- },
- }
- };
-
- mediaHubShortcutInfo.UpdateState();
- returnPinnedAppsInfo.Insert(1, mediaHubShortcutInfo);
- }
-
- /// <summary>
- /// A method appends an Add Pin Shortcut in the given App Shortcut list.
- /// </summary>
- /// <seealso cref="GetDefaultShortcuts"/>
- /// <seealso cref="GetPinnedAppsWithDefaultShortcuts"/>
- /// <param name="returnPinnedAppsInfo">An App Shortcut list contains the additional Shortcuts.</param>
- private void AppendAddPinShortcut(ref List<ShortcutInfo> returnPinnedAppsInfo)
- {
- var addPinCommandAction = new CommandAction()
- {
- NextStateDescription = "default",
- CommandParameter = "",
- };
-
- addPinCommandAction.Command += new EventHandler<string>((s, e) =>
- {
- AppControlUtils.SendAddAppRequestToApps();
- });
-
- var addPinShortcutInfo = new AppShortcutInfo()
- {
- StateDescriptions =
- {
- {
- "default",
- new StateDescription
- {
- Label = "Add pin",
- IconPath = "ic_home_menu_addpin_138.png",
- Action = addPinCommandAction,
- }
- },
- {
- "focused",
- new StateDescription
- {
- Label = "Add pin",
- IconPath = "ic_home_menu_addpin_182.png",
- Action = addPinCommandAction,
- }
- },
- }
- };
-
- addPinShortcutInfo.UpdateState();
- returnPinnedAppsInfo.Add(addPinShortcutInfo);
- }
-
- /// <summary>
- /// A method provides Pinned App Shortcut list by retrieving from the AppShortcutStorage.
- /// This method provides only the Pinned App Shortcut list not including any additional Shortcuts
- /// such as the All Apps, the Media Hub, and the Add Pin.
- /// </summary>
- /// <returns>A Pinned App Shortcut list.</returns>
- private async Task<List<ShortcutInfo>> GetPinnedApps()
- {
- IEnumerable<AppShortcutInfo> pinned_apps_info = await AppShortcutStorage.Read();
-
- List<ShortcutInfo> returnPinnedAppsInfo = new List<ShortcutInfo>();
-
- int numberOfPinnedApp = 0;
- foreach (AppShortcutInfo appShortcutInfo in pinned_apps_info)
- {
- if (numberOfPinnedApp >= 10)
- {
- break;
- }
-
- if (appShortcutInfo.AppID == null ||
- appShortcutInfo.AppID.Length < 1)
- {
- continue;
- }
-
- if (ManagedApps.IsNonPinnableApps(appShortcutInfo.AppID))
- {
- continue;
- }
-
- InstalledApp appInfo = ApplicationManagerUtils.Instance.GetInstalledApplication(appShortcutInfo.AppID);
- if (appInfo == null)
- {
- continue;
- }
-
- string appLabel = appInfo.Applabel ?? "No Name";
- string appIconPath = appInfo.IconPath ?? DefaultAppIcon;
-
- var defaultStateDescription = new StateDescription()
- {
- Label = appLabel,
- IconPath = appIconPath,
- Action = new AppControlAction
- {
- AppID = appShortcutInfo.AppID,
- }
- };
-
- appShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
- appShortcutInfo.CurrentStateDescription = defaultStateDescription;
- appShortcutInfo.IsPinned = true;
- returnPinnedAppsInfo.Add(appShortcutInfo);
-
- numberOfPinnedApp += 1;
- }
-
- return returnPinnedAppsInfo;
- }
-
- /// <summary>
- /// A method provides an App Shortcut list which contains default App Shortcuts
- /// such as the All Apps, the Media Hub, and the Add Pin.
- /// </summary>
- /// <returns>A default App Shortcut list.</returns>
- public IEnumerable<ShortcutInfo> GetDefaultShortcuts()
- {
- List<ShortcutInfo> returnPinnedAppsInfo = new List<ShortcutInfo>();
-
- AddAllAppsAndMediaHubShortcut(ref returnPinnedAppsInfo);
- AppendAddPinShortcut(ref returnPinnedAppsInfo);
-
- return returnPinnedAppsInfo;
- }
-
- /// <summary>
- /// A method provides the App Shortcut list with the default App Shortcut icons.
- /// The pinned apps, the All Apps, the MediaHub, and the Add Pin are included in the return App Shortcut list.
- /// </summary>
- /// <returns>App Shortcut list.</returns>
- public async Task<IEnumerable<ShortcutInfo>> GetPinnedAppsWithDefaultShortcuts()
- {
- List<ShortcutInfo> returnPinnedAppsInfo = await GetPinnedApps();
-
- AddAllAppsAndMediaHubShortcut(ref returnPinnedAppsInfo);
- AppendAddPinShortcut(ref returnPinnedAppsInfo);
-
- return returnPinnedAppsInfo;
- }
-
- /// <summary>
- /// A method provides only pinned app's app ID as a hash table.
- /// </summary>
- /// <returns>A hash table includes pinned app's app ID.</returns>
- public async Task<Dictionary<string, string>> GetPinnedAppsAppIDs()
- {
- IEnumerable<AppShortcutInfo> pinned_apps_info = await AppShortcutStorage.Read();
- Dictionary<string, string> pinnedAppsDictionary = new Dictionary<string, string>();
-
- int numberOfPinnedApp = 0;
- foreach (AppShortcutInfo appShortcutInfo in pinned_apps_info)
- {
- if (numberOfPinnedApp >= 10)
- {
- break;
- }
-
- if (ManagedApps.IsNonPinnableApps(appShortcutInfo.AppID))
- {
- continue;
- }
-
- pinnedAppsDictionary.Add(appShortcutInfo.AppID, appShortcutInfo.AppID);
- numberOfPinnedApp += 1;
- }
-
- return pinnedAppsDictionary;
- }
-
- /// <summary>
- /// A method updates the pinned App list by using the AppShortcutStorage.
- /// </summary>
- /// <param name="pinnedAppsInfo">A pinned app list.</param>
- public void UpdatePinnedApps(IEnumerable<AppShortcutInfo> pinnedAppsInfo)
- {
- AppShortcutStorage.Write(pinnedAppsInfo);
- }
-
- /// <summary>
- /// A listener to get notification of the AppShortcutStorage.
- /// </summary>
- /// <param name="eventListener">A Event Handler for the nonfiction of AppShortutStorage.</param>
- public void AddFileSystemChangedListener(EventHandler<EventArgs> eventListener)
- {
- if (AppShortcutStorage.Instance != null)
- {
- AppShortcutStorage.Instance.AddStorageChangedListener(eventListener);
- }
- else
- {
- DebuggingUtils.Err("AppShortcutStorage Instance is NULL");
- }
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace LibTVRefCommonPortable.Models
-{
- /// <summary>
- /// A class has some apps have to managed in the TVHome, TVApps by platform policy reason.
- /// </summary>
- public class ManagedApps
- {
- /// <summary>
- /// The app ID of TV reference home application
- /// </summary>
- public static string TVHomeAppID
- {
- get
- {
- return "org.tizen.xahome";
- }
- }
-
- /// <summary>
- /// The app ID of TV reference apps-tray application
- /// </summary>
- public static string TVAppsAppID
- {
- get
- {
- return "org.tizen.xaapps";
- }
- }
-
- /// <summary>
- /// The app ID of TV reference apps-tray application
- /// </summary>
- public static string MediaHubAppID
- {
- get
- {
- return "org.tizen.xamediahub";
- }
- }
-
- /// <summary>
- /// The Settings App ID
- /// </summary>
- public static string SettingsAppID
- {
- get
- {
- return "org.tizen.settings";
- }
- }
-
- /// <summary>
- /// Checks application isn't pinnable
- /// </summary>
- /// <param name="appID">Application id for checking</param>
- /// <returns>If the application isn't pinnable return 'true'</returns>
- public static bool IsNonPinnableApps(string appID)
- {
- if (appID == null)
- {
- return true;
- }
-
- if (appID.CompareTo(TVHomeAppID) == 0 ||
- appID.CompareTo(TVAppsAppID) == 0 ||
- appID.CompareTo(MediaHubAppID) == 0 ||
- appID.CompareTo(SettingsAppID) == 0)
- {
- return true;
- }
-
- return false;
- }
-
- /// <summary>
- /// Checks application have to be hidden at recently used application
- /// </summary>
- /// <param name="appID">Application id for checking</param>
- /// <returns>If the application have to be hidden, return 'true'</returns>
- public static bool IsHiddenRecentApp(string appID)
- {
- if (appID == null)
- {
- return true;
- }
-
- if (appID.CompareTo(TVHomeAppID) == 0 ||
- appID.CompareTo(TVAppsAppID) == 0 ||
- appID.CompareTo(MediaHubAppID) == 0 ||
- appID.CompareTo(SettingsAppID) == 0)
- {
- return true;
- }
-
- return false;
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using LibTVRefCommonPortable.Utils;
-
-
-namespace LibTVRefCommonPortable.Models
-{
- /// <summary>
- /// A class provides Recent Shortcut information to the ViewModel
- /// The Recent Shortcut can be an app which is recently used and
- /// a content which is recently consumed in the TV.
- /// </summary>
- public class RecentShortcutController
- {
- /// <summary>
- /// A method removes a Recent Shortcut.
- /// </summary>
- /// <param name="appId">a Recent Shortcut's appId to be removed.</param>
- public void Remove(string appId)
- {
- RecentShortcutStorage.Delete(appId);
- }
-
- /// <summary>
- /// A method removes all Recent Shortcuts.
- /// </summary>
- public void RemoveAll()
- {
- RecentShortcutStorage.DeleteAll();
- }
-
- /// <summary>
- /// A method provides a Recent Shortcut list.
- /// </summary>
- /// <returns>A Recent Shortcut list.</returns>
- public IEnumerable<RecentShortcutInfo> GetList()
- {
- return RecentShortcutStorage.Read();
- }
- }
-}
+++ /dev/null
-using System.Resources;
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("LibTVRefCommonPortable")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("LibTVRefCommonPortable")]
-[assembly: AssemblyCopyright("Copyright © 2014")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-[assembly: NeutralResourcesLanguage("en")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+++ /dev/null
-<StyleCopSettings Version="105">
- <GlobalSettings>
- <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
- </GlobalSettings>
- <Analyzers>
- <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
- <Rules>
- <Rule Name="ElementsMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustHaveSummaryText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="EnumerationItemsMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationMustContainValidXml">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustHaveSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PartialElementDocumentationMustHaveSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustNotHaveDefaultSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="VoidReturnValueMustNotBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParametersMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParametersMustBeDocumentedPartialClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustHaveText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertySummaryDocumentationMustMatchAccessors">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustNotBeCopiedAndPasted">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationTextMustNotBeEmpty">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationTextMustContainWhitespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationMustMeetCharacterPercentage">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationHeadersMustNotContainBlankLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncludedDocumentationXPathDoesNotExist">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncludeNodeDoesNotContainValidFileAndPath">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="InheritDocMustBeUsedWithInheritingClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustBeSpelledCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMustHaveHeader">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustShowCopyright">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustHaveCopyrightText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustContainFileName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderFileNameDocumentationMustMatchFileName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustHaveValidCompanyText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderFileNameDocumentationMustMatchTypeName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
- <Rules>
- <Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustBeginWithLowerCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotContainUnderscore">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementMustBeginWithLowerCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotUseHungarianNotation">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="VariableNamesMustNotBePrefixed">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotBeginWithUnderscore">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticReadonlyFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
- <Rules>
- <Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleBlankLinesInARow">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentMustBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustBeSeparatedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.MaintainabilityRules">
- <Rules>
- <Rule Name="AccessModifierMustBeDeclared">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldsMustBePrivate">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeAnalysisSuppressionMustHaveJustification">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DebugAssertMustProvideMessageText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DebugFailMustProvideMessageText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMayOnlyContainASingleClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMayOnlyContainASingleNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StatementMustNotUseUnnecessaryParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ArithmeticExpressionsMustDeclarePrecedence">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConditionalExpressionsMustDeclarePrecedence">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="RemoveDelegateParenthesisWhenPossible">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="AttributeConstructorMustNotUseUnnecessaryParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="RemoveUnnecessaryCode">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
- <Rules>
- <Rule Name="UsingDirectivesMustBePlacedWithinNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustAppearInTheCorrectOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustBeOrderedByAccess">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConstantsMustAppearBeforeFields">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticElementsMustAppearBeforeInstanceElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DeclarationKeywordsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ProtectedMustComeBeforeInternal">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertyAccessorsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="EventAccessorsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NoValueFirstComparison">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingStaticDirectivesMustBePlacedAfterUsingNamespaceDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">
- <Rules>
- <Rule Name="CommentsMustContainText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PrefixLocalCallsWithThis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PrefixCallsCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningParenthesisMustBeOnDeclarationLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CommaMustBeOnSameLineAsPreviousParameter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterListMustFollowDeclaration">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterMustFollowComma">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SplitParametersMustStartOnLineAfterDeclaration">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParametersMustBeOnSameLineOrSeparateLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterMustNotSpanMultipleLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClauseMustFollowPreviousClause">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClausesMustBeOnSeparateLinesOrAllOnOneLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClausesSpanningMultipleLinesMustBeginOnOwnLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotPlaceRegionsWithinElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainEmptyStatements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleStatementsOnOneLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="BlockStatementsMustNotContainEmbeddedComments">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="BlockStatementsMustNotContainEmbeddedRegions">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseStringEmptyForEmptyStrings">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseBuiltInTypeAlias">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseShorthandForNullableTypes">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
- <Rules>
- <Rule Name="CommasMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SemicolonsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationLinesMustBeginWithSingleSpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustBeginWithSingleSpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PreprocessorKeywordsMustNotBePrecededBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OperatorKeywordMustBeFollowedBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingCurlyBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningGenericBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingGenericBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningAttributeBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingAttributeBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NullableTypeSymbolsMustNotBePrecededBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="MemberAccessSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncrementDecrementSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NegativeSignsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PositiveSignsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ColonsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleWhitespaceInARow">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="TabsMustNotBeUsed">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotSplitNullConditionalOperators">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- </Analyzers>
-</StyleCopSettings>
\ No newline at end of file
+++ /dev/null
-/*
- * 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 System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-
-namespace LibTVRefCommonPortable.Stubs
-{
- /// <summary>
- /// A unit testing stub of IApplicationManagerAPIs.
- /// </summary>
- public class ApplicationManagerAPITestStub : IApplicationManagerAPIs
- {
- /// <summary>
- /// A method for removing all recent applications
- /// </summary>
- public void DeleteAllRecentApplication()
- {
- throw new NotImplementedException();
- }
-
- /// <summary>
- /// A method for removing the specified recent application
- /// </summary>
- /// <param name="appId">An application ID</param>
- public void DeleteRecentApplication(string appId)
- {
- throw new NotImplementedException();
- }
-
- /// <summary>
- /// A method provides installed application list.
- /// </summary>
- /// <returns>An installed application list</returns>
- public Task<IEnumerable<InstalledApp>> GetAllInstalledApplication()
- {
- return Task.Run(() =>
- {
- List<InstalledApp> installedApps = new List<InstalledApp>();
-
- installedApps.Add(new InstalledApp
- {
- Applabel = "app1",
- AppID = "app1",
- IconPath = "path/app1",
- InstalledTime = new DateTime(2017, 05, 02),
- });
-
- installedApps.Add(new InstalledApp
- {
- Applabel = "app2.removable",
- AppID = "app2.removable",
- IconPath = "path/app2",
- InstalledTime = new DateTime(2017, 05, 02),
- });
-
- installedApps.Add(new InstalledApp
- {
- Applabel = "invalid.app3.noid",
- IconPath = "path/app3",
- InstalledTime = new DateTime(2017, 05, 02),
- });
-
- installedApps.Add(new InstalledApp
- {
- Applabel = "app4.noicon",
- AppID = "app4.noicon",
- InstalledTime = new DateTime(2017, 05, 02),
- });
-
- installedApps.Add(new InstalledApp
- {
- Applabel = "app5.nolabel",
- AppID = "app5.nolabel",
- IconPath = "path/app5",
- InstalledTime = new DateTime(2017, 05, 02),
- });
-
- installedApps.Add(new InstalledApp
- {
- Applabel = "invalid.org.tizen.xahome",
- AppID = "org.tizen.xahome",
- IconPath = "path/app3",
- InstalledTime = new DateTime(2017, 05, 02),
- });
-
- installedApps.Add(new InstalledApp
- {
- Applabel = "invalid.org.tizen.xaapps",
- AppID = "org.tizen.xaapps",
- IconPath = "path/app4",
- InstalledTime = new DateTime(2017, 05, 02),
- });
-
- installedApps.Add(new InstalledApp
- {
- Applabel = "invalid.org.tizen.xamediahub",
- AppID = "org.tizen.xamediahub",
- IconPath = "path/app5",
- InstalledTime = new DateTime(2017, 05, 02),
- });
-
- installedApps.Add(new InstalledApp
- {
- Applabel = "invalid.org.tizen.settings",
- AppID = "org.tizen.settings",
- IconPath = "path/app6",
- InstalledTime = new DateTime(2017, 05, 02),
- });
-
- return (IEnumerable<InstalledApp>)installedApps;
- });
- }
-
- /// <summary>
- /// Gets the app ID by the app label
- /// </summary>
- /// <param name="appLabel">the app label to get</param>
- /// <returns>the app ID of the app label</returns>
- public Task<string> GetAppIDbyAppLabel(string appLabel)
- {
- throw new NotImplementedException();
- }
-
- /// <summary>
- /// Checks whether application is removable
- /// </summary>
- /// <param name="appID">The app ID to get</param>
- /// <returns>If the application is removable, true; otherwise, false</returns>
- public bool GetAppInfoRemovable(string appID)
- {
- return appID.Contains("removable");
- }
-
- /// <summary>
- /// A method provides application information which is matched with the given app ID.
- /// </summary>
- /// <param name="applicationId">An application ID</param>
- /// <returns>An installed application information</returns>
- public InstalledApp GetInstalledApplication(string applicationId)
- {
- return new InstalledApp
- {
- AppID = applicationId,
- Applabel = applicationId,
- IconPath = "path/" + applicationId,
- InstalledTime = DateUtils.GetRandomDate(),
- };
- }
-
- /// <summary>
- /// A method provides a recent application list.
- /// </summary>
- /// <returns>A Recent application list.</returns>
- public IEnumerable<RecentApp> GetRecentApplications()
- {
- IList<RecentApp> testData = new List<RecentApp>();
-
- testData.Add(new RecentApp
- {
- InstanceID = "recentapp1",
- InstanceLabel = "recentapp1",
- AppID = "org.tizen.recentapp1",
- Applabel = "recentapp1",
- IconPath = "/test/recentapp1",
- LaunchedTime = new DateTime(2014, 11, 12),
- Uri = "uri/recentapp1",
- ScreenShot = "screenshot/recentapp1",
- });
- testData.Add(new RecentApp
- {
- InstanceID = "recentapp2.noscreenshot",
- InstanceLabel = "recentapp2.noscreenshot",
- AppID = "org.tizen.recentapp2.noscreenshot",
- Applabel = "recentapp2.noscreenshot",
- IconPath = "/test/recentapp2",
- LaunchedTime = new DateTime(2014, 11, 12),
- Uri = "uri/recentapp2",
- });
- testData.Add(new RecentApp
- {
- InstanceID = "invalid.recentapp3.nolabel",
- AppID = "invalid.org.tizen.recentapp3.nolabel",
- IconPath = "/test/recentapp3",
- LaunchedTime = new DateTime(2014, 11, 12),
- Uri = "uri/recentapp3",
- ScreenShot = "screenshot/recentapp3",
- });
- testData.Add(new RecentApp
- {
- InstanceID = "invalid.recentapp4.notime",
- AppID = "invalid.org.tizen.recentapp4.notime",
- Applabel = "recentapp4.notime",
- IconPath = "/test/recentapp4",
- Uri = "uri/recentapp4",
- ScreenShot = "screenshot/recentapp4",
- });
- testData.Add(new RecentApp
- {
- InstanceID = "recentapp5",
- InstanceLabel = "recentapp5",
- AppID = "org.tizen.recentapp5",
- Applabel = "recentapp5",
- IconPath = "/test/recentapp5",
- LaunchedTime = new DateTime(2017, 05, 02),
- Uri = "uri/recentapp5",
- ScreenShot = "screenshot/recentapp5",
- });
- testData.Add(new RecentApp
- {
- InstanceID = "recentapp6",
- InstanceLabel = "recentapp6",
- AppID = "org.tizen.recentapp6",
- Applabel = "recentapp6",
- IconPath = "/test/recentapp6",
- LaunchedTime = new DateTime(2017, 02, 26),
- Uri = "uri/recentapp6",
- ScreenShot = "screenshot/recentapp6",
- });
- testData.Add(new RecentApp
- {
- InstanceID = "recentapp7",
- InstanceLabel = "recentapp7",
- AppID = "org.tizen.recentapp7",
- Applabel = "recentapp7",
- IconPath = "/test/recentapp7",
- LaunchedTime = new DateTime(2016, 04, 25),
- Uri = "uri/recentapp7",
- ScreenShot = "screenshot/recentapp7",
- });
-
- return testData;
- }
- }
-}
+++ /dev/null
-/*
- * 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 System;
-using System.IO;
-using System.Text;
-
-namespace LibTVRefCommonPortable.Stubs
-{
- /// <summary>
- /// A unit test stub for FileSystemUtils
- /// </summary>
- public class FileSystemAPITestStub : IFileSystemAPIs
- {
- /// <summary>
- /// A directory path which should be used for app data storing.
- /// </summary>
- public string AppDataStorage
- {
- get
- {
- return "test_app_data_path/";
- }
- }
-
- /// <summary>
- /// A directory path which should be used for app resource storing.
- /// </summary>
- public string AppResourceStorage
- {
- get
- {
- return "test_app_resource_path/";
- }
- }
-
- /// <summary>
- /// A directory path which should be used for sharing between apps.
- /// </summary>
- public string PlatformShareStorage
- {
- get
- {
- return "test_platform_share_path/";
- }
- }
-
- /// <summary>
- /// A method closes the file.
- /// </summary>
- /// <param name="stream">A file descriptor</param>
- public void CloseFile(Stream stream)
- {
- }
-
- /// <summary>
- /// A method flushing the stream to write remains.
- /// </summary>
- /// <param name="stream">A file descriptor</param>
- public void Flush(Stream stream)
- {
- }
-
- /// <summary>
- /// A method checks if a file existence in the file system.
- /// </summary>
- /// <param name="filePath">A file path</param>
- /// <returns>An existence of the file</returns>
- public bool IsFileExist(string filePath)
- {
- return true;
- }
-
- /// <summary>
- /// A method checks if file is read to use.
- /// </summary>
- /// <param name="filePath">A file path</param>
- /// <returns>A status of ready</returns>
- public bool IsFileReady(string filePath)
- {
- return true;
- }
-
- /// <summary>
- /// A method opens a file on the given mode.
- /// </summary>
- /// <param name="filePath">A file path</param>
- /// <param name="mode">An opening mode</param>
- /// <returns>A file descriptor</returns>
- public Stream OpenFile(string filePath, UtilFileMode mode)
- {
- if (mode != UtilFileMode.Open)
- {
- throw new NotImplementedException();
- }
-
- if (filePath.Contains("pinned_apps_info"))
- {
- StringBuilder pinnedApps = new StringBuilder();
-
- pinnedApps.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
- pinnedApps.Append("<ArrayOfAppShortcutInfo");
- pinnedApps.Append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
- pinnedApps.Append(" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.xahome</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.xaapps</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.xamediahub</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.settings</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.TocToc.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.YouTube.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.Toda.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.Butterfly4.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.Butterfly5.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.Butterfly6.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.Butterfly7.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.Butterfly8.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.Butterfly9.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.Butterfly10.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID>org.tizen.example.Butterfly11.Tizen</AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append(" <AppShortcutInfo>");
- pinnedApps.Append(" <AppID></AppID>");
- pinnedApps.Append(" </AppShortcutInfo>");
- pinnedApps.Append("</ArrayOfAppShortcutInfo>");
-
- MemoryStream stream = new MemoryStream();
- StreamWriter writer = new StreamWriter(stream);
- writer.Write(pinnedApps.ToString());
- writer.Flush();
- stream.Position = 0;
- return stream;
- }
-
- throw new NotImplementedException();
- }
- }
-}
+++ /dev/null
-/*
- * 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 System;
-
-namespace LibTVRefCommonPortable.Stubs
-{
- /// <summary>
- /// A unit test stub for FileSystemUtils
- /// </summary>
- public class FileWatcherAPITestStub : IFileSystemWatcherAPIs
- {
- /// <summary>
- /// A EventHandler for the file system watcher.
- /// </summary>
- public event EventHandler<EventArgs> CustomChanged;
-
- /// <summary>
- /// A method starts the file system watcher.
- /// </summary>
- /// <param name="path">Target file path</param>
- /// <param name="fileName">Target file name</param>
- public void Run(String path, String fileName)
- {
- CustomChanged?.Invoke(this, EventArgs.Empty);
-
- }
- }
-}
+++ /dev/null
-/*
- * 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 System;
-using System.Collections.Generic;
-
-namespace LibTVRefCommonPortable.Stubs
-{
- /// <summary>
- /// A unit testing stub for MediaContentUtils
- /// </summary>
- public class MediaContentAPITestStub : IMediaContentAPIs
- {
- /// <summary>
- /// A method for getting recently played media content list
- /// </summary>
- /// <param name="limitation">Maximum count of list</param>
- /// <returns>The recently played media content list</returns>
- public IEnumerable<RecentlyPlayedMedia> GetRecentlyPlayedMedia(int limitation)
- {
- IList<RecentlyPlayedMedia> recentlyPlayed = new List<RecentlyPlayedMedia>();
-
- recentlyPlayed.Add(new RecentlyPlayedMedia
- {
- MediaId = "id/recent_media1",
- ThumbnailPath = "thumbnail/recent_media1",
- FilePath = "filepath/recent_media1",
- DisplayName = "recent_media1",
- PlayedAt = new DateTime(2017, 05, 22),
- });
-
- recentlyPlayed.Add(new RecentlyPlayedMedia
- {
- MediaId = "invalid.recent_media2.nofilepath",
- ThumbnailPath = "invalid.recent_media2.nofilepath",
- DisplayName = "invalid.recent_media2.nofilepath",
- PlayedAt = new DateTime(2017, 2, 26),
- });
-
- recentlyPlayed.Add(new RecentlyPlayedMedia
- {
- MediaId = "id/recent_media3.nothumbnail",
- FilePath = "filepath/recent_media3.nothumbnail",
- DisplayName = "recent_media3.nothumbnail",
- PlayedAt = new DateTime(2016, 4, 25),
- });
-
- recentlyPlayed.Add(new RecentlyPlayedMedia
- {
- MediaId = "id/recent_media4",
- ThumbnailPath = "thumbnail/recent_media4",
- FilePath = "filepath/recent_media4",
- DisplayName = "recent_media4",
- PlayedAt = new DateTime(2015, 12, 7),
- });
-
- recentlyPlayed.Add(new RecentlyPlayedMedia
- {
- MediaId = "id/recent_media5",
- ThumbnailPath = "thumbnail/recent_media5",
- FilePath = "filepath/recent_media5",
- DisplayName = "recent_media5",
- PlayedAt = new DateTime(2015, 10, 1),
- });
-
- recentlyPlayed.Add(new RecentlyPlayedMedia
- {
- MediaId = "id/recent_media6",
- ThumbnailPath = "thumbnail/recent_media6",
- FilePath = "filepath/recent_media6",
- DisplayName = "recent_media6",
- PlayedAt = new DateTime(2015, 3, 3),
- });
-
- recentlyPlayed.Add(new RecentlyPlayedMedia
- {
- MediaId = "id/recent_media7",
- ThumbnailPath = "thumbnail/recent_media7",
- FilePath = "filepath/recent_media7",
- DisplayName = "recent_media8",
- PlayedAt = new DateTime(2014, 11, 17),
- });
-
- return recentlyPlayed;
- }
- }
-}
+++ /dev/null
-/*
- * 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 Xamarin.Forms;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// A class provides App Control utility APIs.
- /// </summary>
- public sealed class AppControlUtils
- {
- /// <summary>
- /// A method makes the app to be launched.
- /// </summary>
- /// <param name="appID">An application ID of the targeted application.</param>
- /// <param name="extraData">An extra data for App Control invoking.</param>
- /// <param name="fileUri">A file Uri to be opened.</param>
- public static void SendLaunchRequest(string appID, IDictionary<string, string> extraData = null, string fileUri = null)
- {
- if (DependencyService.Get<IAppControl>() == null)
- {
- return;
- }
-
- DependencyService.Get<IAppControl>().SendLaunchRequest(appID, extraData, fileUri);
- }
-
- /// <summary>
- /// A method sends a add pin request App Control to TVApps app.
- /// </summary>
- public static void SendAddAppRequestToApps()
- {
- if (DependencyService.Get<IAppControl>() == null)
- {
- return;
- }
-
- DependencyService.Get<IAppControl>().SendAddAppRequestToApps();
- }
-
- /// <summary>
- /// A method sends a pin added notification App control to TVHome app.
- /// </summary>
- /// <param name="addedAddID">An app ID of newly added.</param>
- public static void SendAppAddedNotificationToHome(string addedAddID)
- {
- if (DependencyService.Get<IAppControl>() == null)
- {
- return;
- }
-
- DependencyService.Get<IAppControl>().SendAppAddedNotificationToHome(addedAddID);
- }
-
- /// <summary>
- /// A method terminates caller application.
- /// </summary>
- public static void SelfTerminate()
- {
- if (DependencyService.Get<IAppLifeControl>() == null)
- {
- return;
- }
-
- DependencyService.Get<IAppLifeControl>().SelfTerminate();
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Collections.Generic;
-using System.Xml.Serialization;
-using System.IO;
-using LibTVRefCommonPortable.DataModels;
-using System.Threading.Tasks;
-using System.Diagnostics;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// A class manages App Shortcuts by using subsystem.
- /// </summary>
- public class AppShortcutStorage
- {
- /// <summary>
- /// A storage path.
- /// </summary>
- private static String StoragePath;
-
- /// <summary>
- /// A file system watcher which checks if the targeted storage is changed.
- /// </summary>
- private static IFileSystemWatcherAPIs fileSystemWatcher = FileSystemUtils.Instance.FileSysteamWatcherInstance;
-
- /// <summary>
- /// An instance of AppShortcutStorage.
- /// </summary>
- private static AppShortcutStorage instance = new AppShortcutStorage();
-
- /// <summary>
- /// An instance of AppShortcutStorage.
- /// </summary>
- public static AppShortcutStorage Instance
- {
- get { return instance; }
- }
-
- /// <summary>
- /// A constructor of AppShortcutStorage.
- /// </summary>
- private AppShortcutStorage()
- {
- StoragePath = FileSystemUtils.Instance.PlatformShareStorage + "pinned_apps_info.xml";
-
- CheckStorage();
-
- fileSystemWatcher.Run(FileSystemUtils.Instance.PlatformShareStorage, "pinned_apps_info.xml");
- }
-
- /// <summary>
- /// Check if the storage is exist
- /// </summary>
- private static void CheckStorage()
- {
- if (FileSystemUtils.Instance.IsFileExist(StoragePath) == false)
- {
- DebuggingUtils.Err("Set Default Pinned Apps" + StoragePath);
- List<AppShortcutInfo> result = new List<AppShortcutInfo>();
- Write(result);
- }
- }
-
- /// <summary>
- /// A method provides an app Shortcut list.
- /// </summary>
- /// <returns>An app Shortcut list.</returns>
- public static async Task<IEnumerable<AppShortcutInfo>> Read()
- {
- CheckStorage();
-
- for (int i = 0; i <= 6; i++)
- {
- if (FileSystemUtils.Instance.IsFileReady(StoragePath))
- {
- break;
- }
- else if (i == 6)
- {
- DebuggingUtils.Err("Can't open storage" + StoragePath);
- return new List<AppShortcutInfo>();
- }
-
- await Task.Delay(100);
- DebuggingUtils.Dbg("[" + i + "] Waiting for Writing" + StoragePath);
- }
-
- using (Stream fileStream = FileSystemUtils.Instance.OpenFile(StoragePath, UtilFileMode.Open))
- {
- Debug.Assert(fileStream != null);
-
- XmlSerializer serializer = new XmlSerializer(typeof(List<AppShortcutInfo>));
- StreamReader streamReader = new StreamReader(fileStream);
- List<AppShortcutInfo> list = (List<AppShortcutInfo>)serializer.Deserialize(streamReader);
-
- return list;
- }
- }
-
- /// <summary>
- /// A method updates App Shortcuts of the storage
- /// </summary>
- /// <param name="pinnedAppInfo">An app Shortcuts that pinned by a user.</param>
- /// <returns>A status of storage update.</returns>
- public static bool Write(IEnumerable<AppShortcutInfo> pinnedAppInfo)
- {
- using (Stream fileStream = FileSystemUtils.Instance.OpenFile(StoragePath, UtilFileMode.Create))
- {
- Debug.Assert(fileStream != null);
-
- XmlSerializer serializer = new XmlSerializer(typeof(List<AppShortcutInfo>));
- StreamWriter streamWriter = new StreamWriter(fileStream);
- serializer.Serialize(streamWriter, pinnedAppInfo);
- streamWriter.Flush();
- }
-
- return true;
- }
-
- /// <summary>
- /// A method sets an event listener for the storage watcher
- /// </summary>
- /// <param name="eventListener">An event handler for the storage event </param>
- public void AddStorageChangedListener(EventHandler<EventArgs> eventListener)
- {
- fileSystemWatcher.CustomChanged += eventListener;
- }
- }
-}
+++ /dev/null
-/*
- * 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.Stubs;
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Xamarin.Forms;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// A class provides application controlling functions
- /// </summary>
- public sealed class ApplicationManagerUtils
- {
- /// <summary>
- /// A instance of platform specific application manager port.
- /// </summary>
- private static IApplicationManagerAPIs applicationManagerAPIs;
-
- /// <summary>
- /// A instance of ApplicationManagerUtils
- /// </summary>
- private static readonly ApplicationManagerUtils instance = new ApplicationManagerUtils();
-
- /// <summary>
- /// A getter of ApplicationManagerUtils instance
- /// </summary>
- public static ApplicationManagerUtils Instance
- {
- get
- {
- return instance;
- }
- }
-
- /// <summary>
- /// A constructor
- /// </summary>
- private ApplicationManagerUtils()
- {
- applicationManagerAPIs = new ApplicationManagerAPITestStub();
-
- try
- {
- if (DependencyService.Get<IApplicationManagerAPIs>() != null)
- {
- applicationManagerAPIs = DependencyService.Get<IApplicationManagerAPIs>();
- }
- }
- catch (InvalidOperationException e)
- {
- DebuggingUtils.Err(e.Message);
- }
- }
-
- /// <summary>
- /// A method for removing all recent applications
- /// </summary>
- public void DeleteAllRecentApplication()
- {
- applicationManagerAPIs.DeleteAllRecentApplication();
- }
-
- /// <summary>
- /// A method for removing the specified recent application
- /// </summary>
- /// <param name="appId">An application ID</param>
- public void DeleteRecentApplication(string appId)
- {
- applicationManagerAPIs.DeleteRecentApplication(appId);
- }
-
-
- /// <summary>
- /// Gets the information of the recent applications
- /// </summary>
- /// <returns>The list of the recent applications</returns>
- public IEnumerable<RecentApp> GetRecentApplications()
- {
- return applicationManagerAPIs.GetRecentApplications();
- }
-
- /// <summary>
- /// Gets the information of the specified application with the app ID
- /// </summary>
- /// <param name="appID">The app Id to get</param>
- /// <returns>The information of the installed application</returns>
- public InstalledApp GetInstalledApplication(string appID)
- {
- return applicationManagerAPIs.GetInstalledApplication(appID);
- }
-
- /// <summary>
- /// Gets the information of the installed applications asynchronously
- /// </summary>
- /// <returns>The list of the installed applications</returns>
- public Task<IEnumerable<InstalledApp>> GetAllInstalledApplication()
- {
- return applicationManagerAPIs.GetAllInstalledApplication();
- }
-
- /// <summary>
- /// Checks whether application is removable
- /// </summary>
- /// <param name="appID">The app ID to get</param>
- /// <returns>If the application is removable, true; otherwise, false</returns>
- public bool GetAppInfoRemovable(string appID)
- {
- return applicationManagerAPIs.GetAppInfoRemovable(appID);
- }
-
- /// <summary>
- /// Gets the app ID by the app label
- /// </summary>
- /// <param name="appLabel">the app label to get</param>
- /// <returns>the app ID of the app label</returns>
- public Task<string> GetAppIDbyAppLabel(string appLabel)
- {
- return applicationManagerAPIs.GetAppIDbyAppLabel(appLabel);
- }
- }
-}
+++ /dev/null
-/*
- * 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.Utils
-{
- /// <summary>
- /// A class provides Date, Time related functions
- /// </summary>
- public class DateUtils
- {
- /// <summary>
- /// A random seed
- /// </summary>
- private static Random seed = new Random();
-
- /// <summary>
- /// A method provides a random date.
- /// </summary>
- /// <returns>A date</returns>
- public static DateTime GetRandomDate()
- {
- DateTime baseDate = DateTime.Now.AddYears(-10);
- return baseDate.AddDays(seed.Next((DateTime.Now - baseDate).Days));
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Runtime.CompilerServices;
-using Xamarin.Forms;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// A debugging utility class.
- /// </summary>
- public sealed class DebuggingUtils
- {
- /// <summary>
- /// A debugging API interface
- /// </summary>
- private static IDebuggingAPIs ism;
-
- /// <summary>
- /// An instance of DebuggingUtils
- /// </summary>
- private static readonly DebuggingUtils instance = new DebuggingUtils();
-
- /// <summary>
- /// A method provides instance of DebuggingUtils. </summary>
- public static DebuggingUtils Instance
- {
- get { return instance; }
- }
-
- /// <summary>
- /// Default implementation of IDebuggingAPIs interface .
- /// This is required for the unit testing of the Calculator application.
- /// </summary>
- private class DefaultSM : IDebuggingAPIs
- {
- /// <summary>
- /// A method displays an error log.
- /// </summary>
- /// <param name="message"> An error message.</param>
- /// <param name="file"> A file name.</param>
- /// <param name="func"> A function name.</param>
- /// <param name="line"> A line number.</param>
- public void Dbg(string message, String file, String func, Int32 line)
- {
- }
-
- /// <summary>
- /// A method displays a dialog with a given message.
- /// </summary>
- /// <param name="message"> A debugging message.</param>
- /// <param name="file"> A file name.</param>
- /// <param name="func"> A function name.</param>
- /// <param name="line"> A line number.</param>
- public void Err(string message, String file, String func, Int32 line)
- {
- }
-
- /// <summary>
- /// A method displays a debugging log.
- /// </summary>
- /// <param name="message"> A debugging message.</param>
- public void Popup(string message)
- {
- }
- }
-
- /// <summary>
- /// DebuggingUtils constructor which set interface instance.
- /// </summary>
- private DebuggingUtils()
- {
- ism = new DefaultSM();
-
- try
- {
- if (DependencyService.Get<IDebuggingAPIs>() != null)
- {
- ism = DependencyService.Get<IDebuggingAPIs>();
- }
- }
- catch (InvalidOperationException e)
- {
- Err(e.Message);
- }
- }
-
- /// <summary>
- /// A method displays a debugging message
- /// </summary>
- /// <param name="message"> A list of command line arguments.</param>
- /// <param name="file"> A file name.</param>
- /// <param name="func"> A function name.</param>
- /// <param name="line"> A line number.</param>
- public static void Dbg(string message, [CallerFilePath] System.String file = "", [CallerMemberName] System.String func = "", [CallerLineNumber] System.Int32 line = 0)
- {
- ism.Dbg(message, file, func, line);
- }
-
- /// <summary>
- /// A method displays an error message
- /// </summary>
- /// <param name="message"> A list of command line arguments.</param>
- /// <param name="file"> A file name.</param>
- /// <param name="func"> A function name.</param>
- /// <param name="line"> A line number.</param>
- public static void Err(string message, [CallerFilePath] System.String file = "", [CallerMemberName] System.String func = "", [CallerLineNumber] System.Int32 line = 0)
- {
- ism.Err(message, file, func, line);
- }
-
- /// <summary>
- /// A method displays a pop up message
- /// </summary>
- /// <param name="message"> A list of command line arguments.</param>
- public static void Popup(string message)
- {
- ism.Popup(message);
- }
- }
-}
+++ /dev/null
-/*
- * 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.Stubs;
-using System;
-using System.IO;
-using Xamarin.Forms;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// A class for file system control function.
- /// </summary>
- class FileSystemUtils
- {
- /// <summary>
- /// A instance of file system port layer
- /// </summary>
- private static IFileSystemAPIs fileSystemAPIs;
-
- /// <summary>
- /// A instance of file system watcher port layer
- /// </summary>
- private static IFileSystemWatcherAPIs fileSystemWatcherAPIs;
-
- /// <summary>
- /// A instance of FileSystemUtils
- /// </summary>
- private static readonly FileSystemUtils instance = new FileSystemUtils();
-
- /// <summary>
- /// A property of FileSystemUtils instance
- /// </summary>
- public static FileSystemUtils Instance
- {
- get
- {
- return instance;
- }
- }
-
- /// <summary>
- /// A property of file system watcher instance
- /// </summary>
- public IFileSystemWatcherAPIs FileSysteamWatcherInstance
- {
- get
- {
- return fileSystemWatcherAPIs;
- }
- }
-
- /// <summary>
- /// A constructor
- /// </summary>
- private FileSystemUtils()
- {
- fileSystemAPIs = new FileSystemAPITestStub();
- fileSystemWatcherAPIs = new FileWatcherAPITestStub();
-
- try
- {
- if (DependencyService.Get<IFileSystemAPIs>() != null)
- {
- fileSystemAPIs = DependencyService.Get<IFileSystemAPIs>();
- }
-
- if (DependencyService.Get<IFileSystemWatcherAPIs>() != null)
- {
- fileSystemWatcherAPIs = DependencyService.Get<IFileSystemWatcherAPIs>();
- }
- }
- catch (InvalidOperationException e)
- {
- DebuggingUtils.Err(e.Message);
- }
- }
-
- /// <summary>
- /// A directory path which should be used for app data storing.
- /// </summary>
- public string AppDataStorage
- {
- get
- {
- return fileSystemAPIs.AppDataStorage;
- }
- }
-
- /// <summary>
- /// A directory path which should be used for app resource storing.
- /// </summary>
- public string AppResourceStorage
- {
- get
- {
- return fileSystemAPIs.AppResourceStorage;
- }
- }
-
- /// <summary>
- /// A directory path which should be used for sharing between apps.
- /// </summary>
- public string PlatformShareStorage
- {
- get
- {
- return fileSystemAPIs.PlatformShareStorage;
- }
- }
-
- /// <summary>
- /// A method opens a file on the given mode.
- /// </summary>
- /// <param name="filePath">A file path</param>
- /// <param name="mode">An opening mode</param>
- /// <returns>A file descriptor</returns>
- public Stream OpenFile(string filePath, UtilFileMode mode)
- {
- return fileSystemAPIs.OpenFile(filePath, mode);
- }
-
- /// <summary>
- /// A method flushing the stream to write remains.
- /// </summary>
- /// <param name="stream">A file descriptor</param>
- public void Flush(Stream stream)
- {
- fileSystemAPIs.Flush(stream);
- }
-
- /// <summary>
- /// A method closes the file.
- /// </summary>
- /// <param name="stream">A file descriptor</param>
- public void CloseFile(Stream stream)
- {
- fileSystemAPIs.CloseFile(stream);
- }
-
- /// <summary>
- /// A method checks if a file existence in the file system.
- /// </summary>
- /// <param name="filePath">A file path</param>
- /// <returns>An existence of the file</returns>
- public bool IsFileExist(String filePath)
- {
- return fileSystemAPIs.IsFileExist(filePath);
- }
-
- /// <summary>
- /// A method checks if file is read to use.
- /// </summary>
- /// <param name="filePath">A file path</param>
- /// <returns>A status of ready</returns>
- public bool IsFileReady(String filePath)
- {
- return fileSystemAPIs.IsFileReady(filePath);
- }
-
-
- }
-}
+++ /dev/null
-/*
- * 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;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// An interface for App Control feature
- /// </summary>
- public interface IAppControl
- {
- /// <summary>
- /// Sends the launch request
- /// </summary>
- /// <param name="appId"> The app ID to explicitly launch</param>
- /// <param name="extraData">The extra data for the app control</param>
- /// <param name="fileUri">The file uri to be opened</param>
- void SendLaunchRequest(string appId, IDictionary<string, string> extraData, string fileUri);
-
- /// <summary>
- /// A method sends add pin request App Control to TVApps app.
- /// </summary>
- void SendAddAppRequestToApps();
-
- /// <summary>
- /// A method sends a pin added notification App control to TVHome app.
- /// </summary>
- /// <param name="addedAddID">An app ID of newly added.</param>
- void SendAppAddedNotificationToHome(string addedAddID);
- }
-}
+++ /dev/null
-/*
- * 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>
- /// An interface for app life management.
- /// </summary>
- public interface IAppLifeControl
- {
- /// <summary>
- /// A method terminates the caller app.
- /// </summary>
- void SelfTerminate();
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// A class to store RecentApp information.
- /// </summary>
- public class RecentApp
- {
- /// <summary>
- /// A Recent instance ID
- /// </summary>
- public String InstanceID;
-
- /// <summary>
- /// A Recent instance label
- /// </summary>
- public String InstanceLabel;
-
- /// <summary>
- /// An app ID
- /// </summary>
- public String AppID;
-
- /// <summary>
- /// An app label
- /// </summary>
- public String Applabel;
-
- /// <summary>
- /// An app icon path
- /// </summary>
- public String IconPath;
-
- /// <summary>
- /// A last launched date
- /// </summary>
- public DateTime LaunchedTime;
-
- /// <summary>
- /// A URI of accessible content if the Recent is a content.
- /// </summary>
- public String Uri;
-
- /// <summary>
- /// A File Path of screenshot of the recent app or recent content.
- /// </summary>
- public String ScreenShot;
- }
-
- /// <summary>
- /// A class to store installed app information.
- /// </summary>
- public class InstalledApp
- {
- /// <summary>
- /// An app ID
- /// </summary>
- public String AppID;
-
- /// <summary>
- /// An app label
- /// </summary>
- public String Applabel;
-
- /// <summary>
- /// An app icon path
- /// </summary>
- public String IconPath;
-
- /// <summary>
- /// A installed date
- /// </summary>
- public DateTime InstalledTime;
- }
-
- /// <summary>
- /// An interface for Application Manager feature
- /// </summary>
- public interface IApplicationManagerAPIs
- {
- /// <summary>
- /// A method provides installed application list.
- /// </summary>
- /// <returns>An installed application list</returns>
- Task<IEnumerable<InstalledApp>> GetAllInstalledApplication();
-
- /// <summary>
- /// A method provides a recent application list.
- /// </summary>
- /// <returns>A Recent application list.</returns>
- IEnumerable<RecentApp> GetRecentApplications();
-
- /// <summary>
- /// A method provides application information which is matched with the given app ID.
- /// </summary>
- /// <param name="applicationId">An application ID</param>
- /// <returns>An installed application information</returns>
- InstalledApp GetInstalledApplication(string applicationId);
-
- /// <summary>
- /// A method for removing all recent applications
- /// </summary>
- void DeleteAllRecentApplication();
-
- /// <summary>
- /// A method for removing the specified recent application
- /// </summary>
- /// <param name="appId">An application ID</param>
- void DeleteRecentApplication(string appId);
-
- /// <summary>
- /// Checks whether application is removable
- /// </summary>
- /// <param name="appID">The app ID to get</param>
- /// <returns>If the application is removable, true; otherwise, false</returns>
- bool GetAppInfoRemovable(string appID);
-
- /// <summary>
- /// Gets the app ID by the app label
- /// </summary>
- /// <param name="appLabel">the app label to get</param>
- /// <returns>the app ID of the app label</returns>
- Task<string> GetAppIDbyAppLabel(string appLabel);
- }
-}
+++ /dev/null
-/*
- * 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.Utils
-{
- /// <summary>
- /// An interface contains debugging methods which are using platform subsystems.
- /// </summary>
- /// <remarks>
- /// Implementing this class should be occurred in platform project.
- /// Also the implementation should be registered to the DependencyService in an app initialization.
- /// Please refer to Xamarin Dependency Service
- /// https://developer.xamarin.com/guides/xamarin-forms/dependency-service/introduction/
- /// </remarks>
- public interface IDebuggingAPIs
- {
- /// <summary>
- /// A method displays a debugging log. </summary>
- /// <param name="message"> A debugging message.</param>
- void Popup(string message);
-
- /// <summary>
- /// A method displays an error log. </summary>
- /// <param name="message"> An error message.</param>
- /// <param name="file"> A file name.</param>
- /// <param name="func"> A function name.</param>
- /// <param name="line"> A line number.</param>
- void Dbg(string message, String file, String func, Int32 line);
-
- /// <summary>
- /// A method displays a dialog with a given message. </summary>
- /// <param name="message"> A debugging message.</param>
- /// <param name="file"> A file name.</param>
- /// <param name="func"> A function name.</param>
- /// <param name="line"> A line number.</param>
- void Err(string message, String file, String func, Int32 line);
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.IO;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// An enumeration for the file open mode.
- /// </summary>
- public enum UtilFileMode
- {
- CreateNew = 1,
- Create = 2,
- Open = 3,
- OpenOrCreate = 4,
- Truncate = 5,
- Append = 6
- }
-
- /// <summary>
- /// An interface for the file operations
- /// </summary>
- public interface IFileSystemAPIs
- {
- /// <summary>
- /// A directory path which should be used for app data storing.
- /// </summary>
- string AppDataStorage
- {
- get;
- }
-
- /// <summary>
- /// A directory path which should be used for app resource storing.
- /// </summary>
- string AppResourceStorage
- {
- get;
- }
-
- /// <summary>
- /// A directory path which should be used for sharing between apps.
- /// </summary>
- string PlatformShareStorage
- {
- get;
- }
-
- /// <summary>
- /// A method opens a file on the given mode.
- /// </summary>
- /// <param name="filePath">A file path</param>
- /// <param name="mode">An opening mode</param>
- /// <returns>A file descriptor</returns>
- Stream OpenFile(string filePath, UtilFileMode mode);
-
- /// <summary>
- /// A method flushing the stream to write remains.
- /// </summary>
- /// <param name="stream">A file descriptor</param>
- void Flush(Stream stream);
-
- /// <summary>
- /// A method closes the file.
- /// </summary>
- /// <param name="stream">A file descriptor</param>
- void CloseFile(Stream stream);
-
- /// <summary>
- /// A method checks if a file existence in the file system.
- /// </summary>
- /// <param name="filePath">A file path</param>
- /// <returns>An existence of the file</returns>
- bool IsFileExist(String filePath);
-
- /// <summary>
- /// A method checks if file is read to use.
- /// </summary>
- /// <param name="filePath">A file path</param>
- /// <returns>A status of ready</returns>
- bool IsFileReady(String filePath);
- }
-}
+++ /dev/null
-/*
- * 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.Utils
-{
- /// <summary>
- /// An interface for the file system watcher.
- /// </summary>
- public interface IFileSystemWatcherAPIs
- {
- /// <summary>
- /// A EventHandler for the file system watcher.
- /// </summary>
- event EventHandler<EventArgs> CustomChanged;
-
- /// <summary>
- /// A method starts the file system watcher.
- /// </summary>
- /// <param name="path">Target file path</param>
- /// <param name="fileName">Target file name</param>
- void Run(String path, String fileName);
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Collections.Generic;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// An information of recently played media content
- /// </summary>
- public struct RecentlyPlayedMedia
- {
- /// <summary>
- /// An ID of media content
- /// </summary>
- public string MediaId;
-
- /// <summary>
- /// A path of media content thumbnail
- /// </summary>
- public string ThumbnailPath;
-
- /// <summary>
- /// A path of media content
- /// </summary>
- public string FilePath;
-
- /// <summary>
- /// A title of media content
- /// </summary>
- public string DisplayName;
-
- /// <summary>
- /// Last played time of media content
- /// </summary>
- public DateTime PlayedAt;
- }
-
- /// <summary>
- /// An interface for getting recently played media contents.
- /// </summary>
- public interface IMediaContentAPIs
- {
- /// <summary>
- /// A method for getting recently played media content list
- /// </summary>
- /// <param name="limitation">Maximum count of list</param>
- /// <returns>The recently played media content list</returns>
- IEnumerable<RecentlyPlayedMedia> GetRecentlyPlayedMedia(int limitation);
- }
-}
+++ /dev/null
-/*
- * 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;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// An interface for package manager subsystem.
- /// </summary>
- public interface IPackageManager
- {
- /// <summary>
- /// A method provides installed package list.
- /// </summary>
- /// <returns>A package list</returns>
- Dictionary<string, string[]> GetPackageList();
-
- /// <summary>
- /// A method provides a detail information (TBD)
- /// </summary>
- /// <param name="pkgID">A package ID</param>
- /// <returns>A package label</returns>
- string GetPackageLabel(string pkgID);
-
- /// <summary>
- /// Gets the package ID by the app ID
- /// </summary>
- /// <param name="appID">The app ID to get</param>
- /// <returns>The package ID that contains given app ID</returns>
- string GetPackageIDByAppID(string appID);
-
- /// <summary>
- /// A method removes the package.
- /// </summary>
- /// <param name="pkgID">A package ID</param>
- /// <returns>A status of uninstall</returns>
- bool UninstallPackage(string pkgID);
-
- /// <summary>
- /// A method remove the package by using an app ID.
- /// </summary>
- /// <param name="appID">an app ID</param>
- /// <returns>A status of uninstall</returns>
- bool UninstallPackageByAppID(string appID);
-
- /// <summary>
- /// Gets applications list by the package ID
- /// </summary>
- /// <param name="pkgID">The package ID to get applications</param>
- /// <returns>The list of applications</returns>
- List<string> GetApplicationsByPkgID(string pkgID);
- }
-}
+++ /dev/null
-/*
- * 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>
- /// An interface for the platform notification.
- /// </summary>
- public interface IPlatformNotification
- {
- /// <summary>
- /// A method will be called when the Home remote control key is pressed.
- /// </summary>
- void OnHomeKeyPressed();
-
- /// <summary>
- /// A method will be called when the Menu remote control key is pressed.
- /// </summary>
- void OnMenuKeyPressed();
-
- /// <summary>
- /// A method will be called if an app is installed.
- /// </summary>
- /// <param name="pkgID">A package ID of newly installed.</param>
- void OnAppInstalled(string pkgID);
-
- /// <summary>
- /// A method will be called if an app is uninstalled.
- /// </summary>
- /// <param name="pkgID">A package ID of uninstalled.</param>
- void OnAppUninstalled(string pkgID);
-
- /// <summary>
- /// A method will be called if the app gets a App Control request for pinning a app.
- /// </summary>
- void OnPinAppRequestReceived();
-
- /// <summary>
- /// A method will be called if the app gets an app pinned notification App Control request.
- /// </summary>
- /// <param name="appID">A pinned app ID</param>
- void OnAppPinnedNotificationReceived(string appID);
-
- /// <summary>
- /// A method will be called when the Navigation remote control key is pressed.
- /// </summary>
- /// <param name="keyName">A pressed remote control key name</param>
- void OnNavigationKeyPressed(string keyName);
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace LibTVRefCommonPortable.Utils
-{
- public enum AppState
- {
- HomeMainPanelRecentFocused,
- HomeMainPanelAppsFocused,
- HomeMainPanelSettingsFocused,
- HomeSubPanelRecentFocused,
- HomeSubPanelAppsFocused,
- HomeSubPanelSettingsFocused,
- HomeShowOptions,
- HomeMove,
- HomeIconified,
- }
-
- public interface IStatePublisher
- {
- AppState CurrentState
- {
- get;
- set;
- }
-
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace LibTVRefCommonPortable.Utils
-{
- public interface IStateSubscriber
- {
- void OnStateChanged(AppState state);
- }
-}
+++ /dev/null
-/*
- * 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>
- /// An interface for getting system setting informations.
- /// </summary>
- public interface ISystemSettings
- {
- /// <summary>
- /// A method for getting system model name.
- /// </summary>
- /// <param name="modelName">The system model name</param>
- /// <returns>The result whether getting the modelName is done</returns>
- bool GetSystemModelName(out string modelName);
- }
-}
+++ /dev/null
-/*
- * 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.Models;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// An interface for the TVHomeImpl class
- /// The Models' instances in the TVHomeImpl class,
- /// so to use the Models from other files, it should access the instance of the TVHomeImpl.
- /// To reduce dependency between the TVHome and any other file,
- /// the instance of the TVHomeImpl will be provided as a ITVHome interface.
- /// </summary>
- public interface ITVHome
- {
- /// <summary>
- /// An instance of the AppShortcutController
- /// </summary>
- /// <see cref="AppShortcutController"/>
- AppShortcutController AppShortcutControllerInstance
- {
- get;
- }
-
- /// <summary>
- /// An instance of the RecentShortcutController
- /// </summary>
- /// <see cref="RecentShortcutController"/>
- RecentShortcutController RecentShortcutControllerInstance
- {
- get;
- }
- }
-}
+++ /dev/null
-/*
- * 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>
- /// An interface for the Window management.
- /// </summary>
- public interface IWindowAPIs
- {
- /// <summary>
- /// A method minimizes the app's window.
- /// </summary>
- /// <param name="iconified">A minimize status</param>
- void SetIconified(bool iconified);
-
- /// <summary>
- /// A method provides a minimized status of the App.
- /// </summary>
- /// <returns>A status of minimized of app.</returns>
- bool GetIconified();
- }
-}
+++ /dev/null
-/*
- * 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.Stubs;
-using System;
-using System.Collections.Generic;
-using Xamarin.Forms;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// A class provides media contents and related functions.
- /// </summary>
- public class MediaContentUtils
- {
- /// <summary>
- /// A instance of IMediaContentAPIs port.
- /// </summary>
- private static IMediaContentAPIs mediaContentAPIs;
-
- /// <summary>
- /// A instance of MediaContentUtils
- /// </summary>
- private static readonly MediaContentUtils instance = new MediaContentUtils();
-
- /// <summary>
- /// A property of MediaContentUtils instance.
- /// </summary>
- public static MediaContentUtils Instance
- {
- get
- {
- return instance;
- }
- }
-
- /// <summary>
- /// A Constructor
- /// </summary>
- private MediaContentUtils()
- {
- mediaContentAPIs = new MediaContentAPITestStub();
-
- try
- {
- if (DependencyService.Get<IMediaContentAPIs>() != null)
- {
- mediaContentAPIs = DependencyService.Get<IMediaContentAPIs>();
- }
- }
- catch (InvalidOperationException e)
- {
- DebuggingUtils.Err(e.Message);
- }
- }
-
- /// <summary>
- /// A method provides media playing history.
- /// </summary>
- /// <param name="limitation">A number of getting media playing history</param>
- /// <returns>A list of played medias.</returns>
- public IEnumerable<RecentlyPlayedMedia> GetRecentlyPlayedMedia(int limitation)
- {
- return mediaContentAPIs.GetRecentlyPlayedMedia(limitation);
- }
-
- }
-}
+++ /dev/null
-/*
- * 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 Xamarin.Forms;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// A class for package manager function.
- /// </summary>
- public sealed class PackageManagerUtils
- {
- /// <summary>
- /// A method provides installed package list.
- /// </summary>
- /// <returns>A package list</returns>
- public static Dictionary<string, string[]> GetPackageList()
- {
- if (DependencyService.Get<IPackageManager>() == null)
- {
- return new Dictionary<string, string[]>();
- }
-
- return DependencyService.Get<IPackageManager>().GetPackageList();
- }
-
- /// <summary>
- /// A method provides a detail information (TBD)
- /// </summary>
- /// <param name="pkgID">A package ID</param>
- /// <returns>A package label</returns>
- public static string GetPackageLabel(string pkgID)
- {
- if (DependencyService.Get<IPackageManager>() == null)
- {
- return null;
- }
-
- return DependencyService.Get<IPackageManager>().GetPackageLabel(pkgID);
- }
-
- /// <summary>
- /// Gets the pacakge ID by the app ID
- /// </summary>
- /// <param name="appID">The app ID to get</param>
- /// <returns>The pacakge ID that contains given app ID</returns>
- public static string GetPackageIDByAppID(string appID)
- {
- if (DependencyService.Get<IPackageManager>() == null)
- {
- return null;
- }
-
- return DependencyService.Get<IPackageManager>().GetPackageIDByAppID(appID);
- }
-
- /// <summary>
- /// A method removes the package.
- /// </summary>
- /// <param name="pkgID">A package ID</param>
- /// <returns>A status of uninstall</returns>
- public static bool UninstallPackage(string pkgID)
- {
- if (DependencyService.Get<IPackageManager>() == null)
- {
- return false;
- }
-
- return DependencyService.Get<IPackageManager>().UninstallPackage(pkgID);
- }
-
- /// <summary>
- /// A method remove the package by using an app ID.
- /// </summary>
- /// <param name="appID">An app ID</param>
- /// <returns>A status of uninstallation</returns>
- public static bool UninstallPackageByAppID(string appID)
- {
- if (DependencyService.Get<IPackageManager>() == null)
- {
- return false;
- }
-
- return DependencyService.Get<IPackageManager>().UninstallPackageByAppID(appID);
- }
-
- /// <summary>
- /// Gets applications list by the package ID
- /// </summary>
- /// <param name="pkgID">The package ID to get applications</param>
- /// <returns>The list of applications</returns>
- public static List<string> GetApplicationsByPkgID(string pkgID)
- {
- if (DependencyService.Get<IPackageManager>() == null)
- {
- return null;
- }
-
- return DependencyService.Get<IPackageManager>().GetApplicationsByPkgID(pkgID);
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using System;
-using LibTVRefCommonPortable.Models;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// A class to manage the Recent Shortcuts.
- /// </summary>
- public sealed class RecentShortcutStorage
- {
- /// <summary>
- /// A maximum number of recent apps and contents
- /// </summary>
- private static readonly int MaxRecents = 10;
-
- /// <summary>
- /// A method provides all Recent Shortcuts' information list.
- /// </summary>
- /// <returns>a Recent Shortcut information list.</returns>
- public static IEnumerable<RecentShortcutInfo> Read()
- {
- List<RecentShortcutInfo> recentShortcutInfoList = new List<RecentShortcutInfo>();
- IEnumerable<RecentApp> recentApps = null;
-
- try
- {
- recentApps = ApplicationManagerUtils.Instance.GetRecentApplications();
- }
- catch (Exception e)
- {
- DebuggingUtils.Err("GetRecentApplications failed. " + e.Message);
- }
-
- if (recentApps != null)
- {
- foreach (var item in recentApps)
- {
- if (ManagedApps.IsHiddenRecentApp(item.AppID))
- {
- continue;
- }
-
- if (item.Applabel == null || item.Applabel.Length == 0 ||
- item.LaunchedTime.CompareTo(new DateTime()) == 0)
- {
- continue;
- }
-
- var defaultStateDescription = new StateDescription()
- {
- Label = item.Applabel,
- IconPath = item.IconPath,
- Action = new AppControlAction()
- {
- AppID = item.AppID,
- }
- };
- var recentShortcutInfo = new RecentShortcutInfo();
-
- if (item.ScreenShot == null)
- {
- recentShortcutInfo.ScreenshotPath = "screenshot.png";
-
- string capturedAppScreen = FileSystemUtils.Instance.PlatformShareStorage + item.AppID + ".jpg";
- if (FileSystemUtils.Instance.IsFileExist(capturedAppScreen))
- {
- recentShortcutInfo.ScreenshotPath = capturedAppScreen;
- }
- else
- {
- string testScreenShot = FileSystemUtils.Instance.AppResourceStorage + item.AppID + ".png";
- if (FileSystemUtils.Instance.IsFileExist(testScreenShot))
- {
- recentShortcutInfo.ScreenshotPath = testScreenShot;
- }
- }
- }
- else
- {
- recentShortcutInfo.ScreenshotPath = item.ScreenShot;
- }
-
- recentShortcutInfo.Type = RecentShortcutType.Application;
- recentShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
- recentShortcutInfo.CurrentStateDescription = defaultStateDescription;
- recentShortcutInfo.Id = item.AppID;
- recentShortcutInfo.Date = item.LaunchedTime;
- recentShortcutInfoList.Add(recentShortcutInfo);
- }
- }
-
- IEnumerable<RecentlyPlayedMedia> recentMedias = MediaContentUtils.Instance.GetRecentlyPlayedMedia(MaxRecents);
- foreach (var item in recentMedias)
- {
- if (item.FilePath == null || item.FilePath.Length == 0)
- {
- continue;
- }
-
- // DebuggingUtils.Dbg("media :" + item.DisplayName + ", PlayedAt : " + item.PlayedAt.ToString());
- var defaultStateDescription = new StateDescription()
- {
- Label = item.DisplayName,
- IconPath = "ic_launcher_mediahub_138.png",
- Action = new MediaControlAction()
- {
- AppID = "org.tizen.xamediahub",
- FileUri = "file://" + item.FilePath,
- }
- };
- var mediaControlAction = defaultStateDescription.Action as MediaControlAction;
-
- mediaControlAction?.ExtraData.Add("View By", "All");
- mediaControlAction?.ExtraData.Add("Media type", "Video");
- mediaControlAction?.ExtraData.Add("Media Id", item.MediaId);
-
- var recentShortcutInfo = new RecentShortcutInfo();
-
- recentShortcutInfo.ScreenshotPath = item.FilePath + ".tn";
-
- if (item.ThumbnailPath != null)
- {
- if (FileSystemUtils.Instance.IsFileExist(item.ThumbnailPath))
- {
- recentShortcutInfo.ScreenshotPath = item.ThumbnailPath;
- }
- }
-
- recentShortcutInfo.Type = RecentShortcutType.Media;
- recentShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
- recentShortcutInfo.CurrentStateDescription = defaultStateDescription;
- recentShortcutInfo.Id = "org.tizen.xamediahub";
- recentShortcutInfo.Date = item.PlayedAt.ToUniversalTime();
- recentShortcutInfoList.Add(recentShortcutInfo);
- }
-
- recentShortcutInfoList.Sort();
- if (recentShortcutInfoList.Count > MaxRecents)
- {
- recentShortcutInfoList.RemoveRange(MaxRecents, recentShortcutInfoList.Count - MaxRecents);
- }
-
- return recentShortcutInfoList;
- }
-
- /// <summary>
- /// A method deletes a Recent Shortcut.
- /// </summary>
- /// <param name="appId">An application ID</param>
- public static void Delete(string appId)
- {
- ApplicationManagerUtils.Instance.DeleteRecentApplication(appId);
- }
-
- /// <summary>
- /// A method deletes all Recent Shortcuts.
- /// </summary>
- public static void DeleteAll()
- {
- ApplicationManagerUtils.Instance.DeleteAllRecentApplication();
- }
- }
-}
+++ /dev/null
-/*
- * 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.Utils
-{
- /// <summary>
- /// A class provides Size metric related functions
- /// </summary>
- public class SizeUtils
- {
- /// <summary>
- /// Base Screen Height
- /// </summary>
- private static int baseScreenWidth = 1920;
-
- /// <summary>
- /// Base Screen Height
- /// </summary>
- public static int BaseScreenWidth
- {
- get
- {
- return baseScreenWidth;
- }
- }
-
- /// <summary>
- /// Base Screen Height
- /// </summary>
- private static int baseScreenHeight = 1080;
-
- /// <summary>
- /// Base Screen Height
- /// </summary>
- public static int BaseScreenHeight
- {
- get
- {
- return baseScreenHeight;
- }
- }
-
-
- /// <summary>
- /// Screen Height
- /// </summary>
- public static int ScreenHeight { set; get; }
-
- /// <summary>
- /// Screen Width
- /// </summary>
- public static int ScreenWidth { set; get; }
-
- /// <summary>
- /// Device DPI
- /// </summary>
- public static double Dpi { set; get; }
-
- /// <summary>
- /// Font Scale ratio
- /// </summary>
- public static double ScaleRatio { set; get; }
-
- /// <summary>
- /// Platform Model enumerations
- /// </summary>
- private enum PlatformModel
- {
- TV,
- Emulator,
- Other,
- }
-
- /// <summary>
- /// Platform Model Name
- /// </summary>
- private static PlatformModel ModelName = PlatformModel.TV;
-
- /// <summary>
- /// Set model name of running device.
- /// </summary>
- /// <param name="modelName">a model name</param>
- public static void SetModelName(string modelName)
- {
- if (modelName == null)
- {
- return;
- }
-
- DebuggingUtils.Dbg("ModelName is " + modelName);
- switch (modelName.ToLower()[0])
- {
- case 'e':
- ModelName = PlatformModel.Emulator;
- break;
-
- default:
- case 'x':
- ModelName = PlatformModel.Other;
- break;
- }
- }
-
- /// <summary>
- /// A method provides a converted height size.
- /// </summary>
- /// <param name="heightBaseSize">A height value in BaseScreen ratio</param>
- /// <returns>A converted height size</returns>
- public static int GetHeightSize(int heightBaseSize)
- {
- return Convert.ToInt32((double)((double)heightBaseSize / (double)BaseScreenHeight) * (double)(ScreenHeight));
- }
-
- /// <summary>
- /// A method provides a converted width size.
- /// </summary>
- /// <param name="widthBaseSize">A width value in BaseScreen ratio</param>
- /// <returns>A converted width size</returns>
- public static int GetWidthSize(int widthBaseSize)
- {
- return Convert.ToInt32((double)((double)widthBaseSize / (double)BaseScreenWidth) * (double)(ScreenWidth));
- }
-
- /// <summary>
- /// A method provides a converted width size by double type.
- /// </summary>
- /// <param name="widthBaseSize">A width value in BaseScreen ratio</param>
- /// <returns>A converted width size</returns>
- public static double GetWidthSizeDouble(double widthBaseSize)
- {
- return (double)(widthBaseSize / (double)BaseScreenWidth) * (double)(ScreenWidth);
- }
-
- /// <summary>
- /// A method provides a converted font size.
- /// </summary>
- /// <param name="fontBaseSize">A base font size value in BaseScreen ratio</param>
- /// <returns>A converted font size</returns>
- public static int GetFontSize(int fontBaseSize)
- {
- switch (ModelName)
- {
- case PlatformModel.Emulator:
- //DebuggingUtils.Dbg("Emulator, Font size = " + fontBaseSize + " => " + ((double)((double)fontBaseSize / (double)BaseScreenHeight) * (double)ScreenHeight) * ScaleRatio);
- return Convert.ToInt32(((double)((double)fontBaseSize / (double)BaseScreenHeight) * (double)ScreenHeight) * ScaleRatio);
-
- default:
- case PlatformModel.Other:
- case PlatformModel.TV:
- //DebuggingUtils.Dbg(String.Format("TV/Other, fontBaseSize = {0}, BaseScreenHeight = {1}, ScreenHeight = {2}, ScaleRatio = {3}", fontBaseSize, BaseScreenHeight, ScreenHeight, ScaleRatio));
- double tempAdjustmentRatio = 1D;
- return Convert.ToInt32(((double)((double)fontBaseSize / (double)BaseScreenHeight) * (double)ScreenHeight) * ScaleRatio * tempAdjustmentRatio);
- }
- }
- }
-}
+++ /dev/null
-/*
- * 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.Models;
-
-namespace LibTVRefCommonPortable.Utils
-{
- /// <summary>
- /// A main instance class of the TVHome, TVApps to providing the Model functions.
- /// This class is a kind of the Singleton class and includes major Model classes
- /// such as the AppShortcutController, the RecentShortcutController, and the SettingShortcutcontroller
- /// that are providing major functions related with TVHome, TVApps using scenarios.
- /// </summary>
- /// <see cref="AppShortcutController"/>
- /// <see cref="RecentShortcutController"/>
- /// <see cref="SettingShortcutController"/>
- public class TVHomeImpl : ITVHome
- {
- /// <summary>
- /// An instance of the TVHomeImpl
- /// </summary>
- private static readonly TVHomeImpl instance = new TVHomeImpl();
-
- /// <summary>
- /// An instance of the TVHomeImpl
- /// </summary>
- public static ITVHome GetInstance
- {
- get
- {
- return instance;
- }
- }
-
- /// <summary>
- /// A constructor of TVHomeImpl
- /// Initializes Model implementations.
- /// </summary>
- private TVHomeImpl()
- {
-
- }
-
- /// <summary>
- /// An instance of the AppShortcutController
- /// </summary>
- private static readonly AppShortcutController appShortcutController = new AppShortcutController();
- public AppShortcutController AppShortcutControllerInstance
- {
- get
- {
- return appShortcutController;
- }
- }
-
- /// <summary>
- /// An instance of the RecentShortcutController
- /// </summary>
- private static readonly RecentShortcutController recentShortcutController = new RecentShortcutController();
- public RecentShortcutController RecentShortcutControllerInstance
- {
- get
- {
- return recentShortcutController;
- }
- }
- }
-}
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="Tizen.Xamarin.Forms.Extension" version="2.3.5-v00010" targetFramework="portable45-net45+win8+wp8+wpa81" />
- <package id="Xamarin.Forms" version="2.3.5-r233-012" targetFramework="portable45-net45+win8+wp8+wpa81" />
-</packages>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectTypeGuids>{2F98DAC9-6F16-457B-AED7-D43CAC379341};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ProjectGuid>{C558D279-897E-45E1-A10A-DECD788770F4}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>LibTVRefCommonTizen</RootNamespace>
- <AssemblyName>LibTVRefCommonTizen</AssemblyName>
- <FileAlignment>512</FileAlignment>
- <DefaultLanguage>en-US</DefaultLanguage>
- </PropertyGroup>
- <PropertyGroup>
- <TargetFrameworkIdentifier>DNXCore</TargetFrameworkIdentifier>
- <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
- <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>
- <NuGetTargetMoniker>.NETCoreApp,Version=v1.0</NuGetTargetMoniker>
- <NoStdLib>true</NoStdLib>
- <NoWarn>$(NoWarn);1701</NoWarn>
- <UseVSHostingProcess>false</UseVSHostingProcess>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>portable</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>portable</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <None Include="LibTVRefCommonTizen.project.json" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Ports\AppControlPort.cs" />
- <Compile Include="Ports\ApplicationManagerPort.cs" />
- <Compile Include="Ports\DbgPort.cs" />
- <Compile Include="Ports\MediaContentPort.cs" />
- <Compile Include="Ports\SystemSettingsPort.cs" />
- <Compile Include="Ports\WindowPort.cs" />
- <Compile Include="Ports\FileSystemPort.cs" />
- <Compile Include="Ports\FileSystemWatcherPort.cs" />
- <Compile Include="Ports\PackageManagerPort.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\LibTVRefCommonPortable\LibTVRefCommonPortable.csproj">
- <Project>{67f9d3a8-f71e-4428-913f-c37ae82cdb24}</Project>
- <Name>LibTVRefCommonPortable</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- 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.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
- <PropertyGroup>
- <!-- https://github.com/dotnet/corefxlab/tree/master/samples/NetCoreSample and
- https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/target-dotnetcore-with-msbuild
- -->
- <!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two
- properties to any folder that exists to skip the GetReferenceAssemblyPaths task (not target) and
- to prevent it from outputting a warning (MSB3644).
- -->
- <_TargetFrameworkDirectories>$(MSBuildThisFileDirectory)</_TargetFrameworkDirectories>
- <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)</_FullFrameworkReferenceAssemblyPaths>
- <AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences>
- </PropertyGroup>
- <ProjectExtensions>
- <VisualStudio>
- <FlavorProperties GUID="{2F98DAC9-6F16-457B-AED7-D43CAC379341}" Configuration="Debug|Any CPU">
- <ProjectCommonFlavorCfg>
- <excludeXamarinForms>True</excludeXamarinForms>
- </ProjectCommonFlavorCfg>
- </FlavorProperties>
- <FlavorProperties GUID="{2F98DAC9-6F16-457B-AED7-D43CAC379341}" Configuration="Release|Any CPU">
- <ProjectCommonFlavorCfg />
- </FlavorProperties>
- </VisualStudio>
- </ProjectExtensions>
-</Project>
\ No newline at end of file
+++ /dev/null
-{
- "dependencies": {
- "ElmSharp": "1.2.2",
- "Microsoft.NETCore.App": "1.1.2",
- "Tizen.Applications": "1.5.8",
- "Tizen.Content.MediaContent": "1.0.20",
- "Tizen.Multimedia": "1.2.0",
- "Tizen.Multimedia.MediaPlayer": "1.0.2",
- "Tizen.Xamarin.Forms.Extension": "2.3.5-v00015",
- "Xamarin.Forms": "2.4.0-r266-001",
- "Xamarin.Forms.Platform.Tizen": "2.3.5-r256-001"
- },
- "frameworks": {
- "netcoreapp1.0": {
- "imports": [
- "portable-net45+wp80+win81+wpa81",
- "netstandard1.6"
- ]
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * 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;
-using LibTVRefCommonPortable.Utils;
-using Tizen.Applications;
-using System.Collections.Generic;
-
-namespace LibTVRefCommonTizen.Ports
-{
- /// <summary>
- /// Handles the AppControl APIs
- /// </summary>
- public class AppControlPort : IAppControl
- {
- /// <summary>
- /// The app ID of TV reference home application
- /// </summary>
- public static string TVHomeAppID = "org.tizen.xahome";
-
- /// <summary>
- /// The app ID of TV reference apps-tray application
- /// </summary>
- public static string TVAppsAppID = "org.tizen.xaapps";
-
- /// <summary>
- /// Represents the operation to be performed between TVHome and TVApps
- /// This operation is sent from TVHomes to TVApps
- /// </summary>
- public static string AddAppOperation = "http://xahome.tizen.org/appcontrol/operation/add_app";
-
- /// <summary>
- /// Represents the operation to be performed between TVHome and TVApps
- /// This operation is sent from TVApps to TVHome
- /// </summary>
- public static string AppAddedNotifyOperation = "http://xahome.tizen.org/appcontrol/operation/app_added";
-
- public static string KeyAddedAppID = "AddedAppID";
-
- /// <summary>
- /// Sends the launch request
- /// </summary>
- /// <param name="appId"> The app ID to explicitly launch</param>
- /// <param name="extraData">The extra data for the app control</param>
- /// <param name="fileUri">The file URI to be opened</param>
- public void SendLaunchRequest(string appId, IDictionary<string, string> extraData = null, string fileUri = null)
- {
- try
- {
- AppControl appControl = new AppControl();
-
- if (appId == null || appId.Length <= 0)
- {
- DbgPort.E("The AppID is null or blank");
- return;
- }
-
- string value;
-
- appControl.ApplicationId = appId;
-
- if (extraData != null)
- {
- foreach (var key in extraData.Keys)
- {
- if (extraData.TryGetValue(key, out value))
- {
- appControl.ExtraData.Add(key, value);
- }
- }
- }
-
- if (fileUri != null && fileUri.Length != 0)
- {
- appControl.Uri = fileUri;
- appControl.LaunchMode = AppControlLaunchMode.Group;
- appControl.Mime = "video/*";
- appControl.Operation = AppControlOperations.View;
- }
-
- AppControl.SendLaunchRequest(appControl);
- }
- catch (InvalidOperationException)
- {
- DbgPort.E("Failed to create AppControl");
- }
- }
-
- /// <summary>
- /// Sends the 'Add PIN apps' operation to TV Apps
- /// </summary>
- public void SendAddAppRequestToApps()
- {
- AppControl appControl = new AppControl()
- {
- ApplicationId = TVAppsAppID,
- Operation = AddAppOperation,
- };
- AppControl.SendLaunchRequest(appControl);
- }
-
- /// <summary>
- /// Sends the pinned app ID to TV Home
- /// </summary>
- /// <param name="addedAddID">The app ID to add PIN list int the TV Home</param>
- public void SendAppAddedNotificationToHome(string addedAddID)
- {
- AppControl appControl = new AppControl()
- {
- ApplicationId = TVHomeAppID,
- Operation = AppAddedNotifyOperation,
- };
- appControl.ExtraData.Add(KeyAddedAppID, addedAddID);
- AppControl.SendLaunchRequest(appControl);
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Tizen.Applications;
-using LibTVRefCommonPortable.Utils;
-
-namespace LibTVRefCommonTizen.Ports
-{
- /// <summary>
- /// Handles the ApplicationsManager APIs
- /// </summary>
- public class ApplicationManagerPort : IApplicationManagerAPIs
- {
- /// <summary>
- /// Defines the default app icon
- /// If the app icon is not exist, shows the default app icon
- /// </summary>
- private static String DefaultAppIcon = "AppIcon.png";
-
- /// <summary>
- /// The constructor of this class
- /// Adds the EventHandler for ApplicationLaunched
- /// </summary>
- public ApplicationManagerPort()
- {
- ApplicationManager.ApplicationLaunched += new EventHandler<ApplicationLaunchedEventArgs>(OnApplicationLaunched);
- }
-
- /// <summary>
- /// Arguments for the event that is raised when the application is launched
- /// </summary>
- /// <param name="sender">The source of the event</param>
- /// <param name="args">An object that contains no event data</param>
- /// <remarks>
- /// https://msdn.microsoft.com/en-us/library/system.eventhandler(v=vs.110).aspx
- /// </remarks>
- void OnApplicationLaunched(object sender, EventArgs args)
- {
- ApplicationLaunchedEventArgs launchedEventArgs = args as ApplicationLaunchedEventArgs;
- DbgPort.D(launchedEventArgs.ApplicationRunningContext.ApplicationId + " launched");
- }
-
- /// <summary>
- /// Clears all recent applications
- /// </summary>
- public void DeleteAllRecentApplication()
- {
- RecentApplicationControl.DeleteAll();
- }
-
- /// <summary>
- /// Removes the specified application with the app ID
- /// </summary>
- /// <param name="appId">An 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>
- public IEnumerable<RecentApp> GetRecentApplications()
- {
- bool isNoRecentApps = true;
- List<RecentApp> resultList = new List<RecentApp>();
-
- try
- {
- IEnumerable<RecentApplicationInfo> recentApps = ApplicationManager.GetRecentApplications();
-
- foreach (var app in recentApps)
- {
- if (app.IsNoDisplay ||
- app.ApplicationId == null ||
- app.ApplicationId.Length < 1)
- {
- continue;
- }
-
- DbgPort.D("Recent App (" + app.Label + "): " + app.ApplicationId);
-
- resultList.Add(new RecentApp()
- {
- InstanceID = app.InstanceId,
- InstanceLabel = app.InstanceName,
- AppID = app.ApplicationId,
- Applabel = (app.Label == null || app.Label.Length < 1) ? "No Name" : app.Label,
- IconPath = app.IconPath,
- LaunchedTime = app.LaunchTime,
- Uri = app.Uri,
- });
- isNoRecentApps = false;
- }
- }
- catch (InvalidOperationException)
- {
- DbgPort.E("Failed to get the information of the recent applications");
- return null;
- }
-
- if (isNoRecentApps)
- {
- DbgPort.E("No Recent Apps!!!");
- }
-
- return resultList;
- }
-
- /// <summary>
- /// Gets the information of the specified application with the app ID
- /// </summary>
- /// <param name="appID">The app Id to get</param>
- /// <returns>The information of the installed application</returns>
- public InstalledApp GetInstalledApplication(string appID)
- {
- InstalledApp result = null;
- ApplicationInfo appInfo = null;
-
- try
- {
- appInfo = ApplicationManager.GetInstalledApplication(appID);
- if (appInfo == null)
- {
- DbgPort.D("GetInstalledApplication failed");
- return null;
- }
-
- result = new InstalledApp()
- {
- AppID = appInfo.ApplicationId,
- Applabel = appInfo.Label,
- IconPath = (System.IO.File.Exists(appInfo.IconPath)) ? appInfo.IconPath : DefaultAppIcon,
- };
- }
- catch (Exception exception)
- {
- DbgPort.E("Failed to get the installed application(" + appID + ") :" + exception.Message);
- return null;
- }
-
- return result;
- }
-
- /// <summary>
- /// Gets the information of the installed applications asynchronously
- /// </summary>
- /// <returns>The list of the installed applications</returns>
- public async Task<IEnumerable<InstalledApp>> GetAllInstalledApplication()
- {
- try
- {
- IList<InstalledApp> resultList = new List<InstalledApp>();
- Task<IEnumerable<ApplicationInfo>> task = ApplicationManager.GetInstalledApplicationsAsync();
-
- IEnumerable<ApplicationInfo> installedList = await task;
-
- foreach (var appInfo in installedList)
- {
- if (appInfo.Label == null ||
- appInfo.ApplicationId == null ||
- appInfo.IsNoDisplay)
- {
- continue;
- }
-
- Package pkgInfo = PackageManager.GetPackage(appInfo.PackageId);
- if (pkgInfo == null)
- {
- continue;
- }
-
- if (pkgInfo.IsSystemPackage)
- {
- continue;
- }
-
- resultList.Add(new InstalledApp
- {
- AppID = appInfo.ApplicationId,
- Applabel = appInfo.Label,
- IconPath = (System.IO.File.Exists(appInfo.IconPath)) ? appInfo.IconPath : DefaultAppIcon,
- InstalledTime = new DateTime(pkgInfo.InstalledTime),
- });
- }
-
- return resultList;
- }
- catch (Exception exception)
- {
- DbgPort.E("Failed to get the all installed applications : " + exception.Message);
- return null;
- }
- }
-
- /// <summary>
- /// Checks whether application is removable
- /// </summary>
- /// <param name="appID">The app ID to get</param>
- /// <returns>If the application is removable, true; otherwise, false</returns>
- public bool GetAppInfoRemovable(string appID)
- {
- ApplicationInfo appInfo = null;
-
- try
- {
- appInfo = ApplicationManager.GetInstalledApplication(appID);
- if (appInfo == null)
- {
- DbgPort.D("Failed to get the installed application(" + appID + ")");
- return false;
- }
-
- return !appInfo.IsPreload;
- }
- catch (Exception exception)
- {
- DbgPort.E("Failed to get the installed application(" + appID + ") :" + exception.Message);
- return false;
- }
- }
-
- /// <summary>
- /// Gets the app ID by the app label
- /// </summary>
- /// <param name="appLabel">the app label to get</param>
- /// <returns>the app ID of the app label</returns>
- public async Task<string> GetAppIDbyAppLabel(string appLabel)
- {
- IEnumerable<ApplicationInfo> installedList = await ApplicationManager.GetInstalledApplicationsAsync();
-
- foreach (var app in installedList)
- {
- if (app != null && app.Label.Equals(appLabel))
- {
- return app.ApplicationId;
- }
- }
-
- return null;
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * 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.Runtime.CompilerServices;
-using System;
-
-namespace LibTVRefCommonTizen.Ports
-{
- /// <summary>
- /// Platform dependent implementation for the Logging and the Popup displaying
- /// DbgPort is implementing IDebuggingAPIs which is defined in Calculator shared project
- /// </summary>
- /// <remarks>
- /// Please refer to Xamarin Dependency Service
- /// https://developer.xamarin.com/guides/xamarin-forms/dependency-service/introduction/
- /// </remarks>
- public class DbgPort : IDebuggingAPIs
- {
- /// <summary>
- /// A TV Home Windows reference
- /// This is used to display a Dialog
- /// </summary>
- public static Xamarin.Forms.Platform.Tizen.Native.Window MainWindow
- {
- set;
- get;
- }
-
- /// <summary>
- /// A Logging Tag
- /// </summary>
- public static string TAG = "home";
-
-
- /// <summary>
- /// A flag which enables console log writting
- /// </summary>
- private static readonly bool IsNeedToShowInConsole = true;
-
- public static string Prefix
- {
- set;
- get;
- }
-
- /// <summary>
- /// Displays a log message which developer want to check
- /// </summary>
- /// <param name="message"> A debugging message </param>
- /// <param name="file"> A file name that debugging message is exist </param>
- /// <param name="func"> A function name that debugging message is exist </param>
- /// <param name="line"> A line number that debugging message is exist </param>
- public void Dbg(string message, String file, String func, Int32 line)
- {
- D(message, file, func, line);
- }
-
- /// <summary>
- /// </summary>
- /// <param name="message"> A debugging message </param>
- /// <param name="file"> A file name that debugging message is exist </param>
- /// <param name="func"> A function name that debugging message is exist </param>
- /// <param name="line"> A line number that debugging message is exist </param>
- public void Err(string message, String file, String func, Int32 line)
- {
- E(message, file, func, line);
- }
-
- /// <summary>
- /// Displays a dialog with a given message
- /// </summary>
- /// <param name="message"> A debugging message </param>
- public void Popup(string message)
- {
- if (MainWindow == null)
- {
- return;
- }
- //bool result = await Xamarin.Forms.Page.DisplayAlert("Calculator", message, "OK");
-
- Dialog toast = new Dialog(MainWindow);
- toast.Title = message;
- toast.Timeout = 2.3;
- toast.BackButtonPressed += (s, e) =>
- {
- toast.Dismiss();
- };
- toast.Show();
- }
-
- /// <summary>
- /// Displays a log message which developer want to check
- /// </summary>
- /// <param name="message"> A debugging message </param>
- /// <param name="file"> A file name that debugging message is exist </param>
- /// <param name="func"> A function name that debugging message is exist </param>
- /// <param name="line"> A line number that debugging message is exist </param>
- public static void D(string message, [CallerFilePath] System.String file = "", [CallerMemberName] System.String func = "", [CallerLineNumber] System.Int32 line = 0)
- {
- Log.Debug(TAG, Prefix + ", " + message, file, func, line);
- if (IsNeedToShowInConsole)
- {
- Console.WriteLine(String.Format("{0}, {1}:{2},{3}", message, file.Substring(file.LastIndexOf("\\")), line, func));
- }
-
- }
-
- /// <summary>
- /// Displays an error log message
- /// </summary>
- /// <param name="message"> A debugging message </param>
- /// <param name="file"> A file name that debugging message is exist </param>
- /// <param name="func"> A function name that debugging message is exist </param>
- /// <param name="line"> A line number that debugging message is exist </param>
- public static void E(string message, [CallerFilePath] System.String file = "", [CallerMemberName] System.String func = "", [CallerLineNumber] System.Int32 line = 0)
- {
- Log.Error(TAG, Prefix + ", " + message, file, func, line);
- if (IsNeedToShowInConsole)
- {
- Console.WriteLine(String.Format("{0}, {1}:{2},{3}", message, file.Substring(file.LastIndexOf("\\")), line, func));
- }
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * 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;
-using System.IO;
-using LibTVRefCommonPortable.Utils;
-
-namespace LibTVRefCommonTizen.Ports
-{
- /// <summary>
- /// Handles FileSystem APIs
- /// </summary>
- public class FileSystemPort : IFileSystemAPIs
- {
- /// <summary>
- /// A directory path which should be used for app data storing.
- /// </summary>
- public static string AppDataStroagePath { private get; set; }
-
- /// <summary>
- /// A property of AppDataStroagePath to be exported to PCL.
- /// </summary>
- public string AppDataStorage
- {
- get
- {
- return AppDataStroagePath ?? "";
- }
- }
-
- public static string AppResourceStoragePath { private get; set; }
-
- public string AppResourceStorage
- {
- get
- {
- return AppResourceStoragePath ?? "";
- }
- }
-
- /// <summary>
- /// A directory path which should be used for sharing between apps.
- /// </summary>
- public static string PlatformShareStroagePath { private get; set; }
-
- /// <summary>
- /// A property of PlatformShareStroagePath to be exported to PCL.
- /// </summary>
- public string PlatformShareStorage
- {
- get
- {
- return PlatformShareStroagePath ?? "";
- }
- }
-
- /// <summary>
- /// Opens the given file
- /// </summary>
- /// <param name="filePath">A relative or absolute path for the file that the current FileStream object will encapsulate</param>
- /// <param name="mode">A constant that determines how to open or create the file</param>
- /// <returns>A generic view of a sequence of bytes</returns>
- public Stream OpenFile(string filePath, UtilFileMode mode)
- {
- Stream fileStream = null;
- DbgPort.D("[" + mode.ToString() + "] Opening the file, " + filePath);
- try
- {
- fileStream = new FileStream(filePath, (FileMode)mode);
- }
- catch (Exception exception)
- {
- DbgPort.E("Exception!! " + exception.Message);
- }
-
- return fileStream;
- }
-
- /// <summary>
- /// Flushes the given steam
- /// </summary>
- /// <param name="stream">The stream to flush</param>
- public void Flush(Stream stream)
- {
- var fileStream = stream as FileStream;
- fileStream.Flush();
- }
-
- /// <summary>
- /// Closes the given stream
- /// </summary>
- /// <param name="stream">The stream to close</param>
- public void CloseFile(Stream stream)
- {
- var fileStream = stream as FileStream;
- fileStream.Dispose();
- }
-
- /// <summary>
- /// Checks whether the given file exist
- /// </summary>
- /// <param name="fileName">The file to check</param>
- /// <returns>
- /// true if the caller has the required permissions and path contains the name of an existing file, otherwise, false
- /// </returns>
- /// <remarks>
- /// https://msdn.microsoft.com/en-us/library/system.io.file.exists(v=vs.110).aspx
- /// </remarks>
- public bool IsFileExist(String fileName)
- {
- return File.Exists(fileName);
- }
-
- /// <summary>
- /// Checks whether the given file ready
- /// </summary>
- /// <param name="fileName">The file to check</param>
- /// <returns>
- /// true if the file is ready to open, otherwise, false
- /// </returns>
- /// <remarks>
- /// https://msdn.microsoft.com/en-us/library/y973b725(v=vs.110).aspx
- /// </remarks>
- public bool IsFileReady(String fileName)
- {
- try
- {
- using (FileStream inputStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
- {
- return (inputStream.Length > 0) ? true : false;
- }
- }
- catch (Exception)
- {
- return false;
- }
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.IO;
-using LibTVRefCommonPortable.Utils;
-using LibTVRefCommonPortable.DataModels;
-
-namespace LibTVRefCommonTizen.Ports
-{
- /// <summary>
- /// Handles FileSystemWatcher APIs
- /// </summary>
- public class FileSystemWatcherPort : IFileSystemWatcherAPIs
- {
- static FileSystemWatcher watcher;
- public event EventHandler<EventArgs> CustomChanged;
- private FileSystemEventCustomArgs args;
-
- /// <summary>
- /// Listens to the file system change notifications and raises events when a directory, or file in a directory, changes
- /// If the 'pinned_apps_info.xml' is created, changed, or deleted, invokes event handler method
- /// </summary>
- /// <param name="path">A file path which has the target file</param>
- /// <param name="fileName">A file name to be watching</param>
- /// <remarks>
- /// https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx
- /// </remarks>
- public void Run(String path, String fileName)
- {
- if (File.Exists(path + fileName) == false)
- {
- DbgPort.E("Watching File is not exist!!!" + path + fileName);
- }
-
- watcher = new FileSystemWatcher();
- watcher.Path = path;
- watcher.NotifyFilter = NotifyFilters.LastWrite;
- watcher.Filter = fileName;
-
- watcher.Created += new FileSystemEventHandler(WatcherChanged);
- watcher.Changed += new FileSystemEventHandler(WatcherChanged);
- watcher.Deleted += new FileSystemEventHandler(WatcherChanged);
- watcher.IncludeSubdirectories = true;
- watcher.EnableRaisingEvents = true;
- }
-
- /// <summary>
- /// Represents the method that will handle the Changed, Created, or Deleted event of a FileSystemWatcher class
- /// </summary>
- /// <param name="sender">The source of the event</param>
- /// <param name="e">The FileSystemEventArgs that contains the event data</param>
- /// <remarks>
- /// https://msdn.microsoft.com/en-us/library/system.io.filesystemeventhandler(v=vs.110).aspx
- /// </remarks>
- private void WatcherChanged(object sender, FileSystemEventArgs e)
- {
- args = new FileSystemEventCustomArgs((WatcherType)e.ChangeType, e.FullPath, e.Name);
- if (e.ChangeType.Equals(WatcherChangeTypes.Changed))
- {
- CustomChanged.Invoke(this, args);
- }
-
- DbgPort.D(e.ChangeType + ", " + e.Name);
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Collections.Generic;
-using Tizen.Content.MediaContent;
-using LibTVRefCommonPortable.Utils;
-
-namespace LibTVRefCommonTizen.Ports
-{
- /// <summary>
- /// Handles the MediaContent APIs
- /// </summary>
- public class MediaContentPort : IMediaContentAPIs
- {
- /// <summary>
- /// The constructor of this class
- /// Connects content database
- /// </summary>
- public MediaContentPort()
- {
- DbgPort.D("MediaContentPort");
- ContentDatabase.Connect();
- }
-
- /// <summary>
- /// A method for getting recently played media content list
- /// </summary>
- /// <param name="limitation">Maximum count of list</param>
- /// <returns>The recently played media content list</returns>
- public IEnumerable<RecentlyPlayedMedia> GetRecentlyPlayedMedia(int limitation)
- {
- var recentlyPlayedVideos = new List<RecentlyPlayedMedia>();
- var contentFilter = new ContentFilter();
-
- contentFilter.OrderKey = "MEDIA_LAST_PLAYED_TIME";
- contentFilter.Order = ContentOrder.Desc;
- contentFilter.Condition = "MEDIA_TYPE=1 AND MEDIA_LAST_PLAYED_TIME!=0";
- contentFilter.Offset = 0;
- contentFilter.Count = limitation;
-
- IEnumerable<MediaInformation> mediaInformations = new List<MediaInformation>();
-
- try
- {
- mediaInformations = ContentManager.Database.SelectAll<MediaInformation>(contentFilter);
- }
- catch (Exception exception)
- {
- DbgPort.E(exception.Message);
- }
-
- foreach (var mediaInformation in mediaInformations)
- {
- recentlyPlayedVideos.Add(
- new RecentlyPlayedMedia()
- {
- MediaId = mediaInformation.MediaId,
- ThumbnailPath = mediaInformation.ThumbnailPath,
- DisplayName = mediaInformation.DisplayName,
- PlayedAt = mediaInformation.PlayedAt,
- FilePath = mediaInformation.FilePath,
- });
- }
-
- return recentlyPlayedVideos;
- }
- }
-}
+++ /dev/null
-/*
- * 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 Tizen.Applications;
-
-using LibTVRefCommonPortable.Utils;
-using System;
-
-namespace LibTVRefCommonTizen.Ports
-{
- /// <summary>
- /// Handles PackageManager APIs
- /// </summary>
- public class PackageManagerPort : IPackageManager
- {
- /// <summary>
- /// An interface for platform notification
- /// </summary>
- private static IPlatformNotification Notification
- {
- get;
- set;
- }
-
- /// <summary>
- /// The constructor for this class
- /// </summary>
- public PackageManagerPort()
- {
-
- }
-
- /// <summary>
- /// Registers a callback function to be invoked when the package is installed or uninstalled
- /// </summary>
- /// <param name="app">The instance of TVApps</param>
- public static void RegisterCallbacks(IPlatformNotification app)
- {
- Notification = app;
- PackageManager.InstallProgressChanged += PackageManager_InstallProgressChanged;
- PackageManager.UninstallProgressChanged += PackageManager_UninstallProgressChanged;
- }
-
- /// <summary>
- /// Unregisters the callback function
- /// </summary>
- public static void UnregisterCallbacks()
- {
- Notification = null;
- PackageManager.InstallProgressChanged -= PackageManager_InstallProgressChanged;
- PackageManager.UninstallProgressChanged -= PackageManager_UninstallProgressChanged;
- }
-
- /// <summary>
- /// UninstallProgressChanged event
- /// This event is occurred when a package is getting uninstalled and the progress of the request to the package manager changes
- /// </summary>
- /// <param name="sender">The source of the event</param>
- /// <param name="e">An object that contains no event data</param>
- private static void PackageManager_UninstallProgressChanged(object sender, PackageManagerEventArgs e)
- {
- if (e.State == PackageEventState.Completed)
- {
- if (Notification != null)
- {
- Notification.OnAppUninstalled(e.PackageId);
- }
- }
- }
-
- /// <summary>
- /// InstallProgressChanged event
- /// This event is occurred when a package is getting installed and the progress of the request to the package manager changes
- /// </summary>
- /// <param name="sender">The source of the event</param>
- /// <param name="e">An object that contains no event data</param>
- private static void PackageManager_InstallProgressChanged(object sender, PackageManagerEventArgs e)
- {
- if (e.State == PackageEventState.Completed)
- {
- Notification?.OnAppInstalled(e.PackageId);
- }
- }
-
- /// <summary>
- /// Retrieves package information of all installed packages
- /// </summary>
- /// <returns>The list of packages</returns>
- public Dictionary<string, string[]> GetPackageList()
- {
- Dictionary<string, string[]> pkgList = new Dictionary<string, string[]>();
- IEnumerable<Package> packages = PackageManager.GetPackages();
-
- string[] result;
-
- foreach (var item in packages)
- {
- if (item.Id == null)
- {
- continue;
- }
-
- result = new string[3];
- var itemLabel = "No Name";
-
- if (!string.IsNullOrEmpty(item.Label))
- {
- itemLabel = item.Label;
- }
-
- result[0] = itemLabel;
- result[1] = item.Id;
- result[2] = (System.IO.File.Exists(item.IconPath)) ? item.IconPath : "AppIcon.png";
-
- pkgList.Add(itemLabel, result);
- }
-
- return pkgList;
- }
-
- /// <summary>
- /// Gets the package label for the given package
- /// </summary>
- /// <param name="pkgID">The ID of the package</param>
- /// <returns>The package label for the given package ID</returns>
- public string GetPackageLabel(string pkgID)
- {
- try
- {
- Package tempItem = PackageManager.GetPackage(pkgID);
-
- if(tempItem == null)
- {
- return null;
- }
- else
- {
- return tempItem.Label;
- }
- }
- catch (Exception e)
- {
- DbgPort.E("Failed to get package information(" + pkgID + ") : " + e.Message);
-
- return null;
- }
- }
-
- /// <summary>
- /// Gets the pacakge ID by the app ID
- /// </summary>
- /// <param name="appID">The app ID to get</param>
- /// <returns>The pacakge ID that contains given app ID</returns>
- public string GetPackageIDByAppID(string appID)
- {
- try
- {
- return PackageManager.GetPackageIdByApplicationId(appID);
- }
- catch (Exception e)
- {
- DbgPort.E("Failed to get the package ID by app ID(" + appID + ") : " + e.Message);
-
- return null;
- }
- }
-
- /// <summary>
- /// Uninstalls package with the given package
- /// </summary>
- /// <param name="pkgID">The ID of the package to be uninstalled</param>
- /// <returns>Returns true if uninstalltion request is successful, false otherwise</returns>
- public bool UninstallPackage(string pkgID)
- {
- try
- {
- Package tempItem = PackageManager.GetPackage(pkgID);
- if(tempItem == null)
- {
- return false;
- }
- else
- {
- return PackageManager.Uninstall(tempItem.Id, tempItem.PackageType);
- }
- }
- catch (Exception e)
- {
- DbgPort.E("Failed to get package information(" + pkgID + ") : " + e.Message);
-
- return false;
- }
-
- }
-
- /// <summary>
- /// Uninstalls package with the given app ID
- /// </summary>
- /// <param name="appID">The app ID to be uninstalled<</param>
- /// <returns>Returns true if uninstallation request is successful, false otherwise</returns>
- public bool UninstallPackageByAppID(string appID)
- {
- try
- {
- string pkgID = PackageManager.GetPackageIdByApplicationId(appID);
-
- return UninstallPackage(pkgID);
- }
- catch (Exception e)
- {
- DbgPort.E("Failed to uninstall by AppID(" + appID + ") : " + e.Message);
-
- return false;
- }
- }
-
- /// <summary>
- /// Gets applications list by the package ID
- /// </summary>
- /// <param name="pkgID">The package ID to get applications</param>
- /// <returns>The list of applications</returns>
- public List<string> GetApplicationsByPkgID(string pkgID)
- {
- try
- {
- int index = 0;
- List<string> apps = new List<string>();
- Package pkg = PackageManager.GetPackage(pkgID);
- if(pkg == null)
- {
- return null;
- }
- IEnumerable<ApplicationInfo> appsList = pkg.GetApplications();
- if (appsList == null)
- {
- DbgPort.E("Failed to get apps list(" + pkgID + ")");
-
- return null;
- }
-
- foreach (var app in appsList)
- {
- apps.Add(app.ApplicationId);
- DbgPort.D("[" + index + "] " + app.ApplicationId);
- index++;
- }
-
- return apps;
- }
- catch (Exception e)
- {
- DbgPort.E("Failed to get the package information(" + pkgID + ") : " + e.Message);
-
- return new List<string>();
- }
-
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * 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;
-using System.Runtime.InteropServices;
-using LibTVRefCommonPortable.Utils;
-using Xamarin.Forms.Platform.Tizen.Native;
-
-
-namespace LibTVRefCommonTizen.Ports
-{
- /// <summary>
- /// Handles the SystemSettings APIs
- /// </summary>
- public class SystemSettingsPort : ISystemSettings
- {
- public static readonly int ErrorNone = 0;
- public static readonly string KeyModelName = "http://tizen.org/system/model_name";
-
- internal class SystemInfo
- {
- [DllImport("libcapi-system-info.so.0", EntryPoint = "system_info_get_platform_string", CallingConvention = CallingConvention.Cdecl)]
- internal static extern int SystemInfoGetPlatformString(string key, out string value);
- }
-
- /// <summary>
- /// A method for getting system model name.
- /// </summary>
- /// <param name="modelName">The system model name</param>
- /// <returns>The result whether getting the modelName is done</returns>
- public bool GetSystemModelName(out string modelName)
- {
- if (SystemInfo.SystemInfoGetPlatformString(KeyModelName, out modelName) != ErrorNone)
- {
- modelName = "";
- return false;
- }
-
- return true;
- }
- }
-}
+++ /dev/null
-/*
- * 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;
-using System.Runtime.InteropServices;
-using LibTVRefCommonPortable.Utils;
-using Xamarin.Forms.Platform.Tizen.Native;
-
-namespace LibTVRefCommonTizen.Ports
-{
- /// <summary>
- /// Handles Window APIs
- /// </summary>
- public class WindowPort : IWindowAPIs
- {
- internal class ElmWindow
- {
- [DllImport("libelementary.so.1", EntryPoint = "elm_win_keygrab_set", CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr ElmWinKeygrabSet(IntPtr obj, string key, ulong modifiers, ulong not_modifiers, int proirity, int grab_mode);
-
- [DllImport("libelementary.so.1", EntryPoint = "elm_win_iconified_set", CallingConvention = CallingConvention.Cdecl)]
- internal static extern void ElmWinIconfiedSet(IntPtr obj, bool iconified);
-
- [DllImport("libelementary.so.1", EntryPoint = "elm_win_iconified_get", CallingConvention = CallingConvention.Cdecl)]
- internal static extern bool ElmWinIconifiedGet(IntPtr obj);
- }
-
- /// <summary>
- /// The main window of the App
- /// </summary>
- static private Window mainWindow;
- public Window MainWindow
- {
- set
- {
- mainWindow = value;
- }
- }
-
- /// <summary>
- /// Sets the keygrab of the Elm_Win object
- /// </summary>
- /// <param name="key">
- /// keyname string to set keygrab
- /// </param>
- public void SetKeyGrabExclusively(string key)
- {
- if (mainWindow != null)
- {
- ElmWindow.ElmWinKeygrabSet((IntPtr)mainWindow, key, 0, 0, 0, 1024);
- }
- }
-
- /// <summary>
- /// Sets the iconified state of a window
- /// </summary>
- /// <param name="iconified">
- /// If true the window is iconified, otherwise false
- /// </param>
- public void SetIconified(bool iconified)
- {
- if (mainWindow != null)
- {
- ElmWindow.ElmWinIconfiedSet((IntPtr)mainWindow, iconified);
- }
- }
-
- /// <summary>
- /// Gets the iconified state of a window
- /// </summary>
- /// <returns>
- /// true if the window is iconified, otherwise false
- /// </returns>
- public bool GetIconified()
- {
- return (mainWindow != null) ? ElmWindow.ElmWinIconifiedGet((IntPtr)mainWindow) : false;
- }
-
- /// <summary>
- /// Activates the window object
- /// </summary>
- /// <remarks>
- /// This is just a request that a Window Manager may ignore, so calling this function does not ensure in any way that the window is going to be the active one after it
- /// </remarks>
- public void Active()
- {
- mainWindow?.Active();
- }
- }
-}
+++ /dev/null
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("LibTVRefCommonTizen")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("LibTVRefCommonTizen")]
-[assembly: AssemblyCopyright("Copyright © 2017")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("c558d279-897e-45e1-a10a-decd788770f4")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+++ /dev/null
-<StyleCopSettings Version="105">
- <GlobalSettings>
- <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
- </GlobalSettings>
- <Analyzers>
- <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
- <Rules>
- <Rule Name="ElementsMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustHaveSummaryText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="EnumerationItemsMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationMustContainValidXml">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustHaveSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PartialElementDocumentationMustHaveSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustNotHaveDefaultSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="VoidReturnValueMustNotBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParametersMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParametersMustBeDocumentedPartialClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustHaveText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertySummaryDocumentationMustMatchAccessors">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustNotBeCopiedAndPasted">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationTextMustNotBeEmpty">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationTextMustContainWhitespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationMustMeetCharacterPercentage">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationHeadersMustNotContainBlankLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncludedDocumentationXPathDoesNotExist">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncludeNodeDoesNotContainValidFileAndPath">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="InheritDocMustBeUsedWithInheritingClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustBeSpelledCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMustHaveHeader">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustShowCopyright">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustHaveCopyrightText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustContainFileName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderFileNameDocumentationMustMatchFileName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustHaveValidCompanyText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderFileNameDocumentationMustMatchTypeName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
- <Rules>
- <Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustBeginWithLowerCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotContainUnderscore">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementMustBeginWithLowerCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotUseHungarianNotation">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="VariableNamesMustNotBePrefixed">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotBeginWithUnderscore">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticReadonlyFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
- <Rules>
- <Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleBlankLinesInARow">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentMustBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustBeSeparatedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.MaintainabilityRules">
- <Rules>
- <Rule Name="AccessModifierMustBeDeclared">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldsMustBePrivate">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeAnalysisSuppressionMustHaveJustification">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DebugAssertMustProvideMessageText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DebugFailMustProvideMessageText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMayOnlyContainASingleClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMayOnlyContainASingleNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StatementMustNotUseUnnecessaryParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ArithmeticExpressionsMustDeclarePrecedence">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConditionalExpressionsMustDeclarePrecedence">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="RemoveDelegateParenthesisWhenPossible">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="AttributeConstructorMustNotUseUnnecessaryParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="RemoveUnnecessaryCode">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
- <Rules>
- <Rule Name="UsingDirectivesMustBePlacedWithinNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustAppearInTheCorrectOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustBeOrderedByAccess">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConstantsMustAppearBeforeFields">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticElementsMustAppearBeforeInstanceElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DeclarationKeywordsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ProtectedMustComeBeforeInternal">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertyAccessorsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="EventAccessorsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NoValueFirstComparison">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingStaticDirectivesMustBePlacedAfterUsingNamespaceDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">
- <Rules>
- <Rule Name="CommentsMustContainText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PrefixLocalCallsWithThis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PrefixCallsCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningParenthesisMustBeOnDeclarationLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CommaMustBeOnSameLineAsPreviousParameter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterListMustFollowDeclaration">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterMustFollowComma">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SplitParametersMustStartOnLineAfterDeclaration">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParametersMustBeOnSameLineOrSeparateLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterMustNotSpanMultipleLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClauseMustFollowPreviousClause">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClausesMustBeOnSeparateLinesOrAllOnOneLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClausesSpanningMultipleLinesMustBeginOnOwnLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotPlaceRegionsWithinElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainEmptyStatements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleStatementsOnOneLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="BlockStatementsMustNotContainEmbeddedComments">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="BlockStatementsMustNotContainEmbeddedRegions">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseStringEmptyForEmptyStrings">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseBuiltInTypeAlias">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseShorthandForNullableTypes">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
- <Rules>
- <Rule Name="CommasMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SemicolonsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationLinesMustBeginWithSingleSpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustBeginWithSingleSpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PreprocessorKeywordsMustNotBePrecededBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OperatorKeywordMustBeFollowedBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingCurlyBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningGenericBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingGenericBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningAttributeBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingAttributeBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NullableTypeSymbolsMustNotBePrecededBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="MemberAccessSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncrementDecrementSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NegativeSignsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PositiveSignsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ColonsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleWhitespaceInARow">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="TabsMustNotBeUsed">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotSplitNullConditionalOperators">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- </Analyzers>
-</StyleCopSettings>
\ No newline at end of file
+++ /dev/null
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVApps", "TVApps\TVApps\TVApps.csproj", "{FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVApps.TizenTV", "TVApps\TVApps.TizenTV\TVApps.TizenTV.csproj", "{7E341BF5-B7BD-4532-9D4A-AA89537B525E}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibTVRefCommonPortable", "LibTVRefCommonPortable\LibTVRefCommonPortable.csproj", "{67F9D3A8-F71E-4428-913F-C37AE82CDB24}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibTVRefCommonTizen", "LibTVRefCommonTizen\LibTVRefCommonTizen.csproj", "{C558D279-897E-45E1-A10A-DECD788770F4}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}.Release|Any CPU.Build.0 = Release|Any CPU
- {7E341BF5-B7BD-4532-9D4A-AA89537B525E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7E341BF5-B7BD-4532-9D4A-AA89537B525E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7E341BF5-B7BD-4532-9D4A-AA89537B525E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7E341BF5-B7BD-4532-9D4A-AA89537B525E}.Release|Any CPU.Build.0 = Release|Any CPU
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Any CPU.Build.0 = Release|Any CPU
- {C558D279-897E-45E1-A10A-DECD788770F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C558D279-897E-45E1-A10A-DECD788770F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C558D279-897E-45E1-A10A-DECD788770F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C558D279-897E-45E1-A10A-DECD788770F4}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
--- /dev/null
+/*
+ * 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.ComponentModel;
+
+using TVApps.Controls;
+using TVApps.TizenTV.Renderer;
+using Xamarin.Forms.Platform.Tizen;
+
+[assembly: ExportRenderer(typeof(NinePatchImage), typeof(NinePatchImageRenderer))]
+namespace TVApps.TizenTV.Renderer
+{
+ /// <summary>
+ /// A custom renderer for NinePatchImage
+ /// </summary>
+ /// <see cref="NinePatchImage"/>
+ class NinePatchImageRenderer : ImageRenderer
+ {
+ /// <summary>
+ /// Updates border when Element is changed
+ /// </summary>
+ /// <param name="args">An image element changed event's argument </param>
+ protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Image> args)
+ {
+ base.OnElementChanged(args);
+ UpdateBorder();
+ }
+
+ /// <summary>
+ /// Updates border when ElementProperty is changed
+ /// </summary>
+ /// <param name="sender">The source of the event</param>
+ /// <param name="args">An image element property changed event's argument </param>
+ protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs args)
+ {
+ if ((args.PropertyName == NinePatchImage.BorderBottomProperty.PropertyName)
+ || (args.PropertyName == NinePatchImage.BorderLeftProperty.PropertyName)
+ || (args.PropertyName == NinePatchImage.BorderRightProperty.PropertyName)
+ || (args.PropertyName == NinePatchImage.BorderTopProperty.PropertyName))
+ {
+ UpdateBorder();
+ }
+
+ base.OnElementPropertyChanged(sender, args);
+ }
+
+ /// <summary>
+ /// A method updates border of Control(Native Image)
+ /// </summary>
+ void UpdateBorder()
+ {
+ var img = Element as NinePatchImage;
+ Control.SetBorder(img.BorderLeft, img.BorderRight, img.BorderTop, img.BorderBottom);
+ }
+
+ /// <summary>
+ /// A method updates border of Control(Native Image) after loading
+ /// </summary>
+ protected override void UpdateAfterLoading()
+ {
+ base.UpdateAfterLoading();
+ UpdateBorder();
+ }
+ }
+}
--- /dev/null
+<StyleCopSettings Version="105">
+ <GlobalSettings>
+ <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
+ </GlobalSettings>
+ <Analyzers>
+ <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
+ <Rules>
+ <Rule Name="ElementsMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustHaveSummaryText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="EnumerationItemsMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationMustContainValidXml">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustHaveSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PartialElementDocumentationMustHaveSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustNotHaveDefaultSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="VoidReturnValueMustNotBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParametersMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParametersMustBeDocumentedPartialClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustHaveText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertySummaryDocumentationMustMatchAccessors">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustNotBeCopiedAndPasted">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationTextMustNotBeEmpty">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationTextMustContainWhitespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationMustMeetCharacterPercentage">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationHeadersMustNotContainBlankLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncludedDocumentationXPathDoesNotExist">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncludeNodeDoesNotContainValidFileAndPath">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="InheritDocMustBeUsedWithInheritingClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustBeSpelledCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMustHaveHeader">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustShowCopyright">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustHaveCopyrightText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustContainFileName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderFileNameDocumentationMustMatchFileName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustHaveValidCompanyText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderFileNameDocumentationMustMatchTypeName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
+ <Rules>
+ <Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustBeginWithLowerCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotContainUnderscore">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementMustBeginWithLowerCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotUseHungarianNotation">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="VariableNamesMustNotBePrefixed">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotBeginWithUnderscore">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticReadonlyFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
+ <Rules>
+ <Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleBlankLinesInARow">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentMustBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustBeSeparatedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.MaintainabilityRules">
+ <Rules>
+ <Rule Name="AccessModifierMustBeDeclared">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldsMustBePrivate">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeAnalysisSuppressionMustHaveJustification">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DebugAssertMustProvideMessageText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DebugFailMustProvideMessageText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMayOnlyContainASingleClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMayOnlyContainASingleNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StatementMustNotUseUnnecessaryParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ArithmeticExpressionsMustDeclarePrecedence">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConditionalExpressionsMustDeclarePrecedence">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="RemoveDelegateParenthesisWhenPossible">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="AttributeConstructorMustNotUseUnnecessaryParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="RemoveUnnecessaryCode">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
+ <Rules>
+ <Rule Name="UsingDirectivesMustBePlacedWithinNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustAppearInTheCorrectOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustBeOrderedByAccess">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConstantsMustAppearBeforeFields">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticElementsMustAppearBeforeInstanceElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DeclarationKeywordsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ProtectedMustComeBeforeInternal">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertyAccessorsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="EventAccessorsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NoValueFirstComparison">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingStaticDirectivesMustBePlacedAfterUsingNamespaceDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">
+ <Rules>
+ <Rule Name="CommentsMustContainText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PrefixLocalCallsWithThis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PrefixCallsCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningParenthesisMustBeOnDeclarationLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CommaMustBeOnSameLineAsPreviousParameter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterListMustFollowDeclaration">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterMustFollowComma">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SplitParametersMustStartOnLineAfterDeclaration">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParametersMustBeOnSameLineOrSeparateLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterMustNotSpanMultipleLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClauseMustFollowPreviousClause">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClausesMustBeOnSeparateLinesOrAllOnOneLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClausesSpanningMultipleLinesMustBeginOnOwnLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotPlaceRegionsWithinElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainEmptyStatements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleStatementsOnOneLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="BlockStatementsMustNotContainEmbeddedComments">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="BlockStatementsMustNotContainEmbeddedRegions">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseStringEmptyForEmptyStrings">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseBuiltInTypeAlias">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseShorthandForNullableTypes">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
+ <Rules>
+ <Rule Name="CommasMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SemicolonsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationLinesMustBeginWithSingleSpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustBeginWithSingleSpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PreprocessorKeywordsMustNotBePrecededBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OperatorKeywordMustBeFollowedBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingCurlyBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningGenericBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingGenericBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningAttributeBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingAttributeBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NullableTypeSymbolsMustNotBePrecededBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="MemberAccessSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncrementDecrementSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NegativeSignsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PositiveSignsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ColonsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleWhitespaceInARow">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="TabsMustNotBeUsed">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotSplitNullConditionalOperators">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ </Analyzers>
+</StyleCopSettings>
\ No newline at end of file
--- /dev/null
+<Project>
+ <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
+
+ <!-- Setting Tizen Extension Path -->
+ <PropertyGroup Label="Globals">
+ <TizenProjectExtensionsPath>$(MSBuildExtensionsPath)\Tizen\VisualStudio\</TizenProjectExtensionsPath>
+ </PropertyGroup>
+
+ <!-- Import Tizen property in Tizen.NET SDK -->
+ <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" />
+
+ <!-- Property Group for .NET Core Project -->
+ <PropertyGroup>
+ <OutputType>Exe</OutputType>
+ <TargetFramework>netcoreapp2.0</TargetFramework>
+ </PropertyGroup>
+
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugType>portable</DebugType>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>None</DebugType>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <Folder Include="lib\" />
+ <Folder Include="res\" />
+ </ItemGroup>
+
+
+ <!-- If solution already has PCL project, will reference -->
+
+
+ <!-- Include Nuget Package for Tizen Project building -->
+ <ItemGroup>
+ <PackageReference Include="Tizen.NET" Version="4.0.0-preview1-00143" />
+ <PackageReference Include="Tizen.NET.Sdk" Version="0.9.18-pre1" />
+ <PackageReference Include="Tizen.Xamarin.Forms.Extension" Version="2.4.0-v00005" />
+ <PackageReference Include="Xamarin.Forms" Version="2.4.0.266-pre1" />
+ <PackageReference Include="Xamarin.Forms.Platform.Tizen" Version="2.4.0-r266-006" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\LibCommon.Shared\LibCommon.Shared.csproj" />
+ <ProjectReference Include="..\..\LibCommon.Tizen\LibCommon.Tizen.csproj" />
+ <ProjectReference Include="..\TVApps\TVApps.csproj" />
+ </ItemGroup>
+
+ <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
+ <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" />
+
+ <!-- Install Check 'Visual Studio for Tizen' for developing on Visual Studio -->
+ <Target Name="TizenVsixInstallCheck" BeforeTargets="CompileDesignTime">
+ <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props is not exist.
 you need to check if 'Visual Studio for Tizen' is installed" />
+ <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets is not exist.\
 you need to check if 'Visual Studio for Tizen' is installed" />
+ </Target>
+</Project>
--- /dev/null
+/*
+ * 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 LibTVRefCommonTizen.Ports;
+using Tizen.Applications;
+using Tizen.Xamarin.Forms.Extension.Renderer;
+
+namespace TVApps.TizenTV
+{
+ /// <summary>
+ /// TV Apps application main entry point
+ /// </summary>
+ public class Program : Xamarin.Forms.Platform.Tizen.FormsApplication, IAppLifeControl
+ {
+ /// <summary>
+ /// The application instance
+ /// </summary>
+ private static Program instance;
+
+ /// <summary>
+ /// An interface for the platform notification
+ /// </summary>
+ private IPlatformNotification notification;
+
+ /// <summary>
+ /// A method will be called when application is created
+ /// </summary>
+ protected override void OnCreate()
+ {
+ base.OnCreate();
+
+ FileSystemPort.AppDataStroagePath = DirectoryInfo.Data;
+ FileSystemPort.PlatformShareStroagePath = "/opt/usr/home/owner/share/";
+
+ var app = new App(MainWindow.ScreenSize.Width,
+ MainWindow.ScreenSize.Height,
+ MainWindow.ScreenDpi.X,
+ ElmSharp.Elementary.GetScale());
+ notification = app;
+
+ DbgPort.D("-----------------------------------");
+ DbgPort.D("Apps application is being loaded...");
+ DbgPort.D("-----------------------------------");
+ LoadApplication(app);
+
+ PackageManagerPort.RegisterCallbacks(notification);
+ MainWindow.Alpha = true;
+ MainWindow.KeyUp += KeyUpListener;
+
+ MainWindow.KeyGrab(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName, true);
+ MainWindow.KeyGrab("XF86Info", true);
+ }
+
+ /// <summary>
+ /// A method will be called when application receives KeyUp event
+ /// </summary>
+
+ /// <param name="sender">The source of the event</param>
+ /// <param name="args">A EvasKey event's argument</param>
+ private void KeyUpListener(object sender, ElmSharp.EvasKeyEventArgs args)
+ {
+ DebuggingUtils.Dbg("[TVApps.TizenTV.cs] Key Pressed :" + args.KeyName);
+ if (args.KeyName.CompareTo(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName) == 0 ||
+ args.KeyName.CompareTo("XF86Info") == 0)
+ {
+ notification?.OnMenuKeyPressed();
+ }
+ }
+
+ /// <summary>
+ /// A method will be called when application is terminated
+ /// </summary>
+ protected override void OnTerminate()
+ {
+ base.OnTerminate();
+
+ notification = null;
+ PackageManagerPort.UnregisterCallbacks();
+ MainWindow.KeyUngrab(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName);
+ MainWindow.KeyUngrab("XF86Info");
+ }
+
+ /// <summary>
+ /// A method will be called when application receives AppControl
+ /// </summary>
+ /// <param name="e">AppControl event argument</param>
+ protected override void OnAppControlReceived(AppControlReceivedEventArgs e)
+ {
+ DbgPort.D("OnAppControlReceived, " + e.ReceivedAppControl.Operation);
+
+ if (AppControlPort.AddAppOperation.CompareTo(e.ReceivedAppControl.Operation) == 0)
+ {
+ DbgPort.D("Add App Request");
+ notification.OnPinAppRequestReceived();
+ }
+ }
+
+ /// <summary>
+ /// The entry point for the application
+ /// </summary>
+ /// <param name="args">A list of command line arguments</param>
+ static void Main(string[] args)
+ {
+ instance = new Program();
+
+ DbgPort.Prefix = "Apps";
+
+ Xamarin.Forms.DependencyService.Register<DbgPort>();
+ Xamarin.Forms.DependencyService.Register<Program>();
+ Xamarin.Forms.DependencyService.Register<AppControlPort>();
+ Xamarin.Forms.DependencyService.Register<PackageManagerPort>();
+ Xamarin.Forms.DependencyService.Register<FileSystemWatcherPort>();
+ Xamarin.Forms.DependencyService.Register<ApplicationManagerPort>();
+ Xamarin.Forms.DependencyService.Register<FileSystemPort>();
+ Xamarin.Forms.DependencyService.Register<SystemSettingsPort>();
+
+ Xamarin.Forms.Platform.Tizen.Forms.Init(instance);
+ TizenFormsExtension.Init();
+
+ instance.Run(args);
+ }
+
+ /// <summary>
+ /// A method terminates application
+ /// </summary>
+ public void SelfTerminate()
+ {
+ instance.Exit();
+ }
+ }
+}
--- /dev/null
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v2.0",
+ "signature": "7b37460e941a73f9576f52a534d76051a2c28b59"
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v2.0": {
+ "TVApps.Tizen.TV/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "LibCommon.Tizen": "1.0.0",
+ "TVApps": "1.0.0",
+ "Tizen.NET": "4.0.0-preview1-00143",
+ "Tizen.NET.Sdk": "0.9.18-pre1",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1",
+ "Xamarin.Forms.Platform.Tizen": "2.4.0-r266-006"
+ },
+ "runtime": {
+ "TVApps.Tizen.TV.dll": {}
+ }
+ },
+ "Tizen.NET/4.0.0-preview1-00143": {
+ "runtime": {
+ "lib/netstandard1.6/ElmSharp.Wearable.dll": {},
+ "lib/netstandard1.6/ElmSharp.dll": {},
+ "lib/netstandard1.6/Tizen.Account.AccountManager.dll": {},
+ "lib/netstandard1.6/Tizen.Account.FidoClient.dll": {},
+ "lib/netstandard1.6/Tizen.Account.OAuth2.dll": {},
+ "lib/netstandard1.6/Tizen.Account.SyncManager.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Alarm.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.AttachPanel.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Badge.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Common.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.DataControl.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.MessagePort.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Notification.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.NotificationEventListener.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.PackageManager.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Preference.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.RemoteView.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Service.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.ToastMessage.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.UI.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.WatchApplication.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.WidgetApplication.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.WidgetControl.dll": {},
+ "lib/netstandard1.6/Tizen.Content.Download.dll": {},
+ "lib/netstandard1.6/Tizen.Content.MediaContent.dll": {},
+ "lib/netstandard1.6/Tizen.Content.MimeType.dll": {},
+ "lib/netstandard1.6/Tizen.Context.dll": {},
+ "lib/netstandard1.6/Tizen.Location.Geofence.dll": {},
+ "lib/netstandard1.6/Tizen.Location.dll": {},
+ "lib/netstandard1.6/Tizen.Log.dll": {},
+ "lib/netstandard1.6/Tizen.Maps.dll": {},
+ "lib/netstandard1.6/Tizen.Messaging.Push.dll": {},
+ "lib/netstandard1.6/Tizen.Messaging.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.AudioIO.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Camera.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.MediaCodec.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.MediaPlayer.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Metadata.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Radio.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Recorder.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Remoting.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.StreamRecorder.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Util.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Vision.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.dll": {},
+ "lib/netstandard1.6/Tizen.NUI.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Bluetooth.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Connection.dll": {},
+ "lib/netstandard1.6/Tizen.Network.IoTConnectivity.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Nfc.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Nsd.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Smartcard.dll": {},
+ "lib/netstandard1.6/Tizen.Network.WiFi.dll": {},
+ "lib/netstandard1.6/Tizen.Network.WiFiDirect.dll": {},
+ "lib/netstandard1.6/Tizen.PhonenumberUtils.dll": {},
+ "lib/netstandard1.6/Tizen.Pims.Calendar.dll": {},
+ "lib/netstandard1.6/Tizen.Pims.Contacts.dll": {},
+ "lib/netstandard1.6/Tizen.Security.SecureRepository.dll": {},
+ "lib/netstandard1.6/Tizen.Security.TEEC.dll": {},
+ "lib/netstandard1.6/Tizen.Security.dll": {},
+ "lib/netstandard1.6/Tizen.Sensor.dll": {},
+ "lib/netstandard1.6/Tizen.System.Feedback.dll": {},
+ "lib/netstandard1.6/Tizen.System.Information.dll": {},
+ "lib/netstandard1.6/Tizen.System.MediaKey.dll": {},
+ "lib/netstandard1.6/Tizen.System.PlatformConfig.dll": {},
+ "lib/netstandard1.6/Tizen.System.Storage.dll": {},
+ "lib/netstandard1.6/Tizen.System.SystemSettings.dll": {},
+ "lib/netstandard1.6/Tizen.System.dll": {},
+ "lib/netstandard1.6/Tizen.Telephony.dll": {},
+ "lib/netstandard1.6/Tizen.Tracer.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.InputMethod.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.InputMethodManager.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.Stt.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.Tts.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.VoiceControl.dll": {},
+ "lib/netstandard1.6/Tizen.WebView.dll": {},
+ "lib/netstandard1.6/Tizen.dll": {}
+ }
+ },
+ "Tizen.NET.Sdk/0.9.18-pre1": {},
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "dependencies": {
+ "Xamarin.Forms": "2.4.0.266-pre1",
+ "Xamarin.Forms.Platform.Tizen": "2.4.0-r266-006"
+ },
+ "runtime": {
+ "lib/netcoreapp2.0/Tizen.Xamarin.Forms.Extension.Renderer.dll": {},
+ "lib/netcoreapp2.0/Tizen.Xamarin.Forms.Extension.dll": {}
+ }
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "runtime": {
+ "lib/netstandard1.0/Xamarin.Forms.Core.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Platform.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Xaml.dll": {}
+ }
+ },
+ "Xamarin.Forms.Platform.Tizen/2.4.0-r266-006": {
+ "dependencies": {
+ "Tizen.NET": "4.0.0-preview1-00143",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "lib/netstandard1.6/Xamarin.Forms.Platform.Tizen.dll": {}
+ }
+ },
+ "LibCommon.Shared/1.0.0": {
+ "dependencies": {
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "LibCommon.Shared.dll": {}
+ }
+ },
+ "LibCommon.Tizen/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "Tizen.NET": "4.0.0-preview1-00143",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1",
+ "Xamarin.Forms.Platform.Tizen": "2.4.0-r266-006"
+ },
+ "runtime": {
+ "LibCommon.Tizen.dll": {}
+ }
+ },
+ "TVApps/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "TVApps.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "TVApps.Tizen.TV/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Tizen.NET/4.0.0-preview1-00143": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-woW6D9FsWZD2lJRwbND2hzMIi9l7QYwUqfpCxrMT3+Mh3+8UdFM86skDdw3mAgpLIqfC1plUfbISksQ9G2Gcgg==",
+ "path": "tizen.net/4.0.0-preview1-00143",
+ "hashPath": "tizen.net.4.0.0-preview1-00143.nupkg.sha512"
+ },
+ "Tizen.NET.Sdk/0.9.18-pre1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-lUsZ48M9YxKKwpYpE6zbd2/uw7GeJJZmKYABHW6Xdcfarxf17ncGRBLl7Gnt2rAc5ev8UkNKYfZoQQh+kQO2Hw==",
+ "path": "tizen.net.sdk/0.9.18-pre1",
+ "hashPath": "tizen.net.sdk.0.9.18-pre1.nupkg.sha512"
+ },
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-MKUamVt5XloZ/JziyOXLdbahn7T0LDQDJGUt3ynt0iSia4aLpZLOua6/iypBhnC79FgMaNfUA7APjVfjh3NLTg==",
+ "path": "tizen.xamarin.forms.extension/2.4.0-v00005",
+ "hashPath": "tizen.xamarin.forms.extension.2.4.0-v00005.nupkg.sha512"
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-pMu+b01vdH1ul5EJo1opQjEcwisWT35DdZO6EuR9HNKfY1dWyKmAlWgRdGUtjtdbhjOAtCOQUxI7F3x4hvV8KA==",
+ "path": "xamarin.forms/2.4.0.266-pre1",
+ "hashPath": "xamarin.forms.2.4.0.266-pre1.nupkg.sha512"
+ },
+ "Xamarin.Forms.Platform.Tizen/2.4.0-r266-006": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xDEcJnKerroXtMLLUVssB9+f2mZMB5ngulNB09OsIp0gRqP7GnpqJEyWQsISFRCk272lNVd57UhXGCUFl9/aRg==",
+ "path": "xamarin.forms.platform.tizen/2.4.0-r266-006",
+ "hashPath": "xamarin.forms.platform.tizen.2.4.0-r266-006.nupkg.sha512"
+ },
+ "LibCommon.Shared/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "LibCommon.Tizen/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "TVApps/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "runtimeOptions": {
+ "additionalProbingPaths": [
+ "C:\\Users\\samsung\\.dotnet\\store\\|arch|\\|tfm|",
+ "C:\\Users\\samsung\\.nuget\\packages",
+ "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
+ ]
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "runtimeOptions": {
+ "tfm": "netcoreapp2.0",
+ "framework": {
+ "name": "Microsoft.NETCore.App",
+ "version": "2.0.0"
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+<Signature Id="AuthorSignature" xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <SignedInfo>
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+ <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
+ <Reference URI="tizen-manifest.xml">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>PW6DDKlhSQZGENOMYSTs9krh2HLoq2dKCYzYpjHKDNs=</DigestValue>
+ </Reference>
+ <Reference URI="shared%2Fres%2FTVApps.Tizen.TV.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>/gTbhhRqVKFAMykTkZyDaEozK7OBNMSXGtsJpmRcLuE=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Xaml.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>J/d/Iu+nPnrMUHbnjHtcNpI4dTAbHKyD61nelmBE8rE=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>k9quBEmTxuUA7AiVyJthoirEwrl9SgQr5J0DXi6llkk=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>8FCwIup+0tvOQf5a14Lo7VQVCCG9bgxkw/sxAFAN8lM=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Core.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Wnha/ZDGFuzYPiZ6JyEp1wTQYBpYv7WDYs8CHPr3Ugs=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.Tizen.TV.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>x/rqZEBQb4V2cBRByJrDHyvHUP5aIka4jiBYuVysUJg=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.Tizen.TV.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>BgawWdKNYytoW7rglBK3/WadIDO64RmYLRvqdVlKcYA=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iN7qVbbwpxhN3RAqDyb3zDQuvkTlNJNM3mIo45nyMzU=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>nmik89SH8yehPu6zI2peM/amzyT0kunzhWjX/nKDWto=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Xamarin.Forms.Extension.Renderer.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>7oZiDFE6sc/h/5gxMoKu72pn73f48lWBD8p5W7h7j4I=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Xamarin.Forms.Extension.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Q1voviamaw/GnkgZDXopBuyM18WxY0sxyD5g3Uyovf4=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.System.PlatformConfig.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>1fLNIiGbumlNGMW1fApud98XB/+XaRzlfKtOlAaIDwQ=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Applications.WatchApplication.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>899qMfwfpHleUrl1Eyx89Y4AJxYGBwOc7bsmIIERfA4=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Applications.AttachPanel.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Ujn3mYvFRa5GBhVgy6iMMKWOOh0Vl33ISGagcSkxC2U=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Account.SyncManager.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>vy52VSuLoSlQmeqgLYOQP2SZUL8kdr2x6Dw4WL5ia5M=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Tizen.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>p9BXz7Wy961nTBtuJ6NBBlcg3d6JzxtAa2kKvTAjU0k=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ytXYOQFfxUo6TNaE/JC9uMkpYq28zyKWfuzKtLt1hD8=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Shared.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>28yMmL3EV3MWlzVPfP3R3jC9/qQWZlIWvvKHFJz5Qs0=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Shared.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>L9fmVpePV7PCT/SW8PIIBm6ekdcZSq9eG07O/R4s8pI=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FElmSharp.Wearable.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>9xk59Y9Uhmml3aT0AKL5zD8aQbN2QMedWOZxxGQ86EA=</DigestValue>
+ </Reference>
+ <Reference URI="#prop">
+ <Transforms>
+ <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
+ </Transforms>
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>e2rGZ9lURQWep1IIbrRk2NYMw5EXlejQt2B0bMLUyoc=</DigestValue>
+ </Reference>
+ </SignedInfo>
+ <SignatureValue>
+nbrOAJrnCyJgp5Y34tEQ3Daf0njmZIIV0sNvkwJs69Uugq+NdAjTI9Svtker16UkS4R5DjC2/FmR
+bMHFZVxEpsKv4mkpiqrw1R+PWjQOTUEXd1wOeuJpVvUkBMMtbQRSAgnLf01P7H9Ew3Uqb15BLHZx
+1umibqx4r9BhmOMZiIE=
+</SignatureValue>
+ <KeyInfo>
+ <X509Data>
+ <X509Certificate>
+MIIClTCCAX2gAwIBAgIGAVYhXgiqMA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz
+c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2
+ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMBExDzANBgNVBAMMBmF1
+dGhvcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApm4Xqu2NAxOEh4Fgo0w6j+Q9MccSOPny
+mkyM3XMn0nL7mFKL4ZETxyRXlMU8DnM9l4zsEH3iS15cZknesUrCEAiuhL4fsp05ZSr6ERCYQrXs
+06WPmepipiM7n6BWzCsSmv0qNxkYWjZODWT2+15PsXfvwsK9wsrjSDIT8SuYV48CAwEAAaMyMDAw
+DAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcN
+AQEFBQADggEBAMqla3XZiV3xAQe3laSgVJvmtEsjl3Zfp7Nufrobsl4pxQhVbOITomeEqrJkn4e6
+zzfsjQQ6nw0yXqeo6qfP1ez8Wvr/egyfO6BrnARX37K5cXszpIn7IvO6xl4Ux/rtp4vvQXDcrDS5
+F07d9tg+5UO6MC/9cKaCNEIxSkXEhjOf5x2LGg686fq5V4WEKCO2ApkJRXn+tFRArysrT5FPEnus
+NG+XhHWJw58HgBrZFl0SOUJQvzi3xv5xVPml65qwbehmQyu+LcgWeKySO46nzF0AXlCTaC78FGYk
+nrG2yFeWO6SWXGV7uxgizufT+s851rPFg/EWYEjqX4jU/jp7Swg=
+</X509Certificate>
+ <X509Certificate>
+MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh
+dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl
+cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu
+IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g
+RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o
+PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu
+g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj
+vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/
+jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE
+dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC
+AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH
+95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04
+1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M
++OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI
+W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg==
+</X509Certificate>
+ </X509Data>
+ </KeyInfo>
+ <Object Id="prop">
+ <SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties">
+ <SignatureProperty Id="profile" Target="#AuthorSignature">
+ <dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile" />
+ </SignatureProperty>
+ <SignatureProperty Id="role" Target="#AuthorSignature">
+ <dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-author" />
+ </SignatureProperty>
+ <SignatureProperty Id="identifier" Target="#AuthorSignature">
+ <dsp:Identifier />
+ </SignatureProperty>
+ </SignatureProperties>
+ </Object>
+</Signature>
\ No newline at end of file
--- /dev/null
+<Signature Id="DistributorSignature" xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <SignedInfo>
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+ <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
+ <Reference URI="tizen-manifest.xml">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>PW6DDKlhSQZGENOMYSTs9krh2HLoq2dKCYzYpjHKDNs=</DigestValue>
+ </Reference>
+ <Reference URI="shared%2Fres%2FTVApps.Tizen.TV.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>/gTbhhRqVKFAMykTkZyDaEozK7OBNMSXGtsJpmRcLuE=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Xaml.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>J/d/Iu+nPnrMUHbnjHtcNpI4dTAbHKyD61nelmBE8rE=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>k9quBEmTxuUA7AiVyJthoirEwrl9SgQr5J0DXi6llkk=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>8FCwIup+0tvOQf5a14Lo7VQVCCG9bgxkw/sxAFAN8lM=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Core.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Wnha/ZDGFuzYPiZ6JyEp1wTQYBpYv7WDYs8CHPr3Ugs=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.Tizen.TV.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>x/rqZEBQb4V2cBRByJrDHyvHUP5aIka4jiBYuVysUJg=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.Tizen.TV.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>BgawWdKNYytoW7rglBK3/WadIDO64RmYLRvqdVlKcYA=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iN7qVbbwpxhN3RAqDyb3zDQuvkTlNJNM3mIo45nyMzU=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>nmik89SH8yehPu6zI2peM/amzyT0kunzhWjX/nKDWto=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Xamarin.Forms.Extension.Renderer.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>7oZiDFE6sc/h/5gxMoKu72pn73f48lWBD8p5W7h7j4I=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Xamarin.Forms.Extension.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Q1voviamaw/GnkgZDXopBuyM18WxY0sxyD5g3Uyovf4=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.System.PlatformConfig.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>1fLNIiGbumlNGMW1fApud98XB/+XaRzlfKtOlAaIDwQ=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Applications.WatchApplication.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>899qMfwfpHleUrl1Eyx89Y4AJxYGBwOc7bsmIIERfA4=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Applications.AttachPanel.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Ujn3mYvFRa5GBhVgy6iMMKWOOh0Vl33ISGagcSkxC2U=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Account.SyncManager.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>vy52VSuLoSlQmeqgLYOQP2SZUL8kdr2x6Dw4WL5ia5M=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Tizen.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>p9BXz7Wy961nTBtuJ6NBBlcg3d6JzxtAa2kKvTAjU0k=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ytXYOQFfxUo6TNaE/JC9uMkpYq28zyKWfuzKtLt1hD8=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Shared.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>28yMmL3EV3MWlzVPfP3R3jC9/qQWZlIWvvKHFJz5Qs0=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Shared.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>L9fmVpePV7PCT/SW8PIIBm6ekdcZSq9eG07O/R4s8pI=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FElmSharp.Wearable.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>9xk59Y9Uhmml3aT0AKL5zD8aQbN2QMedWOZxxGQ86EA=</DigestValue>
+ </Reference>
+ <Reference URI="author-signature.xml">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>v1HIQ1oAj0d93pjOih1y2AIp2no3LNXDJ4VtjJfuxnA=</DigestValue>
+ </Reference>
+ <Reference URI="#prop">
+ <Transforms>
+ <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
+ </Transforms>
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>abSCdQC03ZcPoEN8T0eWSILDIhDi2uNziivgdw1gmmQ=</DigestValue>
+ </Reference>
+ </SignedInfo>
+ <SignatureValue>
+WYhNnCdE+md3kl9gZJRTpLWQQlrq6HhTOAd/YRhEAc7QaJJzVoBbWnRtxmIgmD4z5mWCUvpoIciR
+ikSD0U0pc6qyKugNHRgG8U2g+4jpHfEukaPpfKBeWLVmySS+Qw2w+Gq7RgIGrMICPWntQuxxqFj8
+oX4m/76+NR8hpdU6djw=
+</SignatureValue>
+ <KeyInfo>
+ <X509Data>
+ <X509Certificate>
+MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV
+BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE
+CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry
+aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS
+MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex
+IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp
+YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK
+90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H
+mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB
+hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez
+GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1
+vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc=
+</X509Certificate>
+ <X509Certificate>
+MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO
+MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw
+IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj
+IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL
+MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6
+ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb
+VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe
+OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp
+bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah
+2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ
+KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+
+yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0
+VhfnkHwPltmrpYVe
+</X509Certificate>
+ </X509Data>
+ </KeyInfo>
+ <Object Id="prop">
+ <SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties">
+ <SignatureProperty Id="profile" Target="#DistributorSignature">
+ <dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile" />
+ </SignatureProperty>
+ <SignatureProperty Id="role" Target="#DistributorSignature">
+ <dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-distributor" />
+ </SignatureProperty>
+ <SignatureProperty Id="identifier" Target="#DistributorSignature">
+ <dsp:Identifier />
+ </SignatureProperty>
+ </SignatureProperties>
+ </Object>
+</Signature>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest package="org.tizen.xaapps" version="1.0.0" api-version="3.0" xmlns="http://tizen.org/ns/packages">
+ <profile name="tv" />
+ <ui-application appid="org.tizen.xaapps" exec="TVApps.Tizen.TV.dll" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="false" type="dotnet" launch_mode="single">
+ <icon>xaapps.png</icon>
+ <label>Apps</label>
+ </ui-application>
+ <shortcut-list />
+</manifest>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest package="org.tizen.xaapps" version="1.0.0" api-version="3.0" xmlns="http://tizen.org/ns/packages">
+ <profile name="tv" />
+ <ui-application appid="org.tizen.xaapps" exec="TVApps.Tizen.TV.dll" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="false" type="dotnet" launch_mode="single">
+ <icon>xaapps.png</icon>
+ <label>Apps</label>
+ </ui-application>
+ <shortcut-list />
+</manifest>
+++ /dev/null
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("TVApps.TizenTV")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("TVApps.TizenTV")]
-[assembly: AssemblyCopyright("Copyright © 2017")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("7e341bf5-b7bd-4532-9d4a-aa89537b525e")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+++ /dev/null
-/*
- * 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.ComponentModel;
-
-using TVApps.Controls;
-using TVApps.TizenTV.Renderer;
-using Xamarin.Forms.Platform.Tizen;
-
-[assembly: ExportRenderer(typeof(NinePatchImage), typeof(NinePatchImageRenderer))]
-namespace TVApps.TizenTV.Renderer
-{
- /// <summary>
- /// A custom renderer for NinePatchImage
- /// </summary>
- /// <see cref="NinePatchImage"/>
- class NinePatchImageRenderer : ImageRenderer
- {
- /// <summary>
- /// Updates border when Element is changed
- /// </summary>
- /// <param name="args">An image element changed event's argument </param>
- protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Image> args)
- {
- base.OnElementChanged(args);
- UpdateBorder();
- }
-
- /// <summary>
- /// Updates border when ElementProperty is changed
- /// </summary>
- /// <param name="sender">The source of the event</param>
- /// <param name="args">An image element property changed event's argument </param>
- protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs args)
- {
- if ((args.PropertyName == NinePatchImage.BorderBottomProperty.PropertyName)
- || (args.PropertyName == NinePatchImage.BorderLeftProperty.PropertyName)
- || (args.PropertyName == NinePatchImage.BorderRightProperty.PropertyName)
- || (args.PropertyName == NinePatchImage.BorderTopProperty.PropertyName))
- {
- UpdateBorder();
- }
-
- base.OnElementPropertyChanged(sender, args);
- }
-
- /// <summary>
- /// A method updates border of Control(Native Image)
- /// </summary>
- void UpdateBorder()
- {
- var img = Element as NinePatchImage;
- Control.SetBorder(img.BorderLeft, img.BorderRight, img.BorderTop, img.BorderBottom);
- }
-
- /// <summary>
- /// A method updates border of Control(Native Image) after loading
- /// </summary>
- protected override void UpdateAfterLoading()
- {
- base.UpdateAfterLoading();
- UpdateBorder();
- }
- }
-}
+++ /dev/null
-<StyleCopSettings Version="105">
- <GlobalSettings>
- <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
- </GlobalSettings>
- <Analyzers>
- <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
- <Rules>
- <Rule Name="ElementsMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustHaveSummaryText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="EnumerationItemsMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationMustContainValidXml">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustHaveSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PartialElementDocumentationMustHaveSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustNotHaveDefaultSummary">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="VoidReturnValueMustNotBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParametersMustBeDocumented">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParametersMustBeDocumentedPartialClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="GenericTypeParameterDocumentationMustHaveText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertySummaryDocumentationMustMatchAccessors">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustNotBeCopiedAndPasted">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationTextMustNotBeEmpty">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationTextMustContainWhitespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationMustMeetCharacterPercentage">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationHeadersMustNotContainBlankLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncludedDocumentationXPathDoesNotExist">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncludeNodeDoesNotContainValidFileAndPath">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="InheritDocMustBeUsedWithInheritingClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationMustBeSpelledCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMustHaveHeader">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustShowCopyright">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustHaveCopyrightText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustContainFileName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderFileNameDocumentationMustMatchFileName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderMustHaveValidCompanyText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileHeaderFileNameDocumentationMustMatchTypeName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
- <Rules>
- <Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustBeginWithLowerCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotContainUnderscore">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementMustBeginWithLowerCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotUseHungarianNotation">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="VariableNamesMustNotBePrefixed">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldNamesMustNotBeginWithUnderscore">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticReadonlyFieldsMustBeginWithUpperCaseLetter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
- <Rules>
- <Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleBlankLinesInARow">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentMustBePrecededByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustBeSeparatedByBlankLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.MaintainabilityRules">
- <Rules>
- <Rule Name="AccessModifierMustBeDeclared">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FieldsMustBePrivate">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeAnalysisSuppressionMustHaveJustification">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DebugAssertMustProvideMessageText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DebugFailMustProvideMessageText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMayOnlyContainASingleClass">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="FileMayOnlyContainASingleNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StatementMustNotUseUnnecessaryParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ArithmeticExpressionsMustDeclarePrecedence">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConditionalExpressionsMustDeclarePrecedence">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="RemoveDelegateParenthesisWhenPossible">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="AttributeConstructorMustNotUseUnnecessaryParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="RemoveUnnecessaryCode">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
- <Rules>
- <Rule Name="UsingDirectivesMustBePlacedWithinNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustAppearInTheCorrectOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ElementsMustBeOrderedByAccess">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ConstantsMustAppearBeforeFields">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticElementsMustAppearBeforeInstanceElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DeclarationKeywordsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ProtectedMustComeBeforeInternal">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PropertyAccessorsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="EventAccessorsMustFollowOrder">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NoValueFirstComparison">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UsingStaticDirectivesMustBePlacedAfterUsingNamespaceDirectives">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">
- <Rules>
- <Rule Name="CommentsMustContainText">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PrefixLocalCallsWithThis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PrefixCallsCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningParenthesisMustBeOnDeclarationLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CommaMustBeOnSameLineAsPreviousParameter">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterListMustFollowDeclaration">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterMustFollowComma">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SplitParametersMustStartOnLineAfterDeclaration">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParametersMustBeOnSameLineOrSeparateLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ParameterMustNotSpanMultipleLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClauseMustFollowPreviousClause">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClausesMustBeOnSeparateLinesOrAllOnOneLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="QueryClausesSpanningMultipleLinesMustBeginOnOwnLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotPlaceRegionsWithinElements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainEmptyStatements">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleStatementsOnOneLine">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="BlockStatementsMustNotContainEmbeddedComments">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="BlockStatementsMustNotContainEmbeddedRegions">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseStringEmptyForEmptyStrings">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseBuiltInTypeAlias">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="UseShorthandForNullableTypes">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- <Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
- <Rules>
- <Rule Name="CommasMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SemicolonsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DocumentationLinesMustBeginWithSingleSpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="SingleLineCommentsMustBeginWithSingleSpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PreprocessorKeywordsMustNotBePrecededBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OperatorKeywordMustBeFollowedBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningCurlyBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingCurlyBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningGenericBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingGenericBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="OpeningAttributeBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ClosingAttributeBracketsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NullableTypeSymbolsMustNotBePrecededBySpace">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="MemberAccessSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="IncrementDecrementSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="NegativeSignsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="PositiveSignsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="ColonsMustBeSpacedCorrectly">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainMultipleWhitespaceInARow">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="TabsMustNotBeUsed">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- <Rule Name="DoNotSplitNullConditionalOperators">
- <RuleSettings>
- <BooleanProperty Name="Enabled">False</BooleanProperty>
- </RuleSettings>
- </Rule>
- </Rules>
- <AnalyzerSettings />
- </Analyzer>
- </Analyzers>
-</StyleCopSettings>
\ No newline at end of file
+++ /dev/null
-/*
- * 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 LibTVRefCommonTizen.Ports;
-using Tizen.Applications;
-using Tizen.Xamarin.Forms.Extension.Renderer;
-
-namespace TVApps.TizenTV
-{
- /// <summary>
- /// TV Apps application main entry point
- /// </summary>
- public class Program : Xamarin.Forms.Platform.Tizen.FormsApplication, IAppLifeControl
- {
- /// <summary>
- /// The application instance
- /// </summary>
- private static Program instance;
-
- /// <summary>
- /// An interface for the platform notification
- /// </summary>
- private IPlatformNotification notification;
-
- /// <summary>
- /// A method will be called when application is created
- /// </summary>
- protected override void OnCreate()
- {
- base.OnCreate();
-
- FileSystemPort.AppDataStroagePath = DirectoryInfo.Data;
- FileSystemPort.PlatformShareStroagePath = "/opt/usr/home/owner/share/";
-
- var app = new App(MainWindow.ScreenSize.Width,
- MainWindow.ScreenSize.Height,
- MainWindow.ScreenDpi.X,
- ElmSharp.Elementary.GetScale());
- notification = app;
-
- DbgPort.D("-----------------------------------");
- DbgPort.D("Apps application is being loaded...");
- DbgPort.D("-----------------------------------");
- LoadApplication(app);
-
- PackageManagerPort.RegisterCallbacks(notification);
- MainWindow.Alpha = true;
- MainWindow.KeyUp += KeyUpListener;
-
- MainWindow.KeyGrab(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName, true);
- MainWindow.KeyGrab("XF86Info", true);
- }
-
- /// <summary>
- /// A method will be called when application receives KeyUp event
- /// </summary>
-
- /// <param name="sender">The source of the event</param>
- /// <param name="args">A EvasKey event's argument</param>
- private void KeyUpListener(object sender, ElmSharp.EvasKeyEventArgs args)
- {
- DebuggingUtils.Dbg("[TVApps.TizenTV.cs] Key Pressed :" + args.KeyName);
- if (args.KeyName.CompareTo(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName) == 0 ||
- args.KeyName.CompareTo("XF86Info") == 0)
- {
- notification?.OnMenuKeyPressed();
- }
- }
-
- /// <summary>
- /// A method will be called when application is terminated
- /// </summary>
- protected override void OnTerminate()
- {
- base.OnTerminate();
-
- notification = null;
- PackageManagerPort.UnregisterCallbacks();
- MainWindow.KeyUngrab(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName);
- MainWindow.KeyUngrab("XF86Info");
- }
-
- /// <summary>
- /// A method will be called when application receives AppControl
- /// </summary>
- /// <param name="e">AppControl event argument</param>
- protected override void OnAppControlReceived(AppControlReceivedEventArgs e)
- {
- DbgPort.D("OnAppControlReceived, " + e.ReceivedAppControl.Operation);
-
- if (AppControlPort.AddAppOperation.CompareTo(e.ReceivedAppControl.Operation) == 0)
- {
- DbgPort.D("Add App Request");
- notification.OnPinAppRequestReceived();
- }
- }
-
- /// <summary>
- /// The entry point for the application
- /// </summary>
- /// <param name="args">A list of command line arguments</param>
- static void Main(string[] args)
- {
- instance = new Program();
-
- DbgPort.Prefix = "Apps";
-
- Xamarin.Forms.DependencyService.Register<DbgPort>();
- Xamarin.Forms.DependencyService.Register<Program>();
- Xamarin.Forms.DependencyService.Register<AppControlPort>();
- Xamarin.Forms.DependencyService.Register<PackageManagerPort>();
- Xamarin.Forms.DependencyService.Register<FileSystemWatcherPort>();
- Xamarin.Forms.DependencyService.Register<ApplicationManagerPort>();
- Xamarin.Forms.DependencyService.Register<FileSystemPort>();
- Xamarin.Forms.DependencyService.Register<SystemSettingsPort>();
-
- Xamarin.Forms.Platform.Tizen.Forms.Init(instance);
- TizenFormsExtension.Init();
-
- instance.Run(args);
- }
-
- /// <summary>
- /// A method terminates application
- /// </summary>
- public void SelfTerminate()
- {
- instance.Exit();
- }
- }
-}
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectTypeGuids>{2F98DAC9-6F16-457B-AED7-D43CAC379341};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ProjectGuid>{7E341BF5-B7BD-4532-9D4A-AA89537B525E}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>TVApps.TizenTV</RootNamespace>
- <AssemblyName>xaapps</AssemblyName>
- <FileAlignment>512</FileAlignment>
- <DefaultLanguage>en-US</DefaultLanguage>
- </PropertyGroup>
- <PropertyGroup>
- <TargetFrameworkIdentifier>DNXCore</TargetFrameworkIdentifier>
- <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
- <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>
- <NuGetTargetMoniker>.NETCoreApp,Version=v1.0</NuGetTargetMoniker>
- <NoStdLib>true</NoStdLib>
- <NoWarn>$(NoWarn);1701</NoWarn>
- <UseVSHostingProcess>false</UseVSHostingProcess>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>portable</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>portable</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <None Include="TVApps.TizenTV.project.json" />
- <None Include="tizen-manifest.xml" />
- <None Include="shared\res\xaapps.png" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Renderer\NinePatchImageRenderer.cs" />
- <Compile Include="TVApps.TizenTV.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <Folder Include="lib\" />
- <Folder Include="res\" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\LibTVRefCommonPortable\LibTVRefCommonPortable.csproj">
- <Project>{67F9D3A8-F71E-4428-913F-C37AE82CDB24}</Project>
- <Name>LibTVRefCommonPortable</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\LibTVRefCommonTizen\LibTVRefCommonTizen.csproj">
- <Project>{C558D279-897E-45E1-A10A-DECD788770F4}</Project>
- <Name>LibTVRefCommonTizen</Name>
- </ProjectReference>
- <ProjectReference Include="..\TVApps\TVApps.csproj">
- <Project>{fd8c0ef4-6cea-4421-85b7-7ac8592738c6}</Project>
- <Name>TVApps</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- 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.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
- <PropertyGroup>
- <!-- https://github.com/dotnet/corefxlab/tree/master/samples/NetCoreSample and
- https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/target-dotnetcore-with-msbuild
- -->
- <!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two
- properties to any folder that exists to skip the GetReferenceAssemblyPaths task (not target) and
- to prevent it from outputting a warning (MSB3644).
- -->
- <_TargetFrameworkDirectories>$(MSBuildThisFileDirectory)</_TargetFrameworkDirectories>
- <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)</_FullFrameworkReferenceAssemblyPaths>
- <AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences>
- </PropertyGroup>
- <ProjectExtensions>
- <VisualStudio>
- <FlavorProperties GUID="{2F98DAC9-6F16-457B-AED7-D43CAC379341}" Configuration="Debug|Any CPU">
- <ProjectCommonFlavorCfg>
- <excludeXamarinForms>True</excludeXamarinForms>
- </ProjectCommonFlavorCfg>
- </FlavorProperties>
- <FlavorProperties GUID="{2F98DAC9-6F16-457B-AED7-D43CAC379341}" Configuration="Release|Any CPU">
- <ProjectCommonFlavorCfg />
- </FlavorProperties>
- </VisualStudio>
- </ProjectExtensions>
-</Project>
\ No newline at end of file
+++ /dev/null
-{
- "buildOptions": {
- "emitEntryPoint": true,
- "debugType": "portable",
- "platform": "AnyCPU",
- "preserveCompilationContext": true
- },
- "dependencies": {
- "ElmSharp": "1.2.2",
- "Microsoft.NETCore.App": "1.1.2",
- "Tizen.Applications": "1.5.8",
- "Tizen.Content.MediaContent": "1.0.20",
- "Tizen.Multimedia": "1.2.0",
- "Tizen.Multimedia.MediaPlayer": "1.0.2",
- "Tizen.Xamarin.Forms.Extension": "2.3.5-v00015",
- "Xamarin.Forms": "2.4.0-r266-001",
- "Xamarin.Forms.Platform.Tizen": "2.3.5-r256-001"
- },
- "runtimes": {
- "win": {},
- "linux": {}
- },
- "frameworks": {
- "netcoreapp1.0": {
- "imports": [
- "portable-net45+wp80+win81+wpa81",
- "netstandard1.6"
- ]
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<manifest package="org.tizen.xaapps" version="1.0.0" api-version="3.0" xmlns="http://tizen.org/ns/packages">
- <profile name="tv" />
- <ui-application appid="org.tizen.xaapps" exec="xaapps.exe" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="false" type="dotnet" launch_mode="single">
- <icon>xaapps.png</icon>
- <label>Apps</label>
- </ui-application>
- <shortcut-list />
-</manifest>
using System.ComponentModel;
using System.Windows.Input;
using Xamarin.Forms;
-using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
using Tizen.Xamarin.Forms.Extension;
namespace TVApps.Controls
ButtonTitle.PropertyChanged += ButtonTitlePropertyChanged;
PropertyChanged += AppItemCellPropertyChanged;
- ButtonTitle.On<Tizen>().SetFontWeight(FontWeight.Normal);
+ //ButtonTitle.On<Tizen>().SetFontWeight(FontWeight.Normal);
}
ContextPopup popup = new ContextPopup
{
IsAutoHidingEnabled = true,
- Orientation = ContextPopupOrientation.Vertical,
DirectionPriorities = new ContextPopupDirectionPriorities(ContextPopupDirection.Down, ContextPopupDirection.Right, ContextPopupDirection.Left, ContextPopupDirection.Up),
};
+++ /dev/null
-using System.Resources;
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("TVApps")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("TVApps")]
-[assembly: AssemblyCopyright("Copyright © 2017")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+
<PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ProjectGuid>{FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}</ProjectGuid>
- <OutputType>Library</OutputType>
- <RootNamespace>TVApps</RootNamespace>
- <AssemblyName>TVApps</AssemblyName>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>
- <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
- <NuGetPackageImportStamp>
- </NuGetPackageImportStamp>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>portable</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <ConsolePause>false</ConsolePause>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>portable</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <ConsolePause>false</ConsolePause>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="Controls\AppItemCell.xaml.cs">
- <DependentUpon>AppItemCell.xaml</DependentUpon>
- </Compile>
- <Compile Include="Controls\AppListView.xaml.cs">
- <DependentUpon>AppListView.xaml</DependentUpon>
- </Compile>
- <Compile Include="Controls\NinePatchImage.xaml.cs">
- <DependentUpon>NinePatchImage.xaml</DependentUpon>
- </Compile>
- <Compile Include="TVApps.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="ViewModels\AppsHolder.cs" />
- <Compile Include="ViewModels\AppsListSorter.cs" />
- <Compile Include="ViewModels\FooterViewModel.cs" />
- <Compile Include="ViewModels\IAppsViewModel.cs" />
- <Compile Include="ViewModels\ItemViewModel.cs" />
- <Compile Include="ViewModels\ListViewModel.cs" />
- <Compile Include="ViewModels\MainPageViewModel.cs" />
- <Compile Include="Views\FooterDeleteStatus.xaml.cs">
- <DependentUpon>FooterDeleteStatus.xaml</DependentUpon>
- </Compile>
- <Compile Include="Views\FooterNormalStatus.xaml.cs">
- <DependentUpon>FooterNormalStatus.xaml</DependentUpon>
- </Compile>
- <Compile Include="Views\FooterPinStatus.xaml.cs">
- <DependentUpon>FooterPinStatus.xaml</DependentUpon>
- </Compile>
- <Compile Include="Views\MainPage.xaml.cs">
- <DependentUpon>MainPage.xaml</DependentUpon>
- </Compile>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Views\MainPage.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Controls\NinePatchImage.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Controls\AppListView.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Controls\AppItemCell.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Views\FooterDeleteStatus.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <EmbeddedResource Include="Views\FooterNormalStatus.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <EmbeddedResource Include="Views\FooterPinStatus.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\LibTVRefCommonPortable\LibTVRefCommonPortable.csproj">
- <Project>{67f9d3a8-f71e-4428-913f-c37ae82cdb24}</Project>
- <Name>LibTVRefCommonPortable</Name>
- </ProjectReference>
- </ItemGroup>
+
<ItemGroup>
- <PackageReference Include="Tizen.Xamarin.Forms.Extension">
- <Version>2.3.5-v00015</Version>
- </PackageReference>
- <PackageReference Include="Xamarin.Forms">
- <Version>2.4.0-r266-001</Version>
- </PackageReference>
+ <PackageReference Include="Tizen.Xamarin.Forms.Extension" Version="2.4.0-v00005" />
+ <PackageReference Include="Xamarin.Forms" Version="2.4.0.266-pre1" />
</ItemGroup>
+
<ItemGroup>
- <None Include="packages.config" />
+ <ProjectReference Include="..\..\LibCommon.Shared\LibCommon.Shared.csproj" />
</ItemGroup>
- <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
- <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
- </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.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
\ No newline at end of file
+
+</Project>
ContextPopup popup = new ContextPopup
{
IsAutoHidingEnabled = true,
- Orientation = ContextPopupOrientation.Vertical,
DirectionPriorities = new ContextPopupDirectionPriorities(ContextPopupDirection.Up, ContextPopupDirection.Right, ContextPopupDirection.Left, ContextPopupDirection.Down),
};
using LibTVRefCommonPortable.Utils;
using Xamarin.Forms;
-using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
namespace TVApps.Views
{
Opacity = 0.7,
HorizontalTextAlignment = TextAlignment.Start,
};
- AppNameLabel.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
+ //AppNameLabel.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
AfterLabel = new Xamarin.Forms.Label()
{
Opacity = 0.7,
HorizontalTextAlignment = TextAlignment.Start
};
- AfterLabel.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Light);
+ //AfterLabel.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Light);
PropertyChanged += FooterPinStatusPropertyChanged;
}
using System.Windows.Input;
using System.Collections.Generic;
using System.Linq;
-using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
using Tizen.Xamarin.Forms.Extension;
namespace TVApps.Views
BackKeyInfoImage.HeightRequest = backKeyImageSize;
BackKeyInfo.FontSize = SizeUtils.GetFontSize(28);
BackKeyInfo.Margin = new Thickness(SizeUtils.GetWidthSize(6), 0, 0, 0);
- BackKeyInfo.On<Tizen>().SetFontWeight(FontWeight.Normal);
+ //BackKeyInfo.On<Tizen>().SetFontWeight(FontWeight.Normal);
PropertyChanged += MainPagePropertyChanged;
SetCurrentStatus(AppsStatus.Default);
if (i == 1)
{
- prevButton?.On<Tizen>()?.SetNextFocusDownView(
- lowerList[i - 1].FindByName<Button>("ButtonFocusArea"));
+ //prevButton?.On<Tizen>()?.SetNextFocusDownView(
+ // lowerList[i - 1].FindByName<Button>("ButtonFocusArea"));
}
- button?.On<Tizen>()?.SetNextFocusDownView(
- lowerList[i].FindByName<Button>("ButtonFocusArea"));
+ //button?.On<Tizen>()?.SetNextFocusDownView(
+ // lowerList[i].FindByName<Button>("ButtonFocusArea"));
if (i == upperCount - 2)
{
- button?.On<Tizen>()?.SetNextFocusDownView(lowerList[i].FindByName<Button>("ButtonFocusArea"));
+ //button?.On<Tizen>()?.SetNextFocusDownView(lowerList[i].FindByName<Button>("ButtonFocusArea"));
- nextButton?.On<Tizen>()?.SetNextFocusRightView(nextButton);
- nextButton?.On<Tizen>()?.SetNextFocusDownView(
- lowerList[lowerCount - 1].FindByName<Button>("ButtonFocusArea"));
+ //nextButton?.On<Tizen>()?.SetNextFocusRightView(nextButton);
+ //nextButton?.On<Tizen>()?.SetNextFocusDownView(
+ // lowerList[lowerCount - 1].FindByName<Button>("ButtonFocusArea"));
}
}
if (i == 1)
{
- prevButton?.On<Tizen>()?.SetNextFocusUpView(
- upperList[i - 1].FindByName<Button>("ButtonFocusArea"));
+ //prevButton?.On<Tizen>()?.SetNextFocusUpView(
+ // upperList[i - 1].FindByName<Button>("ButtonFocusArea"));
}
- button?.On<Tizen>()?.SetNextFocusUpView(
- upperList[i].FindByName<Button>("ButtonFocusArea"));
+ //button?.On<Tizen>()?.SetNextFocusUpView(
+ // upperList[i].FindByName<Button>("ButtonFocusArea"));
if (i == lowerCount - 2)
{
- nextButton?.On<Tizen>()?.SetNextFocusUpView(upperList[i + 1].FindByName<Button>("ButtonFocusArea"));
+ //nextButton?.On<Tizen>()?.SetNextFocusUpView(upperList[i + 1].FindByName<Button>("ButtonFocusArea"));
if (upperCount > lowerCount)
{
- nextButton?.On<Tizen>()?.SetNextFocusRightView(upperList[upperCount - 1].FindByName<Button>("ButtonFocusArea"));
+ //nextButton?.On<Tizen>()?.SetNextFocusRightView(upperList[upperCount - 1].FindByName<Button>("ButtonFocusArea"));
}
else
{
- nextButton?.On<Tizen>()?.SetNextFocusRightView(nextButton);
+ //nextButton?.On<Tizen>()?.SetNextFocusRightView(nextButton);
}
}
}
/// <param name="right">A right App icon</param>
private void SetFocusChainingLeftAndRight(Button left, Button right)
{
- left?.On<Tizen>()?.SetNextFocusRightView(right);
- right?.On<Tizen>()?.SetNextFocusLeftView(left);
+ //left?.On<Tizen>()?.SetNextFocusRightView(right);
+ //right?.On<Tizen>()?.SetNextFocusLeftView(left);
}
/// <summary>
foreach (var item in lowerList)
{
Button button = item.FindByName<Button>("ButtonFocusArea");
- button?.On<Tizen>()?.SetNextFocusDownView(sortList);
+ //button?.On<Tizen>()?.SetNextFocusDownView(sortList);
}
}
foreach (var item in lowerList)
{
Button button = item.FindByName<Button>("ButtonFocusArea");
- button?.On<Tizen>()?.SetNextFocusDownView(cancelButton);
+ //button?.On<Tizen>()?.SetNextFocusDownView(cancelButton);
}
if (lowerList.Count > 0)
{
- cancelButton?.On<Tizen>()?.SetNextFocusUpView(lowerList[lowerList.Count - 1].FindByName<Button>("ButtonFocusArea"));
+ //cancelButton?.On<Tizen>()?.SetNextFocusUpView(lowerList[lowerList.Count - 1].FindByName<Button>("ButtonFocusArea"));
}
- cancelButton?.On<Tizen>()?.SetNextFocusLeftView(cancelButton);
+ //cancelButton?.On<Tizen>()?.SetNextFocusLeftView(cancelButton);
}
/// <summary>
foreach (var item in lowerList)
{
Button button = item.FindByName<Button>("ButtonFocusArea");
- button?.On<Tizen>()?.SetNextFocusDownView(doneButton);
+ //button?.On<Tizen>()?.SetNextFocusDownView(doneButton);
}
if (lowerList.Count > 0)
{
- doneButton?.On<Tizen>()?.SetNextFocusUpView(lowerList[lowerList.Count - 1].FindByName<Button>("ButtonFocusArea"));
+ //doneButton?.On<Tizen>()?.SetNextFocusUpView(lowerList[lowerList.Count - 1].FindByName<Button>("ButtonFocusArea"));
}
- doneButton?.On<Tizen>()?.SetNextFocusLeftView(doneButton);
+ //doneButton?.On<Tizen>()?.SetNextFocusLeftView(doneButton);
}
/// <summary>
--- /dev/null
+{
+ "runtimeTarget": {
+ "name": ".NETStandard,Version=v2.0/",
+ "signature": "cf5149bdff09bd8db6df7773b79e5a86c601ccd4"
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETStandard,Version=v2.0": {},
+ ".NETStandard,Version=v2.0/": {
+ "TVApps/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "NETStandard.Library": "2.0.0",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "TVApps.dll": {}
+ }
+ },
+ "Microsoft.NETCore.Platforms/1.1.0": {},
+ "NETStandard.Library/2.0.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0"
+ }
+ },
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "dependencies": {
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "lib/netstandard1.0/Tizen.Xamarin.Forms.Extension.dll": {}
+ }
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "runtime": {
+ "lib/netstandard1.0/Xamarin.Forms.Core.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Platform.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Xaml.dll": {}
+ }
+ },
+ "LibCommon.Shared/1.0.0": {
+ "dependencies": {
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "LibCommon.Shared.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "TVApps/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Microsoft.NETCore.Platforms/1.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
+ "path": "microsoft.netcore.platforms/1.1.0",
+ "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
+ },
+ "NETStandard.Library/2.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYmBPA==",
+ "path": "netstandard.library/2.0.0",
+ "hashPath": "netstandard.library.2.0.0.nupkg.sha512"
+ },
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-MKUamVt5XloZ/JziyOXLdbahn7T0LDQDJGUt3ynt0iSia4aLpZLOua6/iypBhnC79FgMaNfUA7APjVfjh3NLTg==",
+ "path": "tizen.xamarin.forms.extension/2.4.0-v00005",
+ "hashPath": "tizen.xamarin.forms.extension.2.4.0-v00005.nupkg.sha512"
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-pMu+b01vdH1ul5EJo1opQjEcwisWT35DdZO6EuR9HNKfY1dWyKmAlWgRdGUtjtdbhjOAtCOQUxI7F3x4hvV8KA==",
+ "path": "xamarin.forms/2.4.0.266-pre1",
+ "hashPath": "xamarin.forms.2.4.0.266-pre1.nupkg.sha512"
+ },
+ "LibCommon.Shared/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="Tizen.Xamarin.Forms.Extension" version="2.3.5-v00010" targetFramework="portable45-net45+win8+wp8+wpa81" />
- <package id="Xamarin.Forms" version="2.3.5-r233-012" targetFramework="portable45-net45+win8+wp8+wpa81" />
-</packages>
\ No newline at end of file
+++ /dev/null
-\r
-Microsoft Visual Studio Solution File, Format Version 12.00\r
-# Visual Studio 14\r
-VisualStudioVersion = 14.0.25420.1\r
-MinimumVisualStudioVersion = 10.0.40219.1\r
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVHome", "TVHome\TVHome\TVHome.csproj", "{54DD6673-7E64-48E6-A008-4D455E19E017}"\r
-EndProject\r
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibTVRefCommonPortable", "LibTVRefCommonPortable\LibTVRefCommonPortable.csproj", "{67F9D3A8-F71E-4428-913F-C37AE82CDB24}"\r
-EndProject\r
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibTVRefCommonTizen", "LibTVRefCommonTizen\LibTVRefCommonTizen.csproj", "{C558D279-897E-45E1-A10A-DECD788770F4}"\r
- ProjectSection(ProjectDependencies) = postProject\r
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24} = {67F9D3A8-F71E-4428-913F-C37AE82CDB24}\r
- EndProjectSection\r
-EndProject\r
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVHome.TizenTV", "TVHome\TVHome.TizenTV\TVHome.TizenTV.csproj", "{CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}"\r
-EndProject\r
-Global\r
- GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
- Debug|Any CPU = Debug|Any CPU\r
- Release|Any CPU = Release|Any CPU\r
- EndGlobalSection\r
- GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
- {54DD6673-7E64-48E6-A008-4D455E19E017}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
- {54DD6673-7E64-48E6-A008-4D455E19E017}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
- {54DD6673-7E64-48E6-A008-4D455E19E017}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
- {54DD6673-7E64-48E6-A008-4D455E19E017}.Release|Any CPU.Build.0 = Release|Any CPU\r
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Any CPU.Build.0 = Release|Any CPU\r
- {C558D279-897E-45E1-A10A-DECD788770F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
- {C558D279-897E-45E1-A10A-DECD788770F4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
- {C558D279-897E-45E1-A10A-DECD788770F4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
- {C558D279-897E-45E1-A10A-DECD788770F4}.Release|Any CPU.Build.0 = Release|Any CPU\r
- {CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
- {CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
- {CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
- {CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}.Release|Any CPU.Build.0 = Release|Any CPU\r
- EndGlobalSection\r
- GlobalSection(SolutionProperties) = preSolution\r
- HideSolutionNode = FALSE\r
- EndGlobalSection\r
-EndGlobal\r
--- /dev/null
+<StyleCopSettings Version="105">
+ <GlobalSettings>
+ <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
+ </GlobalSettings>
+ <Analyzers>
+ <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
+ <Rules>
+ <Rule Name="ElementsMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustHaveSummaryText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="EnumerationItemsMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationMustContainValidXml">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustHaveSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PartialElementDocumentationMustHaveSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustNotHaveDefaultSummary">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="VoidReturnValueMustNotBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParametersMustBeDocumented">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParametersMustBeDocumentedPartialClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="GenericTypeParameterDocumentationMustHaveText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertySummaryDocumentationMustMatchAccessors">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustNotBeCopiedAndPasted">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationTextMustNotBeEmpty">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationTextMustContainWhitespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationMustMeetCharacterPercentage">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationHeadersMustNotContainBlankLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncludedDocumentationXPathDoesNotExist">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncludeNodeDoesNotContainValidFileAndPath">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="InheritDocMustBeUsedWithInheritingClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationMustBeSpelledCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMustHaveHeader">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustShowCopyright">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustHaveCopyrightText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustContainFileName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderFileNameDocumentationMustMatchFileName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderMustHaveValidCompanyText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileHeaderFileNameDocumentationMustMatchTypeName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
+ <Rules>
+ <Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustBeginWithLowerCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotContainUnderscore">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementMustBeginWithLowerCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotUseHungarianNotation">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="VariableNamesMustNotBePrefixed">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldNamesMustNotBeginWithUnderscore">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticReadonlyFieldsMustBeginWithUpperCaseLetter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
+ <Rules>
+ <Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleBlankLinesInARow">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentMustBePrecededByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustBeSeparatedByBlankLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.MaintainabilityRules">
+ <Rules>
+ <Rule Name="AccessModifierMustBeDeclared">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FieldsMustBePrivate">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeAnalysisSuppressionMustHaveJustification">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DebugAssertMustProvideMessageText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DebugFailMustProvideMessageText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMayOnlyContainASingleClass">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="FileMayOnlyContainASingleNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StatementMustNotUseUnnecessaryParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ArithmeticExpressionsMustDeclarePrecedence">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConditionalExpressionsMustDeclarePrecedence">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="RemoveDelegateParenthesisWhenPossible">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="AttributeConstructorMustNotUseUnnecessaryParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="RemoveUnnecessaryCode">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
+ <Rules>
+ <Rule Name="UsingDirectivesMustBePlacedWithinNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustAppearInTheCorrectOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ElementsMustBeOrderedByAccess">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ConstantsMustAppearBeforeFields">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticElementsMustAppearBeforeInstanceElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DeclarationKeywordsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ProtectedMustComeBeforeInternal">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PropertyAccessorsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="EventAccessorsMustFollowOrder">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NoValueFirstComparison">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UsingStaticDirectivesMustBePlacedAfterUsingNamespaceDirectives">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">
+ <Rules>
+ <Rule Name="CommentsMustContainText">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PrefixLocalCallsWithThis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PrefixCallsCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningParenthesisMustBeOnDeclarationLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CommaMustBeOnSameLineAsPreviousParameter">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterListMustFollowDeclaration">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterMustFollowComma">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SplitParametersMustStartOnLineAfterDeclaration">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParametersMustBeOnSameLineOrSeparateLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ParameterMustNotSpanMultipleLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClauseMustFollowPreviousClause">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClausesMustBeOnSeparateLinesOrAllOnOneLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="QueryClausesSpanningMultipleLinesMustBeginOnOwnLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotPlaceRegionsWithinElements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainEmptyStatements">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleStatementsOnOneLine">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="BlockStatementsMustNotContainEmbeddedComments">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="BlockStatementsMustNotContainEmbeddedRegions">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseStringEmptyForEmptyStrings">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseBuiltInTypeAlias">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="UseShorthandForNullableTypes">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ <Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
+ <Rules>
+ <Rule Name="CommasMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SemicolonsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DocumentationLinesMustBeginWithSingleSpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="SingleLineCommentsMustBeginWithSingleSpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PreprocessorKeywordsMustNotBePrecededBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OperatorKeywordMustBeFollowedBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningCurlyBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingCurlyBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningGenericBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingGenericBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="OpeningAttributeBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ClosingAttributeBracketsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NullableTypeSymbolsMustNotBePrecededBySpace">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="MemberAccessSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="IncrementDecrementSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="NegativeSignsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="PositiveSignsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="ColonsMustBeSpacedCorrectly">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainMultipleWhitespaceInARow">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="TabsMustNotBeUsed">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ <Rule Name="DoNotSplitNullConditionalOperators">
+ <RuleSettings>
+ <BooleanProperty Name="Enabled">False</BooleanProperty>
+ </RuleSettings>
+ </Rule>
+ </Rules>
+ <AnalyzerSettings />
+ </Analyzer>
+ </Analyzers>
+</StyleCopSettings>
\ No newline at end of file
--- /dev/null
+using System;
+using System.IO;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using Tizen;
+
+namespace CoreApp
+{
+ /// <summary>
+ /// Handles recent screen shot of launched applications
+ /// </summary>
+ public class Sniper
+ {
+ /// <summary>
+ /// Main window of the application
+ /// </summary>
+ private IntPtr nativeWindow;
+
+ /// <summary>
+ /// A path of storage for recent screen shot of launched application
+ /// </summary>
+ private string storagePath;
+
+ /// <summary>
+ /// A width of recent screen shot
+ /// </summary>
+ private int imageWidth;
+
+ /// <summary>
+ /// A height of recent screen shot
+ /// </summary>
+ private int imageHeight;
+
+ /// <summary>
+ /// A flag indicates whether updating recent screen shot or not
+ /// </summary>
+ public bool SkipUpdateFlag;
+
+ /// <summary>
+ /// Callbacks of sniper events
+ /// </summary>
+ private static InterOp.SniperCallback callbacks;
+
+ /// <summary>
+ /// A EventHandler handles recent screen shot update event
+ /// </summary>
+ public event EventHandler<Event> UpdatedEvent;
+
+ /// <summary>
+ /// A EventHandler handles add or remove application
+ /// </summary>
+ public event EventHandler<Event> AddRemoveEvent;
+
+ /// <summary>
+ /// A EventHandler handles skip update event
+ /// </summary>
+ public event EventHandler<Event> SkipUpdateEvent;
+
+ /// <summary>
+ /// A event argument class for app screen update notification.
+ /// </summary>
+ public class Event : EventArgs
+ {
+ public string AppId;
+ public string InstanceId;
+ public string Info;
+ }
+
+ /// <summary>
+ /// A method for writing debug log
+ /// </summary>
+ /// <param name="message">A log message</param>
+ /// <param name="file">A path of caller file</param>
+ /// <param name="func">A name of caller function</param>
+ /// <param name="line">A line number of caller line</param>
+ private void WriteLog(string message, [CallerFilePath] string file = "", [CallerMemberName] string func = "", [CallerLineNumber] int line = 0)
+ {
+ Log.Debug("sniper", message);
+ }
+
+ /// <summary>
+ /// A method for handling launched application
+ /// </summary>
+ /// <param name="appId">An ID of launched application</param>
+ /// <param name="instanceId">An instance ID of launched application</param>
+ private void AddedCallback(string appId, string instanceId)
+ {
+ EventHandler<Event> handler = AddRemoveEvent;
+ Event eventInfo;
+
+ WriteLog("Added " + appId + " " + instanceId);
+
+ if (handler == null)
+ {
+ return;
+ }
+
+ try
+ {
+ eventInfo = new Event();
+ }
+ catch (Exception e)
+ {
+ WriteLog("Updated Exception : " + e.Message);
+ return;
+ }
+
+ eventInfo.AppId = appId;
+ eventInfo.InstanceId = instanceId;
+ eventInfo.Info = "Added";
+
+ handler(this, eventInfo);
+ }
+
+ /// <summary>
+ /// A method for handling terminated application
+ /// </summary>
+ /// <param name="appId">An ID of terminated application</param>
+ /// <param name="instanceId">An instance ID of terminated application</param>
+ private void RemovedCallback(string appId, string instanceId)
+ {
+ EventHandler<Event> handler = AddRemoveEvent;
+ Event eventInfo;
+
+ WriteLog("Removed " + appId + " " + instanceId);
+
+ if (handler == null)
+ {
+ return;
+ }
+
+ try
+ {
+ eventInfo = new Event();
+ }
+ catch (Exception e)
+ {
+ WriteLog("Updated Exception : " + e.Message);
+ return;
+ }
+
+ eventInfo.AppId = appId;
+ eventInfo.InstanceId = instanceId;
+ eventInfo.Info = "Removed";
+
+ handler(this, eventInfo);
+ }
+
+ /// <summary>
+ /// A method for handling application screen is updated
+ /// </summary>
+ /// <param name="appId">An ID of application that screen is updated</param>
+ /// <param name="instanceId">An instance ID of application that screen is updated</param>
+ /// <param name="Filename">A path of application screen shot</param>
+ private void UpdatedCallback(string appId, string instanceId, string Filename)
+ {
+ EventHandler<Event> handler = UpdatedEvent;
+ Event eventInfo;
+
+ WriteLog("Updated " + appId + " " + instanceId + " " + Filename);
+
+ if (handler == null)
+ {
+ return;
+ }
+
+ try
+ {
+ eventInfo = new Event();
+ }
+ catch (Exception e)
+ {
+ WriteLog("Updated Exception : " + e.Message);
+ return;
+ }
+
+ eventInfo.Info = Filename;
+ eventInfo.AppId = appId;
+ eventInfo.InstanceId = instanceId;
+
+ handler(this, eventInfo);
+ }
+
+ /// <summary>
+ /// A method for handling screen update is skipped
+ /// </summary>
+ /// <param name="appId">An ID of application that screen update is skipped</param>
+ /// <param name="instanceId">An instance ID of application that screen update is skipped</param>
+ /// <param name="Filename">A path of application screen shot</param>
+ /// <returns>Returns finish code</returns>
+ private int SkipUpdateCallback(string appId, string instanceId, string Filename)
+ {
+ EventHandler<Event> handler = SkipUpdateEvent;
+ Event eventInfo;
+
+ WriteLog("SkipUpdate" + appId + " " + instanceId + " " + Filename);
+
+ if (handler == null)
+ {
+ return 0;
+ }
+
+ try
+ {
+ eventInfo = new Event();
+ }
+ catch (Exception e)
+ {
+ WriteLog("SkipUpdated Exception : " + e.Message);
+ return 0;
+ }
+
+ eventInfo.Info = Filename;
+ eventInfo.AppId = appId;
+ eventInfo.InstanceId = instanceId;
+
+ handler(this, eventInfo);
+
+ if (SkipUpdateFlag)
+ {
+ WriteLog("Update is skipped : " + Filename);
+ SkipUpdateFlag = false;
+ return 1;
+ }
+
+ return 0;
+ }
+
+ /// <summary>
+ /// Constructor
+ /// </summary>
+ /// <param name="window">Main window of this application</param>
+ /// <param name="path">Storage path</param>
+ /// <param name="width">Screen shot width</param>
+ /// <param name="height">Screen shot height</param>
+ public Sniper(IntPtr window, string path, int width, int height)
+ {
+ nativeWindow = window;
+ storagePath = path;
+ imageWidth = width;
+ imageHeight = height;
+ SkipUpdateFlag = false;
+ }
+
+ /// <summary>
+ /// A method for starting monitoring
+ /// Adds callbacks and initialize Sniper class
+ /// </summary>
+ public void StartMonitor()
+ {
+ try
+ {
+ callbacks = new InterOp.SniperCallback();
+ callbacks.Added = new InterOp.CallbackAddedRemoved(AddedCallback);
+ callbacks.Removed = new InterOp.CallbackAddedRemoved(RemovedCallback);
+ callbacks.Updated = new InterOp.CallbackUpdated(UpdatedCallback);
+ callbacks.SkipUpdate = new InterOp.CallbackSkipUpdate(SkipUpdateCallback);
+ }
+ catch (Exception e)
+ {
+ throw new SniperException(e.Message);
+ }
+
+ try
+ {
+ InterOp.sniper_init(nativeWindow, callbacks, storagePath, imageWidth, imageHeight);
+ }
+ catch (DllNotFoundException e)
+ {
+ WriteLog("Loadable library is not found " + e.StackTrace);
+ }
+
+ WriteLog("Sniper starts monitoring : " + storagePath + "ImageSize : " + imageWidth + "x" + imageHeight);
+ }
+
+ /// <summary>
+ /// A method stops monitoring
+ /// </summary>
+ public void StopMonitor()
+ {
+ try
+ {
+ InterOp.sniper_fini();
+ }
+ catch (DllNotFoundException e)
+ {
+ WriteLog("Loadable library is not found " + e.StackTrace);
+ }
+
+ WriteLog("Sniper stops monitoring : " + storagePath + "ImageSize : " + imageWidth + "x" + imageHeight);
+ }
+
+ /// <summary>
+ /// A method requests updating application screen shot
+ /// </summary>
+ /// <param name="instanceId">An instance ID of application</param>
+ public void RequestUpdate(string instanceId)
+ {
+ try
+ {
+ InterOp.sniper_request_update(instanceId);
+ }
+ catch (DllNotFoundException e)
+ {
+ WriteLog("Loadable library is not found " + e.StackTrace);
+ }
+
+ WriteLog("Sniper requests update (" + instanceId + ") : " + storagePath + "ImageSize : " + imageWidth + "x" + imageHeight);
+ }
+ }
+}
+
+/* End of a file */
--- /dev/null
+using System;
+
+namespace CoreApp
+{
+ public class SniperException : Exception
+ {
+ public SniperException()
+ {
+ }
+
+ public SniperException(string message)
+ : base(message)
+ {
+ }
+
+ public SniperException(string message, Exception inner)
+ : base(message, inner)
+ {
+ }
+ }
+}
+
+/* End of a file */
--- /dev/null
+using System;
+using System.Runtime.InteropServices;
+
+namespace CoreApp
+{
+ /// <summary>
+ /// Sniper InterOp class for getting application's screen-shot.
+ /// </summary>
+ internal static partial class InterOp
+ {
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate void CallbackAddedRemoved(string appId, string instanceId);
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate void CallbackUpdated(string appId, string instanceId, string filename);
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int CallbackSkipUpdate(string appid, string instanceId, string filename);
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct SniperCallback
+ {
+ public CallbackAddedRemoved Added;
+ public CallbackAddedRemoved Removed;
+ public CallbackUpdated Updated;
+ public CallbackSkipUpdate SkipUpdate;
+ }
+
+ [DllImport("sniper", CharSet = CharSet.Ansi)]
+ internal static extern int sniper_init(IntPtr win, SniperCallback callbacks, string path, int w, int h);
+
+ [DllImport("sniper", CharSet = CharSet.Ansi)]
+ internal static extern int sniper_request_update(string instanceId);
+
+ [DllImport("sniper", CharSet = CharSet.Ansi)]
+ internal static extern int sniper_fini();
+ }
+}
+
+/* End of a file */
--- /dev/null
+<Project>
+ <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
+
+ <!-- Setting Tizen Extension Path -->
+ <PropertyGroup Label="Globals">
+ <TizenProjectExtensionsPath>$(MSBuildExtensionsPath)\Tizen\VisualStudio\</TizenProjectExtensionsPath>
+ </PropertyGroup>
+
+ <!-- Import Tizen property in Tizen.NET SDK -->
+ <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" />
+
+ <!-- Property Group for .NET Core Project -->
+ <PropertyGroup>
+ <OutputType>Exe</OutputType>
+ <TargetFramework>netcoreapp2.0</TargetFramework>
+ </PropertyGroup>
+
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugType>portable</DebugType>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>None</DebugType>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <Folder Include="lib\" />
+ </ItemGroup>
+
+
+ <!-- If solution already has PCL project, will reference -->
+
+
+ <!-- Include Nuget Package for Tizen Project building -->
+ <ItemGroup>
+ <PackageReference Include="Tizen.NET" Version="4.0.0-preview1-00143" />
+ <PackageReference Include="Tizen.NET.Sdk" Version="0.9.18-pre1" />
+ <PackageReference Include="Tizen.Xamarin.Forms.Extension" Version="2.4.0-v00005" />
+ <PackageReference Include="Xamarin.Forms" Version="2.4.0.266-pre1" />
+ <PackageReference Include="Xamarin.Forms.Platform.Tizen" Version="2.4.0-r266-006" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\LibCommon.Shared\LibCommon.Shared.csproj" />
+ <ProjectReference Include="..\..\LibCommon.Tizen\LibCommon.Tizen.csproj" />
+ <ProjectReference Include="..\..\TVApps\TVApps.Tizen.TV\TVApps.Tizen.TV.csproj" />
+ <ProjectReference Include="..\..\TVApps\TVApps\TVApps.csproj" />
+ <ProjectReference Include="..\TVHome\TVHome.csproj" />
+ </ItemGroup>
+
+ <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
+ <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" />
+
+ <!-- Install Check 'Visual Studio for Tizen' for developing on Visual Studio -->
+ <Target Name="TizenVsixInstallCheck" BeforeTargets="CompileDesignTime">
+ <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props is not exist.
 you need to check if 'Visual Studio for Tizen' is installed" />
+ <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets is not exist.\
 you need to check if 'Visual Studio for Tizen' is installed" />
+ </Target>
+</Project>
--- /dev/null
+/*
+ * 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 Tizen.Applications;
+using LibTVRefCommonPortable.Utils;
+using LibTVRefCommonTizen.Ports;
+using Tizen.Xamarin.Forms.Extension.Renderer;
+using CoreApp;
+using System;
+
+namespace TVHome.TizenTV
+{
+ /// <summary>
+ /// TV Home application main entry point
+ /// </summary>
+ class Program : global::Xamarin.Forms.Platform.Tizen.FormsApplication
+ {
+ /// <summary>
+ /// An interface for the platform notification
+ /// </summary>
+ IPlatformNotification notification;
+ /// <summary>
+ /// A port for handling Window APIs
+ /// </summary>
+ WindowPort windowPort;
+
+ /// <summary>
+ /// A method will be called when application is created
+ /// </summary>
+ protected override void OnCreate()
+ {
+ base.OnCreate();
+
+ FileSystemPort.AppDataStroagePath = DirectoryInfo.Data;
+ FileSystemPort.AppResourceStoragePath = DirectoryInfo.Resource;
+ string platformShareStoragePath = "/opt/usr/home/owner/share/";
+ FileSystemPort.PlatformShareStroagePath = platformShareStoragePath;
+
+ var app = new App(MainWindow.ScreenSize.Width,
+ MainWindow.ScreenSize.Height,
+ MainWindow.ScreenDpi.X,
+ ElmSharp.Elementary.GetScale());
+
+ notification = app;
+
+ DbgPort.D("-----------------------------------");
+ DbgPort.D("Home application is being loaded...");
+ DbgPort.D("-----------------------------------");
+ LoadApplication(app);
+
+ PackageManagerPort.RegisterCallbacks(notification);
+
+ MainWindow.KeyUp += KeyUpListener;
+ MainWindow.Alpha = true;
+
+ windowPort = new WindowPort();
+ windowPort.MainWindow = MainWindow;
+
+ /// Grab key events
+ MainWindow.KeyGrab(ElmSharp.EvasKeyEventArgs.PlatformHomeButtonName, true);
+ MainWindow.KeyGrab(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName, true);
+ MainWindow.KeyGrab("XF86Info", true);
+ MainWindow.KeyGrab("Up", false);
+ MainWindow.KeyGrab("Down", false);
+ MainWindow.KeyGrab("Left", false);
+ MainWindow.KeyGrab("Right", false);
+ windowPort.SetKeyGrabExclusively(ElmSharp.EvasKeyEventArgs.PlatformHomeButtonName);
+
+ /// Sniper
+ try
+ {
+ Sniper sniper = new Sniper((IntPtr)MainWindow, platformShareStoragePath, 960, 540);
+ sniper.UpdatedEvent += OnScreenUpdate;
+ sniper.AddRemoveEvent += SniperAddRemoveEvent;
+ sniper.SkipUpdateEvent += SniperSkipUpdateEvent;
+ sniper.StartMonitor();
+ }
+ catch (SniperException e)
+ {
+ DbgPort.E("Failed to create sniper object : " + e.Message);
+ }
+ }
+
+ private void SniperSkipUpdateEvent(object sender, Sniper.Event e)
+ {
+ DbgPort.D(" [Sniper SkipUpdateEvent] : " + e.Info);
+ (sender as Sniper).SkipUpdateFlag = true;
+ }
+
+ private void SniperAddRemoveEvent(object sender, Sniper.Event e)
+ {
+ DbgPort.D(" [Sniper SniperAddRemoveEvent] : " + e.Info);
+ }
+
+ private void OnScreenUpdate(object sender, Sniper.Event e)
+ {
+ DbgPort.D(" [Sniper OnScreenUpdate] : " + e.Info);
+ }
+
+ /// <summary>
+ /// A method will be called when application receives KeyUp event
+ /// </summary>
+ /// <param name="sender">The source of the event</param>
+ /// <param name="e">A EvasKey event's argument</param>
+ private void KeyUpListener(object sender, ElmSharp.EvasKeyEventArgs e)
+ {
+ DbgPort.D("Key Pressed :" + e.KeyName);
+ if (e.KeyName.CompareTo(ElmSharp.EvasKeyEventArgs.PlatformHomeButtonName) == 0)
+ {
+ notification?.OnHomeKeyPressed();
+ }
+ else if (e.KeyName.CompareTo(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName) == 0 ||
+ e.KeyName.CompareTo("XF86Info") == 0)
+ {
+ notification?.OnMenuKeyPressed();
+ }
+ else if (e.KeyName.Equals("Up") || e.KeyName.Equals("Down") || e.KeyName.Equals("Left") || e.KeyName.Equals("Right"))
+ {
+ notification?.OnNavigationKeyPressed(e.KeyName);
+ }
+ }
+
+ /// <summary>
+ /// A method will be called when application is terminated
+ /// </summary>
+ protected override void OnTerminate()
+ {
+ base.OnTerminate();
+
+ notification = null;
+ PackageManagerPort.UnregisterCallbacks();
+ MainWindow.KeyUngrab(ElmSharp.EvasKeyEventArgs.PlatformHomeButtonName);
+ MainWindow.KeyUngrab(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName);
+ MainWindow.KeyUngrab("XF86Info");
+ MainWindow.KeyUngrab("Up");
+ MainWindow.KeyUngrab("Down");
+ MainWindow.KeyUngrab("Left");
+ MainWindow.KeyUngrab("Right");
+ }
+
+ /// <summary>
+ /// A method will be called when application receives app control
+ /// </summary>
+ /// <param name="e">AppControl event argument</param>
+ protected override void OnAppControlReceived(AppControlReceivedEventArgs e)
+ {
+ if (AppControlPort.AppAddedNotifyOperation.CompareTo(e.ReceivedAppControl.Operation) == 0)
+ {
+ DbgPort.D("App Added Notification");
+ string pinnedApp;
+ if (e.ReceivedAppControl.ExtraData.TryGet(AppControlPort.KeyAddedAppID, out pinnedApp))
+ {
+ notification?.OnAppPinnedNotificationReceived(pinnedApp);
+ }
+ else
+ {
+ notification?.OnAppPinnedNotificationReceived("");
+ }
+ }
+ }
+
+ /// <summary>
+ /// The entry point for the application
+ /// </summary>
+ /// <param name="args">A list of command line arguments</param>
+ static void Main(string[] args)
+ {
+ var app = new Program();
+
+ DbgPort.Prefix = "Home";
+
+ global::Xamarin.Forms.DependencyService.Register<DbgPort>();
+ global::Xamarin.Forms.DependencyService.Register<AppControlPort>();
+ global::Xamarin.Forms.DependencyService.Register<PackageManagerPort>();
+ global::Xamarin.Forms.DependencyService.Register<FileSystemWatcherPort>();
+ global::Xamarin.Forms.DependencyService.Register<ApplicationManagerPort>();
+ global::Xamarin.Forms.DependencyService.Register<FileSystemPort>();
+ global::Xamarin.Forms.DependencyService.Register<WindowPort>();
+ global::Xamarin.Forms.DependencyService.Register<SystemSettingsPort>();
+ global::Xamarin.Forms.DependencyService.Register<MediaContentPort>();
+ TizenFormsExtension.Init();
+ global::Xamarin.Forms.Platform.Tizen.Forms.Init(app);
+ app.Run(args);
+ }
+ }
+}
--- /dev/null
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v2.0",
+ "signature": "7b37460e941a73f9576f52a534d76051a2c28b59"
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v2.0": {
+ "TVHome.Tizen.TV/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "LibCommon.Tizen": "1.0.0",
+ "TVApps": "1.0.0",
+ "TVApps.Tizen.TV": "1.0.0",
+ "TVHome": "1.0.0",
+ "Tizen.NET": "4.0.0-preview1-00143",
+ "Tizen.NET.Sdk": "0.9.18-pre1",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1",
+ "Xamarin.Forms.Platform.Tizen": "2.4.0-r266-006"
+ },
+ "runtime": {
+ "TVHome.Tizen.TV.dll": {}
+ }
+ },
+ "Tizen.NET/4.0.0-preview1-00143": {
+ "runtime": {
+ "lib/netstandard1.6/ElmSharp.Wearable.dll": {},
+ "lib/netstandard1.6/ElmSharp.dll": {},
+ "lib/netstandard1.6/Tizen.Account.AccountManager.dll": {},
+ "lib/netstandard1.6/Tizen.Account.FidoClient.dll": {},
+ "lib/netstandard1.6/Tizen.Account.OAuth2.dll": {},
+ "lib/netstandard1.6/Tizen.Account.SyncManager.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Alarm.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.AttachPanel.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Badge.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Common.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.DataControl.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.MessagePort.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Notification.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.NotificationEventListener.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.PackageManager.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Preference.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.RemoteView.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.Service.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.ToastMessage.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.UI.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.WatchApplication.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.WidgetApplication.dll": {},
+ "lib/netstandard1.6/Tizen.Applications.WidgetControl.dll": {},
+ "lib/netstandard1.6/Tizen.Content.Download.dll": {},
+ "lib/netstandard1.6/Tizen.Content.MediaContent.dll": {},
+ "lib/netstandard1.6/Tizen.Content.MimeType.dll": {},
+ "lib/netstandard1.6/Tizen.Context.dll": {},
+ "lib/netstandard1.6/Tizen.Location.Geofence.dll": {},
+ "lib/netstandard1.6/Tizen.Location.dll": {},
+ "lib/netstandard1.6/Tizen.Log.dll": {},
+ "lib/netstandard1.6/Tizen.Maps.dll": {},
+ "lib/netstandard1.6/Tizen.Messaging.Push.dll": {},
+ "lib/netstandard1.6/Tizen.Messaging.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.AudioIO.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Camera.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.MediaCodec.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.MediaPlayer.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Metadata.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Radio.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Recorder.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Remoting.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.StreamRecorder.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Util.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.Vision.dll": {},
+ "lib/netstandard1.6/Tizen.Multimedia.dll": {},
+ "lib/netstandard1.6/Tizen.NUI.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Bluetooth.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Connection.dll": {},
+ "lib/netstandard1.6/Tizen.Network.IoTConnectivity.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Nfc.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Nsd.dll": {},
+ "lib/netstandard1.6/Tizen.Network.Smartcard.dll": {},
+ "lib/netstandard1.6/Tizen.Network.WiFi.dll": {},
+ "lib/netstandard1.6/Tizen.Network.WiFiDirect.dll": {},
+ "lib/netstandard1.6/Tizen.PhonenumberUtils.dll": {},
+ "lib/netstandard1.6/Tizen.Pims.Calendar.dll": {},
+ "lib/netstandard1.6/Tizen.Pims.Contacts.dll": {},
+ "lib/netstandard1.6/Tizen.Security.SecureRepository.dll": {},
+ "lib/netstandard1.6/Tizen.Security.TEEC.dll": {},
+ "lib/netstandard1.6/Tizen.Security.dll": {},
+ "lib/netstandard1.6/Tizen.Sensor.dll": {},
+ "lib/netstandard1.6/Tizen.System.Feedback.dll": {},
+ "lib/netstandard1.6/Tizen.System.Information.dll": {},
+ "lib/netstandard1.6/Tizen.System.MediaKey.dll": {},
+ "lib/netstandard1.6/Tizen.System.PlatformConfig.dll": {},
+ "lib/netstandard1.6/Tizen.System.Storage.dll": {},
+ "lib/netstandard1.6/Tizen.System.SystemSettings.dll": {},
+ "lib/netstandard1.6/Tizen.System.dll": {},
+ "lib/netstandard1.6/Tizen.Telephony.dll": {},
+ "lib/netstandard1.6/Tizen.Tracer.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.InputMethod.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.InputMethodManager.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.Stt.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.Tts.dll": {},
+ "lib/netstandard1.6/Tizen.Uix.VoiceControl.dll": {},
+ "lib/netstandard1.6/Tizen.WebView.dll": {},
+ "lib/netstandard1.6/Tizen.dll": {}
+ }
+ },
+ "Tizen.NET.Sdk/0.9.18-pre1": {},
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "dependencies": {
+ "Xamarin.Forms": "2.4.0.266-pre1",
+ "Xamarin.Forms.Platform.Tizen": "2.4.0-r266-006"
+ },
+ "runtime": {
+ "lib/netcoreapp2.0/Tizen.Xamarin.Forms.Extension.Renderer.dll": {},
+ "lib/netcoreapp2.0/Tizen.Xamarin.Forms.Extension.dll": {}
+ }
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "runtime": {
+ "lib/netstandard1.0/Xamarin.Forms.Core.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Platform.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Xaml.dll": {}
+ }
+ },
+ "Xamarin.Forms.Platform.Tizen/2.4.0-r266-006": {
+ "dependencies": {
+ "Tizen.NET": "4.0.0-preview1-00143",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "lib/netstandard1.6/Xamarin.Forms.Platform.Tizen.dll": {}
+ }
+ },
+ "LibCommon.Shared/1.0.0": {
+ "dependencies": {
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "LibCommon.Shared.dll": {}
+ }
+ },
+ "LibCommon.Tizen/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "Tizen.NET": "4.0.0-preview1-00143",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1",
+ "Xamarin.Forms.Platform.Tizen": "2.4.0-r266-006"
+ },
+ "runtime": {
+ "LibCommon.Tizen.dll": {}
+ }
+ },
+ "TVApps/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "TVApps.dll": {}
+ }
+ },
+ "TVApps.Tizen.TV/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "LibCommon.Tizen": "1.0.0",
+ "TVApps": "1.0.0",
+ "Tizen.NET": "4.0.0-preview1-00143",
+ "Tizen.NET.Sdk": "0.9.18-pre1",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1",
+ "Xamarin.Forms.Platform.Tizen": "2.4.0-r266-006"
+ },
+ "runtime": {
+ "TVApps.Tizen.TV.dll": {}
+ }
+ },
+ "TVHome/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "TVHome.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "TVHome.Tizen.TV/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Tizen.NET/4.0.0-preview1-00143": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-woW6D9FsWZD2lJRwbND2hzMIi9l7QYwUqfpCxrMT3+Mh3+8UdFM86skDdw3mAgpLIqfC1plUfbISksQ9G2Gcgg==",
+ "path": "tizen.net/4.0.0-preview1-00143",
+ "hashPath": "tizen.net.4.0.0-preview1-00143.nupkg.sha512"
+ },
+ "Tizen.NET.Sdk/0.9.18-pre1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-lUsZ48M9YxKKwpYpE6zbd2/uw7GeJJZmKYABHW6Xdcfarxf17ncGRBLl7Gnt2rAc5ev8UkNKYfZoQQh+kQO2Hw==",
+ "path": "tizen.net.sdk/0.9.18-pre1",
+ "hashPath": "tizen.net.sdk.0.9.18-pre1.nupkg.sha512"
+ },
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-MKUamVt5XloZ/JziyOXLdbahn7T0LDQDJGUt3ynt0iSia4aLpZLOua6/iypBhnC79FgMaNfUA7APjVfjh3NLTg==",
+ "path": "tizen.xamarin.forms.extension/2.4.0-v00005",
+ "hashPath": "tizen.xamarin.forms.extension.2.4.0-v00005.nupkg.sha512"
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-pMu+b01vdH1ul5EJo1opQjEcwisWT35DdZO6EuR9HNKfY1dWyKmAlWgRdGUtjtdbhjOAtCOQUxI7F3x4hvV8KA==",
+ "path": "xamarin.forms/2.4.0.266-pre1",
+ "hashPath": "xamarin.forms.2.4.0.266-pre1.nupkg.sha512"
+ },
+ "Xamarin.Forms.Platform.Tizen/2.4.0-r266-006": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-xDEcJnKerroXtMLLUVssB9+f2mZMB5ngulNB09OsIp0gRqP7GnpqJEyWQsISFRCk272lNVd57UhXGCUFl9/aRg==",
+ "path": "xamarin.forms.platform.tizen/2.4.0-r266-006",
+ "hashPath": "xamarin.forms.platform.tizen.2.4.0-r266-006.nupkg.sha512"
+ },
+ "LibCommon.Shared/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "LibCommon.Tizen/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "TVApps/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "TVApps.Tizen.TV/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "TVHome/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "runtimeOptions": {
+ "additionalProbingPaths": [
+ "C:\\Users\\samsung\\.dotnet\\store\\|arch|\\|tfm|",
+ "C:\\Users\\samsung\\.nuget\\packages",
+ "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
+ ]
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "runtimeOptions": {
+ "tfm": "netcoreapp2.0",
+ "framework": {
+ "name": "Microsoft.NETCore.App",
+ "version": "2.0.0"
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+<Signature Id="AuthorSignature" xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <SignedInfo>
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+ <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
+ <Reference URI="tizen-manifest.xml">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>yiowRT7BBe9PMd5KOUgJnrI8+ctp4sFJxRop8zwZ3Vg=</DigestValue>
+ </Reference>
+ <Reference URI="shared%2Fres%2FTVHome.Tizen.TV.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>/gTbhhRqVKFAMykTkZyDaEozK7OBNMSXGtsJpmRcLuE=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fscreenshot.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>rBnUv9kQBnmkHu6V7orYmoteD5eXfJfNtSk4fiES51Y=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_home_list_dimmed_recent.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>abSVmAktD3kMD8cgkHyq7+HznufbfOkkWpLoi3seSXA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_home_list_bg_white_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>BHtl9KTXq3w+B5ABJO86u7SYoNKl0CG/h1qt2NJQHFA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_home_list_bg_white_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ujRWeZIhIcElCoJVIw66t3hfb6sb8VK63a+jtck5EUw=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_home_list_bg_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>RttyFJoNtupluYvHReoAEiDuwNJJNeeBLw19wrGs/xE=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_home_list_bg_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>hI640xq4Vqw3XeO6SinvdjSIOzaPzORFCUXbaEgResI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_apps_list_dimmed_check.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Ixtj64ex0/WsZi2VSM/3Qx6GSWCQAjNNkCYoshGmzOI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_apps_list_dimmed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>zo8V0MvRxWOPNOKHe9YiYwQQS4qKVDd4nDYXRZds0lI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_home_recent_dimmed_option_75.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>DTpuLrVOInHOOCpLV8Ha1XJiZOGvYqu6MxPxhaEiq4w=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_home_menu_focused_bg.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ZCsfmvO2E/db1sCfLZczGb7wtCMYoixWrfonq9V8W1Q=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_home_list_dimmed_recent_60.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ZzXtd/0Z6EEbeYql7uzznGYLHa1O+vHoBHdS8eC+y2g=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_home_list_dimmed_apps_75.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>2MOhaSuSq7UMYrtFqZgrECcUoOoDg1/v6tZGkcSTP9k=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_home_list_dimmed_apps_60.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>urw6a9ANCmt/dzHoUG1wjSP1dQa/JxcqJimgWQFcKFA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_no_contents.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>wyV5bZt23Oukmg26jcjhBq4e3ZaoyvAEmvmf4N/H9+8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_list_stroke.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>KlC657FZBYGsby56T9TFTVgWUTtm8D7cZwaFkHmuIV0=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_list_dimmed_check.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Ixtj64ex0/WsZi2VSM/3Qx6GSWCQAjNNkCYoshGmzOI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_list_dimmed_95.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>uADDZTovkkBmW29pZm787/g+oBxOWBqpRO2dnYf/ahM=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_list_dimmed_85.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iLfG/n8nzjk0YtoNBrqqDot05l+qDLEVkUfqttNXLcs=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_list_dimmed_75.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Ixtj64ex0/WsZi2VSM/3Qx6GSWCQAjNNkCYoshGmzOI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_option_menu_list_box_check_selected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>oenTDUDtiAEQVBYxbv0xZtU+t5Jq5Z/p6ogv6lQJ79o=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_option_menu_list_box_check_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>u8LBn4QklWpX06MXRDp/0IE/q0lab2FDtIT0TpSVKo8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_option_menu_list_box_check_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>U/02Xv2++HNVYP9BeXqCTd43gxO3eDQ+S2d4lYOvPU8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_option_box_more_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>TiWYMtep4pcheKi8z95wGpSRcN/wjXuRba6vY9eO4gc=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_option_box_more_dimmed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>p5CdWOViau3ehePfQFCrQu7iZPp6QOpXALeH3QhhD5w=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_menu_apps_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>EtZD1Q3rhAzg5/lOi0t3NP1paAk7psxUZXXQesttkRI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_menu_apps_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>4qmHCWwhYsX6Sp+5n1I0ojsto45cn3g+ERr5PNYRsEU=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_menu_addpin_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ysMQWqhHVgFE68EDOTffZmX4x4JrjWm2F7k/1v0q9UY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_menu_addpin_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>xZcjt6+cHOk4r2fjWQgY4PbSAlh9PL+MYjkV7tFMPEk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_mediahub_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Qa+jLmnpzRRkKUkfmZwHRuO6ubj00IgTuMVCbf54xtQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_mediahub_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Qa+jLmnpzRRkKUkfmZwHRuO6ubj00IgTuMVCbf54xtQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_allapps_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>jue0IfvgSHvuVbcy3urOkFi6dueU86ynfsUrImCT1Ko=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_allapps_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>m/NU/yQl1g0Vr24xwU7kT2ocrtzXJKteNtRVMOrcuzk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_addpin_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>gsvs4qLA9qYnUaS3ub73z7Ow0zIIP6B8fDDbt5fpeG0=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_addpin_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>DNurC/ezAgPbsiCDPAogMWXKjlZdzPWyrWeSVmYn/ME=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_list_thumbnail_shadow_focused.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>zVDoB9YI+wsx0LiF2roSN2lmtYQgs3BTm5QvUhMX/Rw=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_list_thumbnail_gradient_normal.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>dM5tJw1dRRkH4qRjWySYUY/n7oqbQTxqxnqcWW4rTM0=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_list_thumbnail_gradient_focused.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>NzcImMy9eCGiB8txpMcGm3i5SRNjfSS363Zt4+dAPUY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_launcher_mediahub_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Qa+jLmnpzRRkKUkfmZwHRuO6ubj00IgTuMVCbf54xtQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_launcher_mediahub_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Qa+jLmnpzRRkKUkfmZwHRuO6ubj00IgTuMVCbf54xtQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_tint_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>LHkP9bSmyMZxhF7/N2BlgBHzzxhyzGey6YisfeaNqAo=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_tint_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iu3Z8bQsAqGGhQumVUD/Z5ekIObmzv+Hvpe8fe2cuqc=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_contrast_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>w68yOeITQVLQatvCZI62776hf50CEwO15w0sIgxcAEo=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_contrast_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>3TzeCHSXJsn/5jAuaW0XbBRP2/8WPohPHXHhct8w8I0=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_color_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>IalaRXmRr6SmVFUrJc5yvKhyJqOUsQXIOI80KzeFnrk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_color_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>DDj3G+TOrKWpW83NhLtO090KZx6agkVOKiPFqdTDlX0=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_brightness_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>p3a3uuxR/W4Rbi7PnqSbJCPtwu2og1/RxxOZLgxBKD4=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_brightness_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>pSM2IFVLLRoae4fXE2MFoAEZ60eOkUcVK6TUgYtyKkc=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_all_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>P8tFgQHn4UUit2HgVvAxxfbmyIQJmVbCcn6VEhDQ3+U=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_all_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>h90O5s72TWwK5+fMwTSFdS7n3d3xiPWnh3XbSu9FXZg=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_settings_unselected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>qv91ECpbw5zePEsTj/3+DQo4AjUlMvomZLO6LIGT3Kg=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_settings_selected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>laMaxDSoa3/vBRg8pTTLIR7G8RutxTVjflUpMh3PEnc=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_settings_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>0u4Q/RBQqTad+TlPVDRxIZh5PVFgmdbq/a+RgiUZZNQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_settings_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>YqMEOEXBipNpFdozt+arIUtVklGct1rrcRRY2a8/lLw=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_recent_unselected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>UbErFgk/s2nniMipQzfOq6sTm+9O77+nI0a9MnLKQZk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_recent_selected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>dr1O6uUavxDuU5f6EyPYqcQ7vIiXipEFQiNIZgMOHoE=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_recent_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ynzujpdT3OJ9aqCHPhHBt5y2aSgf/hta2tJpKIPwrvM=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_recent_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>/AJesEfZSEA1TAZwFv16KIrV1C/VnLkqLu25gTkLcho=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_unselected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>qm5PrwOIcF8PVkdnfqzRZ/GToRpHS+e9H860MMCd3YY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_selected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>C54ugONimzU/RPEUK1SSYmnnxtNpW77h9lPXvtjth7k=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>pqniyO9OrzSgN/czTbFI5eWTEiKaaPvKrMY2DWVrpkY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>4uFNuZc5bEw49qv2zNV+FnDXecySa9D2kGZcUWausS8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>EtZD1Q3rhAzg5/lOi0t3NP1paAk7psxUZXXQesttkRI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>4qmHCWwhYsX6Sp+5n1I0ojsto45cn3g+ERr5PNYRsEU=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_addpin_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ysMQWqhHVgFE68EDOTffZmX4x4JrjWm2F7k/1v0q9UY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_addpin_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>xZcjt6+cHOk4r2fjWQgY4PbSAlh9PL+MYjkV7tFMPEk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_launcher_mediahub_42.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ibFQnq6mQdHlt1McHlqbV2LZa2SIap4ml0FBGxS1VOQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_launcher_mediahub_168.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>wY7l6OKmJYotIpKnPhlh0hR4YDSEtpW2HZtcoi+ERs8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_launcher_mediahub_136.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>saIbF5ChgWv4mmprVfJSvHB4PPMch6eF/wDV09tmmVI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_pinmark.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ZahUF4DidpBuGLkIAcr0MF3VVcGQGC9JjSZztyH5aQA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_launcher_pinmark.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>EJlF00KH8rz4TpqqJK8zEUirikzig9Og98UBDNwp+jw=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_launcher_mediahub_196.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Qa+jLmnpzRRkKUkfmZwHRuO6ubj00IgTuMVCbf54xtQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_launcher_mediahub_164.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>gX3ogKZsX26mpk+kDEAYP+Zp6S3QSrx+13BnFxCc5FM=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_additional_back.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>CyVbmPv2pqcChT+Wu+ogtWAe6bJSh85sqXf6m5x4mDs=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_08.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>NLOZX7wXlktktN4Vef4pa9gubOGJhb9HrRkQS3mudaE=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_07.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>9P4ZzrZv0NlNaB+3No+aGsDBs/jG9NJegHpEGLHNllg=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_06.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>kKyxysfX/d+oZ7U1WHH5dFwGJHSK4wXtq8LOVgHLa2U=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_05.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>BZNk/tRKl/S8oSQZH4L0cwyUtNUL61gX3v8w6zunRgo=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_04.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>/mBm1k4Z9xmw87/3iuDQUbi/6TqvIUjuy22lrXLqYpc=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_03.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Q4OWq9SFfY4Kc6F9aO2L1EnAgNiBHcCKdFV+MfhG8CA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_02.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>SnFNaOuBFWqqvBEwZfZxfNRtXOyAk1qwNaS1RynVD7k=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_01.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>SnFNaOuBFWqqvBEwZfZxfNRtXOyAk1qwNaS1RynVD7k=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_option_menu_nocontent_bg.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>TmyxV1efSm+7IERxNOqWN6YUEy3cjHVfa8/v5D2Pojk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_option_menu_list_box_bg.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>PjKAMWpnRVOjc4j69DiZy3Sx35Nun1rwx7BUwvSF1YA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_option_menu_bg_selected.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Uo7RkZXsYAHl0hNWN4+/8wwu4AkYgy+KXFT753nH9pw=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_option_menu_bg_normal.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>pTiEER6ZQHQ30R0M5LydfDBYvsBDbUcNwdlEMyK/za8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_option_menu_bg_focused.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iUav5rD4DUVJpp9AqRSIgiUfHJ6F7wnrAq39NCCgmls=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_dropdown_line_normal.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Mxq8NCIXrSgByqVE4a82nxdyRNdMUFjwv3pKk3oZI8g=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_dropdown_line_dimmed.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>PKb4yMY1F5PQboqftsJYHqOxbrhYvBy2P7eKX5T9LVk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_option_menu_nocontent_bg.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>TfE7qSi+67CvFLZZ7zgIThDKOle9Os3orYlRyvYTO1E=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_home_list_move_right.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iTAIVO+qBnlJlQOpTPhZTTpBBMkSMSgq+rHHGa74lk4=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_home_list_move_left.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>eTTs8oyHbjR9Zijb5F1jilZ93fyLLjqGzGStTWT2WVs=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbg_home_gradient_dimmed_option.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>UXHn1krkBKC7JCRzj8h40KDdTtrYPl3QvNHMtdmuHeQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbg_home_gradient_dimmed.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>EEXDCMHtiPGhUsXPX12eTAh7lcQu86us5YmIw8UxqXY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2FAppIcon.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Xaml.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>J/d/Iu+nPnrMUHbnjHtcNpI4dTAbHKyD61nelmBE8rE=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>k9quBEmTxuUA7AiVyJthoirEwrl9SgQr5J0DXi6llkk=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>8FCwIup+0tvOQf5a14Lo7VQVCCG9bgxkw/sxAFAN8lM=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Core.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Wnha/ZDGFuzYPiZ6JyEp1wTQYBpYv7WDYs8CHPr3Ugs=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVHome.Tizen.TV.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>R7KeqWSqXYTrBPiLDbLq3fVCy8kZyWIHIbjgW8eASVM=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVHome.Tizen.TV.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>b9BedGtu+zVnAvHChbiD5vPT1y0NwXiAronKQiCC08o=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVHome.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>X4GiFeOs+/xr5OoC4PUsB04mON5fmQq3rMUw7PDrq/k=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVHome.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>CDi0NSU/sxR5CaxZi4MTlQiccQCOzZ5bPFMBkWmR2f4=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.Tizen.TV.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>x/rqZEBQb4V2cBRByJrDHyvHUP5aIka4jiBYuVysUJg=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.Tizen.TV.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>BgawWdKNYytoW7rglBK3/WadIDO64RmYLRvqdVlKcYA=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iN7qVbbwpxhN3RAqDyb3zDQuvkTlNJNM3mIo45nyMzU=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>nmik89SH8yehPu6zI2peM/amzyT0kunzhWjX/nKDWto=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Xamarin.Forms.Extension.Renderer.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>7oZiDFE6sc/h/5gxMoKu72pn73f48lWBD8p5W7h7j4I=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Xamarin.Forms.Extension.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Q1voviamaw/GnkgZDXopBuyM18WxY0sxyD5g3Uyovf4=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.System.PlatformConfig.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>1fLNIiGbumlNGMW1fApud98XB/+XaRzlfKtOlAaIDwQ=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Applications.WatchApplication.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>899qMfwfpHleUrl1Eyx89Y4AJxYGBwOc7bsmIIERfA4=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Applications.AttachPanel.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Ujn3mYvFRa5GBhVgy6iMMKWOOh0Vl33ISGagcSkxC2U=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Account.SyncManager.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>vy52VSuLoSlQmeqgLYOQP2SZUL8kdr2x6Dw4WL5ia5M=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Tizen.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>p9BXz7Wy961nTBtuJ6NBBlcg3d6JzxtAa2kKvTAjU0k=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ytXYOQFfxUo6TNaE/JC9uMkpYq28zyKWfuzKtLt1hD8=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Shared.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>28yMmL3EV3MWlzVPfP3R3jC9/qQWZlIWvvKHFJz5Qs0=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Shared.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>L9fmVpePV7PCT/SW8PIIBm6ekdcZSq9eG07O/R4s8pI=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FElmSharp.Wearable.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>9xk59Y9Uhmml3aT0AKL5zD8aQbN2QMedWOZxxGQ86EA=</DigestValue>
+ </Reference>
+ <Reference URI="#prop">
+ <Transforms>
+ <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
+ </Transforms>
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>e2rGZ9lURQWep1IIbrRk2NYMw5EXlejQt2B0bMLUyoc=</DigestValue>
+ </Reference>
+ </SignedInfo>
+ <SignatureValue>
+a+uU90E3kJBn1Qw2vB3fyRt/8MzGBn+ZQ1HSxt3HB/pwYkI/TkHdDHmQIB7BmVu5pbqmH8KLs7i7
+chQB2tbxlSjSFn8HMxtzsrY5a5Dt2t52nVXQkJGWVSmHv0NUHCs7LcS7eueulMvttAoZIp+1kt8p
+7f5F9X3k35XItt8mWwk=
+</SignatureValue>
+ <KeyInfo>
+ <X509Data>
+ <X509Certificate>
+MIIClTCCAX2gAwIBAgIGAVYhXgiqMA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz
+c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2
+ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMBExDzANBgNVBAMMBmF1
+dGhvcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApm4Xqu2NAxOEh4Fgo0w6j+Q9MccSOPny
+mkyM3XMn0nL7mFKL4ZETxyRXlMU8DnM9l4zsEH3iS15cZknesUrCEAiuhL4fsp05ZSr6ERCYQrXs
+06WPmepipiM7n6BWzCsSmv0qNxkYWjZODWT2+15PsXfvwsK9wsrjSDIT8SuYV48CAwEAAaMyMDAw
+DAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcN
+AQEFBQADggEBAMqla3XZiV3xAQe3laSgVJvmtEsjl3Zfp7Nufrobsl4pxQhVbOITomeEqrJkn4e6
+zzfsjQQ6nw0yXqeo6qfP1ez8Wvr/egyfO6BrnARX37K5cXszpIn7IvO6xl4Ux/rtp4vvQXDcrDS5
+F07d9tg+5UO6MC/9cKaCNEIxSkXEhjOf5x2LGg686fq5V4WEKCO2ApkJRXn+tFRArysrT5FPEnus
+NG+XhHWJw58HgBrZFl0SOUJQvzi3xv5xVPml65qwbehmQyu+LcgWeKySO46nzF0AXlCTaC78FGYk
+nrG2yFeWO6SWXGV7uxgizufT+s851rPFg/EWYEjqX4jU/jp7Swg=
+</X509Certificate>
+ <X509Certificate>
+MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh
+dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl
+cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu
+IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g
+RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o
+PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu
+g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj
+vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/
+jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE
+dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC
+AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH
+95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04
+1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M
++OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI
+W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg==
+</X509Certificate>
+ </X509Data>
+ </KeyInfo>
+ <Object Id="prop">
+ <SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties">
+ <SignatureProperty Id="profile" Target="#AuthorSignature">
+ <dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile" />
+ </SignatureProperty>
+ <SignatureProperty Id="role" Target="#AuthorSignature">
+ <dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-author" />
+ </SignatureProperty>
+ <SignatureProperty Id="identifier" Target="#AuthorSignature">
+ <dsp:Identifier />
+ </SignatureProperty>
+ </SignatureProperties>
+ </Object>
+</Signature>
\ No newline at end of file
--- /dev/null
+<Signature Id="DistributorSignature" xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <SignedInfo>
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+ <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
+ <Reference URI="tizen-manifest.xml">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>yiowRT7BBe9PMd5KOUgJnrI8+ctp4sFJxRop8zwZ3Vg=</DigestValue>
+ </Reference>
+ <Reference URI="shared%2Fres%2FTVHome.Tizen.TV.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>/gTbhhRqVKFAMykTkZyDaEozK7OBNMSXGtsJpmRcLuE=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fscreenshot.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>rBnUv9kQBnmkHu6V7orYmoteD5eXfJfNtSk4fiES51Y=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_home_list_dimmed_recent.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>abSVmAktD3kMD8cgkHyq7+HznufbfOkkWpLoi3seSXA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_home_list_bg_white_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>BHtl9KTXq3w+B5ABJO86u7SYoNKl0CG/h1qt2NJQHFA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_home_list_bg_white_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ujRWeZIhIcElCoJVIw66t3hfb6sb8VK63a+jtck5EUw=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_home_list_bg_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>RttyFJoNtupluYvHReoAEiDuwNJJNeeBLw19wrGs/xE=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_home_list_bg_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>hI640xq4Vqw3XeO6SinvdjSIOzaPzORFCUXbaEgResI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_apps_list_dimmed_check.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Ixtj64ex0/WsZi2VSM/3Qx6GSWCQAjNNkCYoshGmzOI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_tizen_apps_list_dimmed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>zo8V0MvRxWOPNOKHe9YiYwQQS4qKVDd4nDYXRZds0lI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_home_recent_dimmed_option_75.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>DTpuLrVOInHOOCpLV8Ha1XJiZOGvYqu6MxPxhaEiq4w=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_home_menu_focused_bg.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ZCsfmvO2E/db1sCfLZczGb7wtCMYoixWrfonq9V8W1Q=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_home_list_dimmed_recent_60.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ZzXtd/0Z6EEbeYql7uzznGYLHa1O+vHoBHdS8eC+y2g=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_home_list_dimmed_apps_75.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>2MOhaSuSq7UMYrtFqZgrECcUoOoDg1/v6tZGkcSTP9k=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_home_list_dimmed_apps_60.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>urw6a9ANCmt/dzHoUG1wjSP1dQa/JxcqJimgWQFcKFA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_no_contents.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>wyV5bZt23Oukmg26jcjhBq4e3ZaoyvAEmvmf4N/H9+8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_list_stroke.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>KlC657FZBYGsby56T9TFTVgWUTtm8D7cZwaFkHmuIV0=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_list_dimmed_check.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Ixtj64ex0/WsZi2VSM/3Qx6GSWCQAjNNkCYoshGmzOI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_list_dimmed_95.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>uADDZTovkkBmW29pZm787/g+oBxOWBqpRO2dnYf/ahM=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_list_dimmed_85.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iLfG/n8nzjk0YtoNBrqqDot05l+qDLEVkUfqttNXLcs=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_apps_list_dimmed_75.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Ixtj64ex0/WsZi2VSM/3Qx6GSWCQAjNNkCYoshGmzOI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_option_menu_list_box_check_selected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>oenTDUDtiAEQVBYxbv0xZtU+t5Jq5Z/p6ogv6lQJ79o=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_option_menu_list_box_check_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>u8LBn4QklWpX06MXRDp/0IE/q0lab2FDtIT0TpSVKo8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_option_menu_list_box_check_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>U/02Xv2++HNVYP9BeXqCTd43gxO3eDQ+S2d4lYOvPU8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_option_box_more_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>TiWYMtep4pcheKi8z95wGpSRcN/wjXuRba6vY9eO4gc=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_option_box_more_dimmed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>p5CdWOViau3ehePfQFCrQu7iZPp6QOpXALeH3QhhD5w=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_menu_apps_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>EtZD1Q3rhAzg5/lOi0t3NP1paAk7psxUZXXQesttkRI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_menu_apps_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>4qmHCWwhYsX6Sp+5n1I0ojsto45cn3g+ERr5PNYRsEU=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_menu_addpin_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ysMQWqhHVgFE68EDOTffZmX4x4JrjWm2F7k/1v0q9UY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_menu_addpin_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>xZcjt6+cHOk4r2fjWQgY4PbSAlh9PL+MYjkV7tFMPEk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_mediahub_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Qa+jLmnpzRRkKUkfmZwHRuO6ubj00IgTuMVCbf54xtQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_mediahub_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Qa+jLmnpzRRkKUkfmZwHRuO6ubj00IgTuMVCbf54xtQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_allapps_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>jue0IfvgSHvuVbcy3urOkFi6dueU86ynfsUrImCT1Ko=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_allapps_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>m/NU/yQl1g0Vr24xwU7kT2ocrtzXJKteNtRVMOrcuzk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_addpin_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>gsvs4qLA9qYnUaS3ub73z7Ow0zIIP6B8fDDbt5fpeG0=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_tizen_home_list_addpin_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>DNurC/ezAgPbsiCDPAogMWXKjlZdzPWyrWeSVmYn/ME=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_list_thumbnail_shadow_focused.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>zVDoB9YI+wsx0LiF2roSN2lmtYQgs3BTm5QvUhMX/Rw=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_list_thumbnail_gradient_normal.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>dM5tJw1dRRkH4qRjWySYUY/n7oqbQTxqxnqcWW4rTM0=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_list_thumbnail_gradient_focused.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>NzcImMy9eCGiB8txpMcGm3i5SRNjfSS363Zt4+dAPUY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_launcher_mediahub_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Qa+jLmnpzRRkKUkfmZwHRuO6ubj00IgTuMVCbf54xtQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_launcher_mediahub_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Qa+jLmnpzRRkKUkfmZwHRuO6ubj00IgTuMVCbf54xtQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_tint_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>LHkP9bSmyMZxhF7/N2BlgBHzzxhyzGey6YisfeaNqAo=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_tint_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iu3Z8bQsAqGGhQumVUD/Z5ekIObmzv+Hvpe8fe2cuqc=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_contrast_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>w68yOeITQVLQatvCZI62776hf50CEwO15w0sIgxcAEo=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_contrast_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>3TzeCHSXJsn/5jAuaW0XbBRP2/8WPohPHXHhct8w8I0=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_color_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>IalaRXmRr6SmVFUrJc5yvKhyJqOUsQXIOI80KzeFnrk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_color_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>DDj3G+TOrKWpW83NhLtO090KZx6agkVOKiPFqdTDlX0=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_brightness_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>p3a3uuxR/W4Rbi7PnqSbJCPtwu2og1/RxxOZLgxBKD4=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_brightness_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>pSM2IFVLLRoae4fXE2MFoAEZ60eOkUcVK6TUgYtyKkc=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_all_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>P8tFgQHn4UUit2HgVvAxxfbmyIQJmVbCcn6VEhDQ3+U=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_settings_all_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>h90O5s72TWwK5+fMwTSFdS7n3d3xiPWnh3XbSu9FXZg=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_settings_unselected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>qv91ECpbw5zePEsTj/3+DQo4AjUlMvomZLO6LIGT3Kg=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_settings_selected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>laMaxDSoa3/vBRg8pTTLIR7G8RutxTVjflUpMh3PEnc=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_settings_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>0u4Q/RBQqTad+TlPVDRxIZh5PVFgmdbq/a+RgiUZZNQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_settings_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>YqMEOEXBipNpFdozt+arIUtVklGct1rrcRRY2a8/lLw=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_recent_unselected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>UbErFgk/s2nniMipQzfOq6sTm+9O77+nI0a9MnLKQZk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_recent_selected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>dr1O6uUavxDuU5f6EyPYqcQ7vIiXipEFQiNIZgMOHoE=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_recent_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ynzujpdT3OJ9aqCHPhHBt5y2aSgf/hta2tJpKIPwrvM=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_recent_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>/AJesEfZSEA1TAZwFv16KIrV1C/VnLkqLu25gTkLcho=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_unselected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>qm5PrwOIcF8PVkdnfqzRZ/GToRpHS+e9H860MMCd3YY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_selected.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>C54ugONimzU/RPEUK1SSYmnnxtNpW77h9lPXvtjth7k=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>pqniyO9OrzSgN/czTbFI5eWTEiKaaPvKrMY2DWVrpkY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>4uFNuZc5bEw49qv2zNV+FnDXecySa9D2kGZcUWausS8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>EtZD1Q3rhAzg5/lOi0t3NP1paAk7psxUZXXQesttkRI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_apps_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>4qmHCWwhYsX6Sp+5n1I0ojsto45cn3g+ERr5PNYRsEU=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_addpin_182.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ysMQWqhHVgFE68EDOTffZmX4x4JrjWm2F7k/1v0q9UY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_menu_addpin_138.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>xZcjt6+cHOk4r2fjWQgY4PbSAlh9PL+MYjkV7tFMPEk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_launcher_mediahub_42.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ibFQnq6mQdHlt1McHlqbV2LZa2SIap4ml0FBGxS1VOQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_launcher_mediahub_168.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>wY7l6OKmJYotIpKnPhlh0hR4YDSEtpW2HZtcoi+ERs8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_home_launcher_mediahub_136.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>saIbF5ChgWv4mmprVfJSvHB4PPMch6eF/wDV09tmmVI=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_pinmark.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ZahUF4DidpBuGLkIAcr0MF3VVcGQGC9JjSZztyH5aQA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_launcher_pinmark.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>EJlF00KH8rz4TpqqJK8zEUirikzig9Og98UBDNwp+jw=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_launcher_mediahub_196.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Qa+jLmnpzRRkKUkfmZwHRuO6ubj00IgTuMVCbf54xtQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_launcher_mediahub_164.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>gX3ogKZsX26mpk+kDEAYP+Zp6S3QSrx+13BnFxCc5FM=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_additional_back.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>CyVbmPv2pqcChT+Wu+ogtWAe6bJSh85sqXf6m5x4mDs=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_08.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>NLOZX7wXlktktN4Vef4pa9gubOGJhb9HrRkQS3mudaE=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_07.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>9P4ZzrZv0NlNaB+3No+aGsDBs/jG9NJegHpEGLHNllg=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_06.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>kKyxysfX/d+oZ7U1WHH5dFwGJHSK4wXtq8LOVgHLa2U=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_05.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>BZNk/tRKl/S8oSQZH4L0cwyUtNUL61gX3v8w6zunRgo=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_04.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>/mBm1k4Z9xmw87/3iuDQUbi/6TqvIUjuy22lrXLqYpc=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_03.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Q4OWq9SFfY4Kc6F9aO2L1EnAgNiBHcCKdFV+MfhG8CA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_02.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>SnFNaOuBFWqqvBEwZfZxfNRtXOyAk1qwNaS1RynVD7k=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fhome_icon_bg_01.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>SnFNaOuBFWqqvBEwZfZxfNRtXOyAk1qwNaS1RynVD7k=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_option_menu_nocontent_bg.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>TmyxV1efSm+7IERxNOqWN6YUEy3cjHVfa8/v5D2Pojk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_option_menu_list_box_bg.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>PjKAMWpnRVOjc4j69DiZy3Sx35Nun1rwx7BUwvSF1YA=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_option_menu_bg_selected.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Uo7RkZXsYAHl0hNWN4+/8wwu4AkYgy+KXFT753nH9pw=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_option_menu_bg_normal.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>pTiEER6ZQHQ30R0M5LydfDBYvsBDbUcNwdlEMyK/za8=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_option_menu_bg_focused.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iUav5rD4DUVJpp9AqRSIgiUfHJ6F7wnrAq39NCCgmls=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_dropdown_line_normal.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Mxq8NCIXrSgByqVE4a82nxdyRNdMUFjwv3pKk3oZI8g=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_tizen_dropdown_line_dimmed.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>PKb4yMY1F5PQboqftsJYHqOxbrhYvBy2P7eKX5T9LVk=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_option_menu_nocontent_bg.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>TfE7qSi+67CvFLZZ7zgIThDKOle9Os3orYlRyvYTO1E=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_home_list_move_right.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iTAIVO+qBnlJlQOpTPhZTTpBBMkSMSgq+rHHGa74lk4=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_home_list_move_left.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>eTTs8oyHbjR9Zijb5F1jilZ93fyLLjqGzGStTWT2WVs=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbg_home_gradient_dimmed_option.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>UXHn1krkBKC7JCRzj8h40KDdTtrYPl3QvNHMtdmuHeQ=</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbg_home_gradient_dimmed.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>EEXDCMHtiPGhUsXPX12eTAh7lcQu86us5YmIw8UxqXY=</DigestValue>
+ </Reference>
+ <Reference URI="res%2FAppIcon.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Xaml.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>J/d/Iu+nPnrMUHbnjHtcNpI4dTAbHKyD61nelmBE8rE=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>k9quBEmTxuUA7AiVyJthoirEwrl9SgQr5J0DXi6llkk=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>8FCwIup+0tvOQf5a14Lo7VQVCCG9bgxkw/sxAFAN8lM=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Core.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Wnha/ZDGFuzYPiZ6JyEp1wTQYBpYv7WDYs8CHPr3Ugs=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVHome.Tizen.TV.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>R7KeqWSqXYTrBPiLDbLq3fVCy8kZyWIHIbjgW8eASVM=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVHome.Tizen.TV.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>b9BedGtu+zVnAvHChbiD5vPT1y0NwXiAronKQiCC08o=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVHome.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>X4GiFeOs+/xr5OoC4PUsB04mON5fmQq3rMUw7PDrq/k=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVHome.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>CDi0NSU/sxR5CaxZi4MTlQiccQCOzZ5bPFMBkWmR2f4=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.Tizen.TV.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>x/rqZEBQb4V2cBRByJrDHyvHUP5aIka4jiBYuVysUJg=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.Tizen.TV.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>BgawWdKNYytoW7rglBK3/WadIDO64RmYLRvqdVlKcYA=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>iN7qVbbwpxhN3RAqDyb3zDQuvkTlNJNM3mIo45nyMzU=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVApps.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>nmik89SH8yehPu6zI2peM/amzyT0kunzhWjX/nKDWto=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Xamarin.Forms.Extension.Renderer.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>7oZiDFE6sc/h/5gxMoKu72pn73f48lWBD8p5W7h7j4I=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Xamarin.Forms.Extension.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Q1voviamaw/GnkgZDXopBuyM18WxY0sxyD5g3Uyovf4=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.System.PlatformConfig.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>1fLNIiGbumlNGMW1fApud98XB/+XaRzlfKtOlAaIDwQ=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Applications.WatchApplication.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>899qMfwfpHleUrl1Eyx89Y4AJxYGBwOc7bsmIIERfA4=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Applications.AttachPanel.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>Ujn3mYvFRa5GBhVgy6iMMKWOOh0Vl33ISGagcSkxC2U=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTizen.Account.SyncManager.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>vy52VSuLoSlQmeqgLYOQP2SZUL8kdr2x6Dw4WL5ia5M=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Tizen.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>p9BXz7Wy961nTBtuJ6NBBlcg3d6JzxtAa2kKvTAjU0k=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>ytXYOQFfxUo6TNaE/JC9uMkpYq28zyKWfuzKtLt1hD8=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Shared.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>28yMmL3EV3MWlzVPfP3R3jC9/qQWZlIWvvKHFJz5Qs0=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FLibCommon.Shared.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>L9fmVpePV7PCT/SW8PIIBm6ekdcZSq9eG07O/R4s8pI=</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FElmSharp.Wearable.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>9xk59Y9Uhmml3aT0AKL5zD8aQbN2QMedWOZxxGQ86EA=</DigestValue>
+ </Reference>
+ <Reference URI="author-signature.xml">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>8DuG+ktphW28f9BqEz5ZGHW/k9MxR8LpOO+ERJoHV60=</DigestValue>
+ </Reference>
+ <Reference URI="#prop">
+ <Transforms>
+ <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
+ </Transforms>
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
+ <DigestValue>abSCdQC03ZcPoEN8T0eWSILDIhDi2uNziivgdw1gmmQ=</DigestValue>
+ </Reference>
+ </SignedInfo>
+ <SignatureValue>
+mISGW6EqPcVVVotj/QLJCLBXAhKi9KGhCSeasOr57r0I7NekP0nc/KOehVtPLhvgiAriEYobrH89
+gpPJaH+FslY249e2MFAyn1lzoENr0RkxASlZ7n+p+tmDLTOyuzS9zD7YXLYPfo/zlPF74BiL4l//
+843Yl03PhQIB44ZOiyM=
+</SignatureValue>
+ <KeyInfo>
+ <X509Data>
+ <X509Certificate>
+MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV
+BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE
+CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry
+aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS
+MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex
+IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp
+YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK
+90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H
+mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB
+hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez
+GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1
+vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc=
+</X509Certificate>
+ <X509Certificate>
+MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO
+MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw
+IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj
+IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL
+MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6
+ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb
+VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe
+OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp
+bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah
+2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ
+KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+
+yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0
+VhfnkHwPltmrpYVe
+</X509Certificate>
+ </X509Data>
+ </KeyInfo>
+ <Object Id="prop">
+ <SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties">
+ <SignatureProperty Id="profile" Target="#DistributorSignature">
+ <dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile" />
+ </SignatureProperty>
+ <SignatureProperty Id="role" Target="#DistributorSignature">
+ <dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-distributor" />
+ </SignatureProperty>
+ <SignatureProperty Id="identifier" Target="#DistributorSignature">
+ <dsp:Identifier />
+ </SignatureProperty>
+ </SignatureProperties>
+ </Object>
+</Signature>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest package="org.tizen.xahome" version="1.0.0" api-version="3.0" xmlns="http://tizen.org/ns/packages">
+ <profile name="tv" />
+ <ui-application appid="org.tizen.xahome" exec="TVHome.Tizen.TV.dll" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="false" type="dotnet" launch_mode="single">
+ <icon>xahome.png</icon>
+ <label>Home</label>
+ </ui-application>
+ <ui-application appid="org.tizen.xaapps" exec="TVApps.Tizen.TV.dll" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="false" type="dotnet" launch_mode="single">
+ <icon>xaapps.png</icon>
+ <label>Apps</label>
+ </ui-application>
+ <shortcut-list />
+ <privileges>
+ <privilege>http://tizen.org/privilege/bluetooth</privilege>
+ <privilege>http://tizen.org/privilege/network.get</privilege>
+ <privilege>http://tizen.org/privilege/network.set</privilege>
+ <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
+ <privilege>http://tizen.org/privilege/packagemanager.admin</privilege>
+ <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+ <privilege>http://tizen.org/privilege/externalstorage</privilege>
+ <privilege>http://tizen.org/privilege/keygrab</privilege>
+ </privileges>
+</manifest>
+
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest package="org.tizen.xahome" version="1.0.0" api-version="3.0" xmlns="http://tizen.org/ns/packages">
+ <profile name="tv" />
+ <ui-application appid="org.tizen.xahome" exec="TVHome.Tizen.TV.dll" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="false" type="dotnet" launch_mode="single">
+ <icon>xahome.png</icon>
+ <label>Home</label>
+ </ui-application>
+ <ui-application appid="org.tizen.xaapps" exec="TVApps.Tizen.TV.dll" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="false" type="dotnet" launch_mode="single">
+ <icon>xaapps.png</icon>
+ <label>Apps</label>
+ </ui-application>
+ <shortcut-list />
+ <privileges>
+ <privilege>http://tizen.org/privilege/bluetooth</privilege>
+ <privilege>http://tizen.org/privilege/network.get</privilege>
+ <privilege>http://tizen.org/privilege/network.set</privilege>
+ <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
+ <privilege>http://tizen.org/privilege/packagemanager.admin</privilege>
+ <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+ <privilege>http://tizen.org/privilege/externalstorage</privilege>
+ <privilege>http://tizen.org/privilege/keygrab</privilege>
+ </privileges>
+</manifest>
+
+++ /dev/null
-using System.Reflection;\r
-using System.Runtime.CompilerServices;\r
-using System.Runtime.InteropServices;\r
-\r
-// General Information about an assembly is controlled through the following\r
-// set of attributes. Change these attribute values to modify the information\r
-// associated with an assembly.\r
-[assembly: AssemblyTitle("TVHome.TizenTV")]\r
-[assembly: AssemblyDescription("")]\r
-[assembly: AssemblyConfiguration("")]\r
-[assembly: AssemblyCompany("")]\r
-[assembly: AssemblyProduct("TVHome.TizenTV")]\r
-[assembly: AssemblyCopyright("Copyright © 2017")]\r
-[assembly: AssemblyTrademark("")]\r
-[assembly: AssemblyCulture("")]\r
-\r
-// Setting ComVisible to false makes the types in this assembly not visible\r
-// to COM components. If you need to access a type in this assembly from\r
-// COM, set the ComVisible attribute to true on that type.\r
-[assembly: ComVisible(false)]\r
-\r
-// The following GUID is for the ID of the typelib if this project is exposed to COM\r
-[assembly: Guid("ce03a1dc-a3e0-41dd-b06c-92c19e8d2a8f")]\r
-\r
-// Version information for an assembly consists of the following four values:\r
-//\r
-// Major Version\r
-// Minor Version\r
-// Build Number\r
-// Revision\r
-//\r
-// You can specify all the values or you can default the Build and Revision Numbers\r
-// by using the '*' as shown below:\r
-// [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("1.0.0.0")]\r
-[assembly: AssemblyFileVersion("1.0.0.0")]\r
+++ /dev/null
-<StyleCopSettings Version="105">\r
- <GlobalSettings>\r
- <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>\r
- </GlobalSettings>\r
- <Analyzers>\r
- <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">\r
- <Rules>\r
- <Rule Name="ElementsMustBeDocumented">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementDocumentationMustHaveSummaryText">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="EnumerationItemsMustBeDocumented">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DocumentationMustContainValidXml">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementDocumentationMustHaveSummary">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="PartialElementDocumentationMustHaveSummary">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementDocumentationMustNotHaveDefaultSummary">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="VoidReturnValueMustNotBeDocumented">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="GenericTypeParametersMustBeDocumented">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="GenericTypeParametersMustBeDocumentedPartialClass">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="GenericTypeParameterDocumentationMustHaveText">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="PropertySummaryDocumentationMustMatchAccessors">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementDocumentationMustNotBeCopiedAndPasted">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DocumentationTextMustNotBeEmpty">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DocumentationTextMustContainWhitespace">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DocumentationMustMeetCharacterPercentage">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DocumentationHeadersMustNotContainBlankLines">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="IncludedDocumentationXPathDoesNotExist">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="IncludeNodeDoesNotContainValidFileAndPath">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="InheritDocMustBeUsedWithInheritingClass">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementDocumentationMustBeSpelledCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FileMustHaveHeader">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FileHeaderMustShowCopyright">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FileHeaderMustHaveCopyrightText">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FileHeaderMustContainFileName">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FileHeaderFileNameDocumentationMustMatchFileName">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FileHeaderMustHaveValidCompanyText">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FileHeaderFileNameDocumentationMustMatchTypeName">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- </Rules>\r
- <AnalyzerSettings />\r
- </Analyzer>\r
- <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">\r
- <Rules>\r
- <Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FieldNamesMustBeginWithLowerCaseLetter">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FieldNamesMustNotContainUnderscore">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementMustBeginWithLowerCaseLetter">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FieldNamesMustNotUseHungarianNotation">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="VariableNamesMustNotBePrefixed">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FieldNamesMustNotBeginWithUnderscore">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="StaticReadonlyFieldsMustBeginWithUpperCaseLetter">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- </Rules>\r
- <AnalyzerSettings />\r
- </Analyzer>\r
- <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">\r
- <Rules>\r
- <Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="CodeMustNotContainMultipleBlankLinesInARow">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="SingleLineCommentMustBePrecededByBlankLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementsMustBeSeparatedByBlankLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- </Rules>\r
- <AnalyzerSettings />\r
- </Analyzer>\r
- <Analyzer AnalyzerId="StyleCop.CSharp.MaintainabilityRules">\r
- <Rules>\r
- <Rule Name="AccessModifierMustBeDeclared">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FieldsMustBePrivate">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="CodeAnalysisSuppressionMustHaveJustification">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DebugAssertMustProvideMessageText">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DebugFailMustProvideMessageText">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FileMayOnlyContainASingleClass">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="FileMayOnlyContainASingleNamespace">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="StatementMustNotUseUnnecessaryParenthesis">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ArithmeticExpressionsMustDeclarePrecedence">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ConditionalExpressionsMustDeclarePrecedence">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="RemoveDelegateParenthesisWhenPossible">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="AttributeConstructorMustNotUseUnnecessaryParenthesis">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="RemoveUnnecessaryCode">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- </Rules>\r
- <AnalyzerSettings />\r
- </Analyzer>\r
- <Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">\r
- <Rules>\r
- <Rule Name="UsingDirectivesMustBePlacedWithinNamespace">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementsMustAppearInTheCorrectOrder">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ElementsMustBeOrderedByAccess">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ConstantsMustAppearBeforeFields">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="StaticElementsMustAppearBeforeInstanceElements">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DeclarationKeywordsMustFollowOrder">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ProtectedMustComeBeforeInternal">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="PropertyAccessorsMustFollowOrder">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="EventAccessorsMustFollowOrder">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="NoValueFirstComparison">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="UsingStaticDirectivesMustBePlacedAfterUsingNamespaceDirectives">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- </Rules>\r
- <AnalyzerSettings />\r
- </Analyzer>\r
- <Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">\r
- <Rules>\r
- <Rule Name="CommentsMustContainText">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="PrefixLocalCallsWithThis">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="PrefixCallsCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="OpeningParenthesisMustBeOnDeclarationLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="CommaMustBeOnSameLineAsPreviousParameter">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ParameterListMustFollowDeclaration">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ParameterMustFollowComma">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="SplitParametersMustStartOnLineAfterDeclaration">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ParametersMustBeOnSameLineOrSeparateLines">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ParameterMustNotSpanMultipleLines">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="QueryClauseMustFollowPreviousClause">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="QueryClausesMustBeOnSeparateLinesOrAllOnOneLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="QueryClausesSpanningMultipleLinesMustBeginOnOwnLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DoNotPlaceRegionsWithinElements">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="CodeMustNotContainEmptyStatements">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="CodeMustNotContainMultipleStatementsOnOneLine">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="BlockStatementsMustNotContainEmbeddedComments">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="BlockStatementsMustNotContainEmbeddedRegions">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="UseStringEmptyForEmptyStrings">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="UseBuiltInTypeAlias">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="UseShorthandForNullableTypes">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- </Rules>\r
- <AnalyzerSettings />\r
- </Analyzer>\r
- <Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">\r
- <Rules>\r
- <Rule Name="CommasMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="SemicolonsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DocumentationLinesMustBeginWithSingleSpace">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="SingleLineCommentsMustBeginWithSingleSpace">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="PreprocessorKeywordsMustNotBePrecededBySpace">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="OperatorKeywordMustBeFollowedBySpace">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="OpeningCurlyBracketsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ClosingCurlyBracketsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="OpeningGenericBracketsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ClosingGenericBracketsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="OpeningAttributeBracketsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ClosingAttributeBracketsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="NullableTypeSymbolsMustNotBePrecededBySpace">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="MemberAccessSymbolsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="IncrementDecrementSymbolsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="NegativeSignsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="PositiveSignsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="ColonsMustBeSpacedCorrectly">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="CodeMustNotContainMultipleWhitespaceInARow">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="TabsMustNotBeUsed">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- <Rule Name="DoNotSplitNullConditionalOperators">\r
- <RuleSettings>\r
- <BooleanProperty Name="Enabled">False</BooleanProperty>\r
- </RuleSettings>\r
- </Rule>\r
- </Rules>\r
- <AnalyzerSettings />\r
- </Analyzer>\r
- </Analyzers>\r
-</StyleCopSettings>
\ No newline at end of file
+++ /dev/null
-using System;
-using System.IO;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using Tizen;
-
-namespace CoreApp
-{
- /// <summary>
- /// Handles recent screen shot of launched applications
- /// </summary>
- public class Sniper
- {
- /// <summary>
- /// Main window of the application
- /// </summary>
- private IntPtr nativeWindow;
-
- /// <summary>
- /// A path of storage for recent screen shot of launched application
- /// </summary>
- private string storagePath;
-
- /// <summary>
- /// A width of recent screen shot
- /// </summary>
- private int imageWidth;
-
- /// <summary>
- /// A height of recent screen shot
- /// </summary>
- private int imageHeight;
-
- /// <summary>
- /// A flag indicates whether updating recent screen shot or not
- /// </summary>
- public bool SkipUpdateFlag;
-
- /// <summary>
- /// Callbacks of sniper events
- /// </summary>
- private static InterOp.SniperCallback callbacks;
-
- /// <summary>
- /// A EventHandler handles recent screen shot update event
- /// </summary>
- public event EventHandler<Event> UpdatedEvent;
-
- /// <summary>
- /// A EventHandler handles add or remove application
- /// </summary>
- public event EventHandler<Event> AddRemoveEvent;
-
- /// <summary>
- /// A EventHandler handles skip update event
- /// </summary>
- public event EventHandler<Event> SkipUpdateEvent;
-
- /// <summary>
- /// A event argument class for app screen update notification.
- /// </summary>
- public class Event : EventArgs
- {
- public string AppId;
- public string InstanceId;
- public string Info;
- }
-
- /// <summary>
- /// A method for writing debug log
- /// </summary>
- /// <param name="message">A log message</param>
- /// <param name="file">A path of caller file</param>
- /// <param name="func">A name of caller function</param>
- /// <param name="line">A line number of caller line</param>
- private void WriteLog(string message, [CallerFilePath] string file = "", [CallerMemberName] string func = "", [CallerLineNumber] int line = 0)
- {
- Log.Debug("sniper", message);
- }
-
- /// <summary>
- /// A method for handling launched application
- /// </summary>
- /// <param name="appId">An ID of launched application</param>
- /// <param name="instanceId">An instance ID of launched application</param>
- private void AddedCallback(string appId, string instanceId)
- {
- EventHandler<Event> handler = AddRemoveEvent;
- Event eventInfo;
-
- WriteLog("Added " + appId + " " + instanceId);
-
- if (handler == null)
- {
- return;
- }
-
- try
- {
- eventInfo = new Event();
- }
- catch (Exception e)
- {
- WriteLog("Updated Exception : " + e.Message);
- return;
- }
-
- eventInfo.AppId = appId;
- eventInfo.InstanceId = instanceId;
- eventInfo.Info = "Added";
-
- handler(this, eventInfo);
- }
-
- /// <summary>
- /// A method for handling terminated application
- /// </summary>
- /// <param name="appId">An ID of terminated application</param>
- /// <param name="instanceId">An instance ID of terminated application</param>
- private void RemovedCallback(string appId, string instanceId)
- {
- EventHandler<Event> handler = AddRemoveEvent;
- Event eventInfo;
-
- WriteLog("Removed " + appId + " " + instanceId);
-
- if (handler == null)
- {
- return;
- }
-
- try
- {
- eventInfo = new Event();
- }
- catch (Exception e)
- {
- WriteLog("Updated Exception : " + e.Message);
- return;
- }
-
- eventInfo.AppId = appId;
- eventInfo.InstanceId = instanceId;
- eventInfo.Info = "Removed";
-
- handler(this, eventInfo);
- }
-
- /// <summary>
- /// A method for handling application screen is updated
- /// </summary>
- /// <param name="appId">An ID of application that screen is updated</param>
- /// <param name="instanceId">An instance ID of application that screen is updated</param>
- /// <param name="Filename">A path of application screen shot</param>
- private void UpdatedCallback(string appId, string instanceId, string Filename)
- {
- EventHandler<Event> handler = UpdatedEvent;
- Event eventInfo;
-
- WriteLog("Updated " + appId + " " + instanceId + " " + Filename);
-
- if (handler == null)
- {
- return;
- }
-
- try
- {
- eventInfo = new Event();
- }
- catch (Exception e)
- {
- WriteLog("Updated Exception : " + e.Message);
- return;
- }
-
- eventInfo.Info = Filename;
- eventInfo.AppId = appId;
- eventInfo.InstanceId = instanceId;
-
- handler(this, eventInfo);
- }
-
- /// <summary>
- /// A method for handling screen update is skipped
- /// </summary>
- /// <param name="appId">An ID of application that screen update is skipped</param>
- /// <param name="instanceId">An instance ID of application that screen update is skipped</param>
- /// <param name="Filename">A path of application screen shot</param>
- /// <returns>Returns finish code</returns>
- private int SkipUpdateCallback(string appId, string instanceId, string Filename)
- {
- EventHandler<Event> handler = SkipUpdateEvent;
- Event eventInfo;
-
- WriteLog("SkipUpdate" + appId + " " + instanceId + " " + Filename);
-
- if (handler == null)
- {
- return 0;
- }
-
- try
- {
- eventInfo = new Event();
- }
- catch (Exception e)
- {
- WriteLog("SkipUpdated Exception : " + e.Message);
- return 0;
- }
-
- eventInfo.Info = Filename;
- eventInfo.AppId = appId;
- eventInfo.InstanceId = instanceId;
-
- handler(this, eventInfo);
-
- if (SkipUpdateFlag)
- {
- WriteLog("Update is skipped : " + Filename);
- SkipUpdateFlag = false;
- return 1;
- }
-
- return 0;
- }
-
- /// <summary>
- /// Constructor
- /// </summary>
- /// <param name="window">Main window of this application</param>
- /// <param name="path">Storage path</param>
- /// <param name="width">Screen shot width</param>
- /// <param name="height">Screen shot height</param>
- public Sniper(IntPtr window, string path, int width, int height)
- {
- nativeWindow = window;
- storagePath = path;
- imageWidth = width;
- imageHeight = height;
- SkipUpdateFlag = false;
- }
-
- /// <summary>
- /// A method for starting monitoring
- /// Adds callbacks and initialize Sniper class
- /// </summary>
- public void StartMonitor()
- {
- try
- {
- callbacks = new InterOp.SniperCallback();
- callbacks.Added = new InterOp.CallbackAddedRemoved(AddedCallback);
- callbacks.Removed = new InterOp.CallbackAddedRemoved(RemovedCallback);
- callbacks.Updated = new InterOp.CallbackUpdated(UpdatedCallback);
- callbacks.SkipUpdate = new InterOp.CallbackSkipUpdate(SkipUpdateCallback);
- }
- catch (Exception e)
- {
- throw new SniperException(e.Message);
- }
-
- try
- {
- InterOp.sniper_init(nativeWindow, callbacks, storagePath, imageWidth, imageHeight);
- }
- catch (DllNotFoundException e)
- {
- WriteLog("Loadable library is not found " + e.StackTrace);
- }
-
- WriteLog("Sniper starts monitoring : " + storagePath + "ImageSize : " + imageWidth + "x" + imageHeight);
- }
-
- /// <summary>
- /// A method stops monitoring
- /// </summary>
- public void StopMonitor()
- {
- try
- {
- InterOp.sniper_fini();
- }
- catch (DllNotFoundException e)
- {
- WriteLog("Loadable library is not found " + e.StackTrace);
- }
-
- WriteLog("Sniper stops monitoring : " + storagePath + "ImageSize : " + imageWidth + "x" + imageHeight);
- }
-
- /// <summary>
- /// A method requests updating application screen shot
- /// </summary>
- /// <param name="instanceId">An instance ID of application</param>
- public void RequestUpdate(string instanceId)
- {
- try
- {
- InterOp.sniper_request_update(instanceId);
- }
- catch (DllNotFoundException e)
- {
- WriteLog("Loadable library is not found " + e.StackTrace);
- }
-
- WriteLog("Sniper requests update (" + instanceId + ") : " + storagePath + "ImageSize : " + imageWidth + "x" + imageHeight);
- }
- }
-}
-
-/* End of a file */
+++ /dev/null
-using System;
-
-namespace CoreApp
-{
- public class SniperException : Exception
- {
- public SniperException()
- {
- }
-
- public SniperException(string message)
- : base(message)
- {
- }
-
- public SniperException(string message, Exception inner)
- : base(message, inner)
- {
- }
- }
-}
-
-/* End of a file */
+++ /dev/null
-using System;
-using System.Runtime.InteropServices;
-
-namespace CoreApp
-{
- /// <summary>
- /// Sniper InterOp class for getting application's screen-shot.
- /// </summary>
- internal static partial class InterOp
- {
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- public delegate void CallbackAddedRemoved(string appId, string instanceId);
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- public delegate void CallbackUpdated(string appId, string instanceId, string filename);
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- public delegate int CallbackSkipUpdate(string appid, string instanceId, string filename);
-
- [StructLayout(LayoutKind.Sequential)]
- public struct SniperCallback
- {
- public CallbackAddedRemoved Added;
- public CallbackAddedRemoved Removed;
- public CallbackUpdated Updated;
- public CallbackSkipUpdate SkipUpdate;
- }
-
- [DllImport("sniper", CharSet = CharSet.Ansi)]
- internal static extern int sniper_init(IntPtr win, SniperCallback callbacks, string path, int w, int h);
-
- [DllImport("sniper", CharSet = CharSet.Ansi)]
- internal static extern int sniper_request_update(string instanceId);
-
- [DllImport("sniper", CharSet = CharSet.Ansi)]
- internal static extern int sniper_fini();
- }
-}
-
-/* End of a file */
+++ /dev/null
-/*
- * 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 Tizen.Applications;
-using LibTVRefCommonPortable.Utils;
-using LibTVRefCommonTizen.Ports;
-using Tizen.Xamarin.Forms.Extension.Renderer;
-using CoreApp;
-using System;
-
-namespace TVHome.TizenTV
-{
- /// <summary>
- /// TV Home application main entry point
- /// </summary>
- class Program : global::Xamarin.Forms.Platform.Tizen.FormsApplication
- {
- /// <summary>
- /// An interface for the platform notification
- /// </summary>
- IPlatformNotification notification;
- /// <summary>
- /// A port for handling Window APIs
- /// </summary>
- WindowPort windowPort;
-
- /// <summary>
- /// A method will be called when application is created
- /// </summary>
- protected override void OnCreate()
- {
- base.OnCreate();
-
- FileSystemPort.AppDataStroagePath = DirectoryInfo.Data;
- FileSystemPort.AppResourceStoragePath = DirectoryInfo.Resource;
- string platformShareStoragePath = "/opt/usr/home/owner/share/";
- FileSystemPort.PlatformShareStroagePath = platformShareStoragePath;
-
- var app = new App(MainWindow.ScreenSize.Width,
- MainWindow.ScreenSize.Height,
- MainWindow.ScreenDpi.X,
- ElmSharp.Elementary.GetScale());
-
- notification = app;
-
- DbgPort.D("-----------------------------------");
- DbgPort.D("Home application is being loaded...");
- DbgPort.D("-----------------------------------");
- LoadApplication(app);
-
- PackageManagerPort.RegisterCallbacks(notification);
-
- MainWindow.KeyUp += KeyUpListener;
- MainWindow.Alpha = true;
-
- windowPort = new WindowPort();
- windowPort.MainWindow = MainWindow;
-
- /// Grab key events
- MainWindow.KeyGrab(ElmSharp.EvasKeyEventArgs.PlatformHomeButtonName, true);
- MainWindow.KeyGrab(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName, true);
- MainWindow.KeyGrab("XF86Info", true);
- MainWindow.KeyGrab("Up", false);
- MainWindow.KeyGrab("Down", false);
- MainWindow.KeyGrab("Left", false);
- MainWindow.KeyGrab("Right", false);
- windowPort.SetKeyGrabExclusively(ElmSharp.EvasKeyEventArgs.PlatformHomeButtonName);
-
- /// Sniper
- try
- {
- Sniper sniper = new Sniper((IntPtr)MainWindow, platformShareStoragePath, 960, 540);
- sniper.UpdatedEvent += OnScreenUpdate;
- sniper.AddRemoveEvent += SniperAddRemoveEvent;
- sniper.SkipUpdateEvent += SniperSkipUpdateEvent;
- sniper.StartMonitor();
- }
- catch (SniperException e)
- {
- DbgPort.E("Failed to create sniper object : " + e.Message);
- }
- }
-
- private void SniperSkipUpdateEvent(object sender, Sniper.Event e)
- {
- DbgPort.D(" [Sniper SkipUpdateEvent] : " + e.Info);
- (sender as Sniper).SkipUpdateFlag = true;
- }
-
- private void SniperAddRemoveEvent(object sender, Sniper.Event e)
- {
- DbgPort.D(" [Sniper SniperAddRemoveEvent] : " + e.Info);
- }
-
- private void OnScreenUpdate(object sender, Sniper.Event e)
- {
- DbgPort.D(" [Sniper OnScreenUpdate] : " + e.Info);
- }
-
- /// <summary>
- /// A method will be called when application receives KeyUp event
- /// </summary>
- /// <param name="sender">The source of the event</param>
- /// <param name="e">A EvasKey event's argument</param>
- private void KeyUpListener(object sender, ElmSharp.EvasKeyEventArgs e)
- {
- DbgPort.D("Key Pressed :" + e.KeyName);
- if (e.KeyName.CompareTo(ElmSharp.EvasKeyEventArgs.PlatformHomeButtonName) == 0)
- {
- notification?.OnHomeKeyPressed();
- }
- else if (e.KeyName.CompareTo(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName) == 0 ||
- e.KeyName.CompareTo("XF86Info") == 0)
- {
- notification?.OnMenuKeyPressed();
- }
- else if (e.KeyName.Equals("Up") || e.KeyName.Equals("Down") || e.KeyName.Equals("Left") || e.KeyName.Equals("Right"))
- {
- notification?.OnNavigationKeyPressed(e.KeyName);
- }
- }
-
- /// <summary>
- /// A method will be called when application is terminated
- /// </summary>
- protected override void OnTerminate()
- {
- base.OnTerminate();
-
- notification = null;
- PackageManagerPort.UnregisterCallbacks();
- MainWindow.KeyUngrab(ElmSharp.EvasKeyEventArgs.PlatformHomeButtonName);
- MainWindow.KeyUngrab(ElmSharp.EvasKeyEventArgs.PlatformMenuButtonName);
- MainWindow.KeyUngrab("XF86Info");
- MainWindow.KeyUngrab("Up");
- MainWindow.KeyUngrab("Down");
- MainWindow.KeyUngrab("Left");
- MainWindow.KeyUngrab("Right");
- }
-
- /// <summary>
- /// A method will be called when application receives app control
- /// </summary>
- /// <param name="e">AppControl event argument</param>
- protected override void OnAppControlReceived(AppControlReceivedEventArgs e)
- {
- if (AppControlPort.AppAddedNotifyOperation.CompareTo(e.ReceivedAppControl.Operation) == 0)
- {
- DbgPort.D("App Added Notification");
- string pinnedApp;
- if (e.ReceivedAppControl.ExtraData.TryGet(AppControlPort.KeyAddedAppID, out pinnedApp))
- {
- notification?.OnAppPinnedNotificationReceived(pinnedApp);
- }
- else
- {
- notification?.OnAppPinnedNotificationReceived("");
- }
- }
- }
-
- /// <summary>
- /// The entry point for the application
- /// </summary>
- /// <param name="args">A list of command line arguments</param>
- static void Main(string[] args)
- {
- var app = new Program();
-
- DbgPort.Prefix = "Home";
-
- global::Xamarin.Forms.DependencyService.Register<DbgPort>();
- global::Xamarin.Forms.DependencyService.Register<AppControlPort>();
- global::Xamarin.Forms.DependencyService.Register<PackageManagerPort>();
- global::Xamarin.Forms.DependencyService.Register<FileSystemWatcherPort>();
- global::Xamarin.Forms.DependencyService.Register<ApplicationManagerPort>();
- global::Xamarin.Forms.DependencyService.Register<FileSystemPort>();
- global::Xamarin.Forms.DependencyService.Register<WindowPort>();
- global::Xamarin.Forms.DependencyService.Register<SystemSettingsPort>();
- global::Xamarin.Forms.DependencyService.Register<MediaContentPort>();
- TizenFormsExtension.Init();
- global::Xamarin.Forms.Platform.Tizen.Forms.Init(app);
- app.Run(args);
- }
- }
-}
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectTypeGuids>{2F98DAC9-6F16-457B-AED7-D43CAC379341};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ProjectGuid>{CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>TVHome.TizenTV</RootNamespace>
- <AssemblyName>xahome</AssemblyName>
- <FileAlignment>512</FileAlignment>
- <DefaultLanguage>en-US</DefaultLanguage>
- </PropertyGroup>
- <PropertyGroup>
- <TargetFrameworkIdentifier>DNXCore</TargetFrameworkIdentifier>
- <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
- <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>
- <NuGetTargetMoniker>.NETCoreApp,Version=v1.0</NuGetTargetMoniker>
- <NoStdLib>true</NoStdLib>
- <NoWarn>$(NoWarn);1701</NoWarn>
- <UseVSHostingProcess>false</UseVSHostingProcess>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>portable</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>portable</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <None Include="TVHome.TizenTV.project.json" />
- <None Include="tizen-manifest.xml">
- <ExcludeFromStyleCop>False</ExcludeFromStyleCop>
- </None>
- <None Include="shared\res\xahome.png" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Sniper.cs" />
- <Compile Include="SniperException.cs" />
- <Compile Include="SniperInterOp.cs">
- <ExcludeFromStyleCop>true</ExcludeFromStyleCop>
- </Compile>
- <Compile Include="TVHome.TizenTV.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <Folder Include="lib\" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\LibTVRefCommonPortable\LibTVRefCommonPortable.csproj">
- <Project>{67F9D3A8-F71E-4428-913F-C37AE82CDB24}</Project>
- <Name>LibTVRefCommonPortable</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\LibTVRefCommonTizen\LibTVRefCommonTizen.csproj">
- <Project>{C558D279-897E-45E1-A10A-DECD788770F4}</Project>
- <Name>LibTVRefCommonTizen</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\TVApps\TVApps.TizenTV\TVApps.TizenTV.csproj">
- <Project>{7e341bf5-b7bd-4532-9d4a-aa89537b525e}</Project>
- <Name>TVApps.TizenTV</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\TVApps\TVApps\TVApps.csproj">
- <Project>{fd8c0ef4-6cea-4421-85b7-7ac8592738c6}</Project>
- <Name>TVApps</Name>
- </ProjectReference>
- <ProjectReference Include="..\TVHome\TVHome.csproj">
- <Project>{54dd6673-7e64-48e6-a008-4d455e19e017}</Project>
- <Name>TVHome</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Content Include="res\AppIcon.png" />
- <Content Include="res\bg_home_gradient_dimmed.9.png" />
- <Content Include="res\btn_home_list_move_left.png" />
- <Content Include="res\btn_home_list_move_right.png" />
- <Content Include="res\btn_option_menu_nocontent_bg.9.png" />
- <Content Include="res\btn_tizen_dropdown_line_dimmed.9.png" />
- <Content Include="res\btn_tizen_dropdown_line_normal.9.png" />
- <Content Include="res\btn_tizen_option_menu_bg_focused.9.png" />
- <Content Include="res\btn_tizen_option_menu_bg_normal.9.png" />
- <Content Include="res\btn_tizen_option_menu_bg_selected.9.png" />
- <Content Include="res\btn_tizen_option_menu_list_box_bg.9.png" />
- <Content Include="res\btn_tizen_option_menu_nocontent_bg.9.png" />
- <Content Include="res\home_icon_bg_01.png" />
- <Content Include="res\home_icon_bg_02.png" />
- <Content Include="res\home_icon_bg_03.png" />
- <Content Include="res\home_icon_bg_04.png" />
- <Content Include="res\home_icon_bg_05.png" />
- <Content Include="res\home_icon_bg_06.png" />
- <Content Include="res\home_icon_bg_07.png" />
- <Content Include="res\home_icon_bg_08.png" />
- <Content Include="res\ic_apps_additional_back.png" />
- <Content Include="res\ic_apps_launcher_pinmark.png" />
- <Content Include="res\ic_apps_launcher_checkmark.png" />
- <Content Include="res\ic_home_menu_addpin_138.png" />
- <Content Include="res\ic_home_menu_addpin_182.png" />
- <Content Include="res\ic_home_menu_apps_138.png" />
- <Content Include="res\ic_home_menu_apps_182.png" />
- <Content Include="res\ic_home_menu_apps_focused.png" />
- <Content Include="res\ic_home_menu_apps_normal.png" />
- <Content Include="res\ic_home_menu_apps_selected.png" />
- <Content Include="res\ic_home_menu_apps_unselected.png" />
- <Content Include="res\ic_home_menu_recent_focused.png" />
- <Content Include="res\ic_home_menu_recent_normal.png" />
- <Content Include="res\ic_home_menu_recent_selected.png" />
- <Content Include="res\ic_home_menu_recent_unselected.png" />
- <Content Include="res\ic_home_menu_settings_focused.png" />
- <Content Include="res\ic_home_menu_settings_normal.png" />
- <Content Include="res\ic_home_menu_settings_selected.png" />
- <Content Include="res\ic_home_menu_settings_unselected.png" />
- <Content Include="res\ic_home_settings_all_138.png" />
- <Content Include="res\ic_home_settings_all_182.png" />
- <Content Include="res\ic_home_settings_brightness_138.png" />
- <Content Include="res\ic_home_settings_brightness_182.png" />
- <Content Include="res\ic_home_settings_color_138.png" />
- <Content Include="res\ic_home_settings_color_182.png" />
- <Content Include="res\ic_home_settings_contrast_138.png" />
- <Content Include="res\ic_home_settings_contrast_182.png" />
- <Content Include="res\ic_home_settings_tint_138.png" />
- <Content Include="res\ic_home_settings_tint_182.png" />
- <Content Include="res\ic_launcher_mediahub_138.png" />
- <Content Include="res\ic_launcher_mediahub_182.png" />
- <Content Include="res\ic_list_thumbnail_gradient_focused.9.png" />
- <Content Include="res\ic_list_thumbnail_gradient_normal.9.png" />
- <Content Include="res\ic_tizen_home_list_addpin_focused.png" />
- <Content Include="res\ic_tizen_home_list_addpin_normal.png" />
- <Content Include="res\ic_tizen_home_list_allapps_focused.png" />
- <Content Include="res\ic_tizen_home_list_allapps_normal.png" />
- <Content Include="res\ic_tizen_home_list_mediahub_focused.png" />
- <Content Include="res\ic_tizen_home_list_mediahub_normal.png" />
- <Content Include="res\ic_tizen_home_menu_addpin_138.png" />
- <Content Include="res\ic_tizen_home_menu_addpin_182.png" />
- <Content Include="res\ic_tizen_home_menu_apps_138.png" />
- <Content Include="res\ic_tizen_home_menu_apps_182.png" />
- <Content Include="res\ic_tizen_option_box_more_dimmed.png" />
- <Content Include="res\ic_tizen_option_box_more_normal.png" />
- <Content Include="res\ic_tizen_option_menu_list_box_check_focused.png" />
- <Content Include="res\ic_tizen_option_menu_list_box_check_normal.png" />
- <Content Include="res\ic_tizen_option_menu_list_box_check_selected.png" />
- <Content Include="res\img_apps_list_dimmed_85.9.png" />
- <Content Include="res\img_apps_list_dimmed_95.9.png" />
- <Content Include="res\img_apps_list_dimmed_check.png" />
- <Content Include="res\img_apps_list_stroke.png" />
- <Content Include="res\img_home_list_dimmed_apps_60.png" />
- <Content Include="res\img_home_list_dimmed_apps_75.png" />
- <Content Include="res\img_home_menu_focused_bg.png" />
- <Content Include="res\img_tizen_apps_list_dimmed.png" />
- <Content Include="res\img_tizen_apps_list_dimmed_check.png" />
- <Content Include="res\img_tizen_home_list_bg_focused.png" />
- <Content Include="res\img_tizen_home_list_bg_normal.png" />
- <Content Include="res\img_tizen_home_list_bg_white_focused.png" />
- <Content Include="res\img_tizen_home_list_bg_white_normal.png" />
- <Content Include="res\img_tizen_home_list_dimmed_recent.png" />
- <Content Include="res\screenshot.png" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- 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.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
- <PropertyGroup>
- <!-- https://github.com/dotnet/corefxlab/tree/master/samples/NetCoreSample and
- https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/target-dotnetcore-with-msbuild
- -->
- <!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two
- properties to any folder that exists to skip the GetReferenceAssemblyPaths task (not target) and
- to prevent it from outputting a warning (MSB3644).
- -->
- <_TargetFrameworkDirectories>$(MSBuildThisFileDirectory)</_TargetFrameworkDirectories>
- <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)</_FullFrameworkReferenceAssemblyPaths>
- <AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences>
- </PropertyGroup>
- <ProjectExtensions>
- <VisualStudio>
- <FlavorProperties GUID="{2F98DAC9-6F16-457B-AED7-D43CAC379341}" Configuration="Debug|Any CPU">
- <ProjectCommonFlavorCfg>
- <excludeXamarinForms>True</excludeXamarinForms>
- </ProjectCommonFlavorCfg>
- </FlavorProperties>
- <FlavorProperties GUID="{2F98DAC9-6F16-457B-AED7-D43CAC379341}" Configuration="Release|Any CPU">
- <ProjectCommonFlavorCfg />
- </FlavorProperties>
- </VisualStudio>
- </ProjectExtensions>
-</Project>
\ No newline at end of file
+++ /dev/null
-{
- "buildOptions": {
- "emitEntryPoint": true,
- "debugType": "portable",
- "platform": "AnyCPU",
- "preserveCompilationContext": true
- },
- "dependencies": {
- "ElmSharp": "1.2.2",
- "Microsoft.NETCore.App": "1.1.2",
- "Tizen.Applications": "1.5.8",
- "Tizen.Content.MediaContent": "1.0.20",
- "Tizen.Multimedia": "1.2.0",
- "Tizen.Multimedia.MediaPlayer": "1.0.2",
- "Tizen.Xamarin.Forms.Extension": "2.3.5-v00015",
- "Xamarin.Forms": "2.4.0-r266-001",
- "Xamarin.Forms.Platform.Tizen": "2.3.5-r256-001"
- },
- "runtimes": {
- "win": {},
- "linux": {}
- },
- "frameworks": {
- "netcoreapp1.0": {
- "imports": [
- "portable-net45+wp80+win81+wpa81",
- "netstandard1.6"
- ]
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-[Unit]
-Description=Home-tv
-Requires=launchpad-process-pool.service
-After=launchpad-process-pool.service
-
-[Service]
-ExecStart=/bin/sh -c -l '/usr/bin/aul_test launch org.tizen.xahome'
+++ /dev/null
-#!/bin/sh
-
-mount -o rw,remount /
-cp org.tizen.home.service /usr/lib/systemd/user/.
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<manifest package="org.tizen.xahome" version="1.0.0" api-version="3.0" xmlns="http://tizen.org/ns/packages">
- <profile name="tv" />
- <ui-application appid="org.tizen.xahome" exec="xahome.exe" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="false" type="dotnet" launch_mode="single">
- <icon>xahome.png</icon>
- <label>Home</label>
- </ui-application>
- <ui-application appid="org.tizen.xaapps" exec="xaapps.exe" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="false" type="dotnet" launch_mode="single">
- <icon>xaapps.png</icon>
- <label>Apps</label>
- </ui-application>
- <shortcut-list />
- <privileges>
- <privilege>http://tizen.org/privilege/bluetooth</privilege>
- <privilege>http://tizen.org/privilege/network.get</privilege>
- <privilege>http://tizen.org/privilege/network.set</privilege>
- <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
- <privilege>http://tizen.org/privilege/packagemanager.admin</privilege>
- <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
- <privilege>http://tizen.org/privilege/externalstorage</privilege>
- <privilege>http://tizen.org/privilege/keygrab</privilege>
- </privileges>
-</manifest>
-
using LibTVRefCommonPortable.Utils;
using System;
using Xamarin.Forms;
-using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
namespace TVHome.Controls
{
WidthRequest = SizeUtils.GetWidthSize(236);
HeightRequest = SizeUtils.GetHeightSize(260);
ButtonTitle.FontSize = SizeUtils.GetFontSize(26);
- ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
+ //ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
PropertyChanged += MainPanelButton_PropertyChanged;
}
* limitations under the License.
*/
-using System;
using LibTVRefCommonPortable.Utils;
+using System;
using Xamarin.Forms;
-using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
namespace TVHome.Controls
{
WidthRequest = SizeUtils.GetWidthSize(182);
HeightRequest = SizeUtils.GetHeightSize(230);
ButtonTitle.FontSize = SizeUtils.GetFontSize(26);
- ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
+ //ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
}
/// <summary>
OnFocusedCommand?.Execute("");
#pragma warning disable CS4014
- ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
+ //ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
ButtonTitle.FadeTo(0.99, 300);
ButtonTitle.TranslateTo(0, selectTransitionHeight, 300);
#pragma warning restore CS4014
public override async void OnUnfocused(object sender, FocusEventArgs e)
{
#pragma warning disable CS4014
- ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
+ //ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
ButtonTitle.FadeTo(0.5, 300);
ButtonTitle.TranslateTo(0, 0, 300);
#pragma warning restore CS4014
using LibTVRefCommonPortable.Utils;
using Xamarin.Forms;
using Tizen.Xamarin.Forms.Extension;
-using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
namespace TVHome.Controls
{
WidthRequest = SizeUtils.GetWidthSize(182);
HeightRequest = SizeUtils.GetHeightSize(230);
ButtonTitle.FontSize = SizeUtils.GetFontSize(26);
- ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
+ //ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
// TODO : make this subscribe when it is in the move mode.
MessagingCenter.Subscribe<App, string>(this, "NavigationKeyPressed", (sender, e) =>
popup = new ContextPopup
{
IsAutoHidingEnabled = true,
- Orientation = ContextPopupOrientation.Vertical,
DirectionPriorities = new ContextPopupDirectionPriorities(ContextPopupDirection.Down, ContextPopupDirection.Up, ContextPopupDirection.Right, ContextPopupDirection.Left)
};
OnFocusedCommand?.Execute("");
#pragma warning disable CS4014
- ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
+ //ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
ButtonTitle.FadeTo(0.8, 300);
ButtonTitle.TranslateTo(0, selectTransitionHeight, 300);
#pragma warning restore CS4014
PanelButtonState = PanelButtonState.Show;
#pragma warning disable CS4014
- ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
+ //ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
ButtonTitle.FadeTo(0.6, 300);
ButtonTitle.TranslateTo(0, 0, 300);
#pragma warning restore CS4014
using LibTVRefCommonPortable.Utils;
using System;
using Xamarin.Forms;
-using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
namespace TVHome.Controls
{
WidthRequest = SizeUtils.GetWidthSize(182);
HeightRequest = SizeUtils.GetHeightSize(230);
ButtonTitle.FontSize = SizeUtils.GetFontSize(26);
- ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
+ //ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
}
/// <summary>
OnFocusedCommand?.Execute("");
#pragma warning disable CS4014
- ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
+ //ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
ButtonTitle.FadeTo(0.99, 300);
ButtonTitle.TranslateTo(0, selectTransitionHeight, 300);
#pragma warning restore CS4014
public override async void OnUnfocused(object sender, FocusEventArgs e)
{
#pragma warning disable CS4014
- ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
+ //ButtonTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
ButtonTitle.FadeTo(0.5, 300);
ButtonTitle.TranslateTo(0, 0, 300);
#pragma warning restore CS4014
using System;
using Tizen.Xamarin.Forms.Extension;
using Xamarin.Forms;
-using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
namespace TVHome.Controls
{
WidthRequest = SizeUtils.GetWidthSize(320);
HeightRequest = SizeUtils.GetHeightSize(180);
ThumbnailTitle.FontSize = SizeUtils.GetFontSize(26);
- ThumbnailTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
+ //ThumbnailTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
}
#pragma warning disable CS4014
ThumbnailGradient.Source = "ic_list_thumbnail_gradient_focused.9.png";
- ThumbnailTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
+ //ThumbnailTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Medium);
//ThumbnailTitle.FadeTo(0.8, 300);
#pragma warning restore CS4014
await this.ScaleTo(1.2, 300);
#pragma warning disable CS4014
//ThumbnailTitle.FadeTo(0.3, 300);
ThumbnailGradient.Source = "ic_list_thumbnail_gradient_normal.9.png";
- ThumbnailTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
+ //ThumbnailTitle.On<Xamarin.Forms.PlatformConfiguration.Tizen>().SetFontWeight(FontWeight.Normal);
#pragma warning restore CS4014
await this.ScaleTo(1.0, 300);
}
popup = new ContextPopup
{
IsAutoHidingEnabled = true,
- Orientation = ContextPopupOrientation.Vertical,
DirectionPriorities = new ContextPopupDirectionPriorities(ContextPopupDirection.Down, ContextPopupDirection.Up, ContextPopupDirection.Right, ContextPopupDirection.Left)
};
+++ /dev/null
-using System.Resources;\r
-using System.Reflection;\r
-using System.Runtime.CompilerServices;\r
-using System.Runtime.InteropServices;\r
-\r
-// General Information about an assembly is controlled through the following\r
-// set of attributes. Change these attribute values to modify the information\r
-// associated with an assembly.\r
-[assembly: AssemblyTitle("TVHome")]\r
-[assembly: AssemblyDescription("")]\r
-[assembly: AssemblyConfiguration("")]\r
-[assembly: AssemblyCompany("")]\r
-[assembly: AssemblyProduct("TVHome")]\r
-[assembly: AssemblyCopyright("Copyright © 2017")]\r
-[assembly: AssemblyTrademark("")]\r
-[assembly: AssemblyCulture("")]\r
-\r
-// Version information for an assembly consists of the following four values:\r
-//\r
-// Major Version\r
-// Minor Version\r
-// Build Number\r
-// Revision\r
-//\r
-// You can specify all the values or you can default the Build and Revision Numbers\r
-// by using the '*' as shown below:\r
-// [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("1.0.0.0")]\r
-[assembly: AssemblyFileVersion("1.0.0.0")]\r
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+
<PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <ProjectGuid>{54DD6673-7E64-48E6-A008-4D455E19E017}</ProjectGuid>
- <OutputType>Library</OutputType>
- <RootNamespace>TVHome</RootNamespace>
- <AssemblyName>TVHome</AssemblyName>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>
- <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
- <NuGetPackageImportStamp>
- </NuGetPackageImportStamp>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>portable</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <ConsolePause>false</ConsolePause>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>portable</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <ConsolePause>false</ConsolePause>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="Controls\MainPanelButton.xaml.cs">
- <DependentUpon>MainPanelButton.xaml</DependentUpon>
- </Compile>
- <Compile Include="Controls\NinePatchImage.xaml.cs">
- <DependentUpon>NinePatchImage.xaml</DependentUpon>
- </Compile>
- <Compile Include="Controls\PanelButton.cs" />
- <Compile Include="Controls\SubPanelAllAppsButton.xaml.cs">
- <DependentUpon>SubPanelAllAppsButton.xaml</DependentUpon>
- </Compile>
- <Compile Include="Controls\SubPanelButton.xaml.cs">
- <DependentUpon>SubPanelButton.xaml</DependentUpon>
- </Compile>
- <Compile Include="Controls\SubPanelSettingButton.xaml.cs">
- <DependentUpon>SubPanelSettingButton.xaml</DependentUpon>
- </Compile>
- <Compile Include="Controls\SubPanelThumbnailButton.xaml.cs">
- <DependentUpon>SubPanelThumbnailButton.xaml</DependentUpon>
- </Compile>
- <Compile Include="TVHome.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="ViewModels\MainPanelViewModel.cs" />
- <Compile Include="ViewModels\SettingsViewModel.cs" />
- <Compile Include="ViewModels\AppListViewModel.cs" />
- <Compile Include="ViewModels\RecentListViewModel.cs" />
- <Compile Include="ViewModels\MainPageViewModel.cs" />
- <Compile Include="Views\MainPage.xaml.cs">
- <DependentUpon>MainPage.xaml</DependentUpon>
- </Compile>
- <Compile Include="Views\MainPanel.xaml.cs">
- <DependentUpon>MainPanel.xaml</DependentUpon>
- </Compile>
- <Compile Include="Views\Panel.cs" />
- <Compile Include="Views\SubPanel.xaml.cs">
- <DependentUpon>SubPanel.xaml</DependentUpon>
- </Compile>
- <Compile Include="Views\SubThumbnailPanel.xaml.cs">
- <DependentUpon>SubThumbnailPanel.xaml</DependentUpon>
- </Compile>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Views\MainPanel.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Controls\MainPanelButton.xaml">
- <SubType>Designer</SubType>
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Controls\SubPanelButton.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Controls\SubPanelThumbnailButton.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Views\MainPage.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Views\SubPanel.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Views\SubThumbnailPanel.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Controls\SubPanelAllAppsButton.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\LibTVRefCommonPortable\LibTVRefCommonPortable.csproj">
- <Project>{67f9d3a8-f71e-4428-913f-c37ae82cdb24}</Project>
- <Name>LibTVRefCommonPortable</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Controls\SubPanelSettingButton.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Controls\NinePatchImage.xaml">
- <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
+
<ItemGroup>
- <PackageReference Include="Tizen.Xamarin.Forms.Extension">
- <Version>2.3.5-v00015</Version>
- </PackageReference>
- <PackageReference Include="Xamarin.Forms">
- <Version>2.4.0-r266-001</Version>
- </PackageReference>
+ <PackageReference Include="Tizen.Xamarin.Forms.Extension" Version="2.4.0-v00005" />
+ <PackageReference Include="Xamarin.Forms" Version="2.4.0.266-pre1" />
</ItemGroup>
+
<ItemGroup>
- <None Include="packages.config" />
+ <ProjectReference Include="..\..\LibCommon.Shared\LibCommon.Shared.csproj" />
</ItemGroup>
- <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
- <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
- </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.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
\ No newline at end of file
+</Project>
using LibTVRefCommonPortable.Utils;
using Xamarin.Forms;
using TVHome.ViewModels;
-using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
namespace TVHome.Views
{
Button appsMainPanelButton = PageMainPanel.GetButtonToFocusing(1);
Button settingMainPanelButton = PageMainPanel.GetButtonToFocusing(2);
- recentMainPanelButton.On<Tizen>().SetNextFocusLeftView(recentMainPanelButton);
- recentMainPanelButton.On<Tizen>().SetNextFocusRightView(appsMainPanelButton);
- appsMainPanelButton.On<Tizen>().SetNextFocusLeftView(recentMainPanelButton);
- appsMainPanelButton.On<Tizen>().SetNextFocusRightView(settingMainPanelButton);
- settingMainPanelButton.On<Tizen>().SetNextFocusLeftView(appsMainPanelButton);
- settingMainPanelButton.On<Tizen>().SetNextFocusRightView(settingMainPanelButton);
+ //recentMainPanelButton.On<Tizen>().SetNextFocusLeftView(recentMainPanelButton);
+ //recentMainPanelButton.On<Tizen>().SetNextFocusRightView(appsMainPanelButton);
+ //appsMainPanelButton.On<Tizen>().SetNextFocusLeftView(recentMainPanelButton);
+ //appsMainPanelButton.On<Tizen>().SetNextFocusRightView(settingMainPanelButton);
+ //settingMainPanelButton.On<Tizen>().SetNextFocusLeftView(appsMainPanelButton);
+ //settingMainPanelButton.On<Tizen>().SetNextFocusRightView(settingMainPanelButton);
}
/// <summary>
if (recentSubPanelButtons.Count > 1)
{
- recentMainPanelButton.On<Tizen>().SetNextFocusDownView(recentSubPanelButtons[0].FindByName<Button>("ButtonFocusArea"));
+ //recentMainPanelButton.On<Tizen>().SetNextFocusDownView(recentSubPanelButtons[0].FindByName<Button>("ButtonFocusArea"));
}
foreach (var item in recentSubPanelButtons)
{
- item.FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusUpView(recentMainPanelButton);
+ //item.FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusUpView(recentMainPanelButton);
}
for (var i = 0; i < recentSubPanelButtons.Count; i++)
{
if (i != 0)
{
- recentSubPanelButtons[i].FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusLeftView(recentSubPanelButtons[i - 1].FindByName<Button>("ButtonFocusArea"));
+ //recentSubPanelButtons[i].FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusLeftView(recentSubPanelButtons[i - 1].FindByName<Button>("ButtonFocusArea"));
}
if (i != recentSubPanelButtons.Count - 1)
{
- recentSubPanelButtons[i].FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusRightView(recentSubPanelButtons[i + 1].FindByName<Button>("ButtonFocusArea"));
+ //recentSubPanelButtons[i].FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusRightView(recentSubPanelButtons[i + 1].FindByName<Button>("ButtonFocusArea"));
}
}
}
if (appsSubPanelButtons.Count > 2)
{
- appsMainPanelButton.On<Tizen>().SetNextFocusDownView(appsSubPanelButtons[1].FindByName<Button>("ButtonFocusArea"));
+ //appsMainPanelButton.On<Tizen>().SetNextFocusDownView(appsSubPanelButtons[1].FindByName<Button>("ButtonFocusArea"));
}
foreach (var item in appsSubPanelButtons)
{
- item.FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusUpView(appsMainPanelButton);
+ //item.FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusUpView(appsMainPanelButton);
}
for (var i = 0; i < appsSubPanelButtons.Count; i++)
{
if (i != 0)
{
- appsSubPanelButtons[i].FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusLeftView(appsSubPanelButtons[i - 1].FindByName<Button>("ButtonFocusArea"));
+ //appsSubPanelButtons[i].FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusLeftView(appsSubPanelButtons[i - 1].FindByName<Button>("ButtonFocusArea"));
}
if (i != appsSubPanelButtons.Count - 1)
{
- appsSubPanelButtons[i].FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusRightView(appsSubPanelButtons[i + 1].FindByName<Button>("ButtonFocusArea"));
+ //appsSubPanelButtons[i].FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusRightView(appsSubPanelButtons[i + 1].FindByName<Button>("ButtonFocusArea"));
}
}
}
if (settingSubPanelButtons.Count > 2)
{
- settingMainPanelButton.On<Tizen>().SetNextFocusDownView(settingSubPanelButtons[1].FindByName<Button>("ButtonFocusArea"));
+ //settingMainPanelButton.On<Tizen>().SetNextFocusDownView(settingSubPanelButtons[1].FindByName<Button>("ButtonFocusArea"));
}
foreach (var item in settingSubPanelButtons)
{
- item.FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusUpView(settingMainPanelButton);
+ //item.FindByName<Button>("ButtonFocusArea").On<Tizen>().SetNextFocusUpView(settingMainPanelButton);
}
}
using System.Threading.Tasks;
using LibTVRefCommonPortable.Utils;
using System.Collections.Generic;
-using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
namespace TVHome.Views
{
SetPanelDisplay();
PropertyChanged += OnPropertyChanged;
- NoContentInfoText.On<Tizen>().SetFontWeight(FontWeight.Light);
+ //NoContentInfoText.On<Tizen>().SetFontWeight(FontWeight.Light);
ButtonList = new List<PanelButton>();
}
--- /dev/null
+{
+ "runtimeTarget": {
+ "name": ".NETStandard,Version=v2.0/",
+ "signature": "cf5149bdff09bd8db6df7773b79e5a86c601ccd4"
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETStandard,Version=v2.0": {},
+ ".NETStandard,Version=v2.0/": {
+ "TVHome/1.0.0": {
+ "dependencies": {
+ "LibCommon.Shared": "1.0.0",
+ "NETStandard.Library": "2.0.0",
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "TVHome.dll": {}
+ }
+ },
+ "Microsoft.NETCore.Platforms/1.1.0": {},
+ "NETStandard.Library/2.0.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0"
+ }
+ },
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "dependencies": {
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "lib/netstandard1.0/Tizen.Xamarin.Forms.Extension.dll": {}
+ }
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "runtime": {
+ "lib/netstandard1.0/Xamarin.Forms.Core.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Platform.dll": {},
+ "lib/netstandard1.0/Xamarin.Forms.Xaml.dll": {}
+ }
+ },
+ "LibCommon.Shared/1.0.0": {
+ "dependencies": {
+ "Tizen.Xamarin.Forms.Extension": "2.4.0-v00005",
+ "Xamarin.Forms": "2.4.0.266-pre1"
+ },
+ "runtime": {
+ "LibCommon.Shared.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "TVHome/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Microsoft.NETCore.Platforms/1.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
+ "path": "microsoft.netcore.platforms/1.1.0",
+ "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
+ },
+ "NETStandard.Library/2.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYmBPA==",
+ "path": "netstandard.library/2.0.0",
+ "hashPath": "netstandard.library.2.0.0.nupkg.sha512"
+ },
+ "Tizen.Xamarin.Forms.Extension/2.4.0-v00005": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-MKUamVt5XloZ/JziyOXLdbahn7T0LDQDJGUt3ynt0iSia4aLpZLOua6/iypBhnC79FgMaNfUA7APjVfjh3NLTg==",
+ "path": "tizen.xamarin.forms.extension/2.4.0-v00005",
+ "hashPath": "tizen.xamarin.forms.extension.2.4.0-v00005.nupkg.sha512"
+ },
+ "Xamarin.Forms/2.4.0.266-pre1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-pMu+b01vdH1ul5EJo1opQjEcwisWT35DdZO6EuR9HNKfY1dWyKmAlWgRdGUtjtdbhjOAtCOQUxI7F3x4hvV8KA==",
+ "path": "xamarin.forms/2.4.0.266-pre1",
+ "hashPath": "xamarin.forms.2.4.0.266-pre1.nupkg.sha512"
+ },
+ "LibCommon.Shared/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="Tizen.Xamarin.Forms.Extension" version="2.3.5-v00010" targetFramework="portable45-net45+win8+wp8+wpa81" />
- <package id="Xamarin.Forms" version="2.3.5-r233-012" targetFramework="portable45-net45+win8+wp8+wpa81" />
-</packages>
\ No newline at end of file
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26430.12
+VisualStudioVersion = 15.0.26730.10
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVHome", "TVHome\TVHome\TVHome.csproj", "{54DD6673-7E64-48E6-A008-4D455E19E017}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVHome.Tizen.TV", "TVHome\TVHome.Tizen.TV\TVHome.Tizen.TV.csproj", "{8838ED5F-7AEB-4449-ACE9-5DC57CA207FC}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVHome.TizenTV", "TVHome\TVHome.TizenTV\TVHome.TizenTV.csproj", "{CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}"
- ProjectSection(ProjectDependencies) = postProject
- {FD8C0EF4-6CEA-4421-85B7-7AC8592738C6} = {FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}
- EndProjectSection
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVApps.Tizen.TV", "TVApps\TVApps.Tizen.TV\TVApps.Tizen.TV.csproj", "{81D115A5-7BD0-4697-B6FE-43AC31AE71A7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVApps", "TVApps\TVApps\TVApps.csproj", "{FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibCommon.Shared", "LibCommon.Shared\LibCommon.Shared.csproj", "{32899AD0-BF4F-4C43-BD35-4A7B2DEC3ECE}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVApps.TizenTV", "TVApps\TVApps.TizenTV\TVApps.TizenTV.csproj", "{7E341BF5-B7BD-4532-9D4A-AA89537B525E}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibCommon.Tizen", "LibCommon.Tizen\LibCommon.Tizen.csproj", "{8D3E259E-CD93-4407-B8BF-EF20C1A2C146}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibTVRefCommonPortable", "LibTVRefCommonPortable\LibTVRefCommonPortable.csproj", "{67F9D3A8-F71E-4428-913F-C37AE82CDB24}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVHome", "TVHome\TVHome\TVHome.csproj", "{B91BC6BD-192B-46C1-880D-D6A2B913BE7A}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibTVRefCommonTizen", "LibTVRefCommonTizen\LibTVRefCommonTizen.csproj", "{C558D279-897E-45E1-A10A-DECD788770F4}"
- ProjectSection(ProjectDependencies) = postProject
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24} = {67F9D3A8-F71E-4428-913F-C37AE82CDB24}
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HomeUnitTest", "HomeUnitTest\HomeUnitTest.csproj", "{1F2DB8A0-7D1E-4BA3-BF27-335D033C572C}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVApps", "TVApps\TVApps\TVApps.csproj", "{7785D009-F49A-4519-AEE7-6CF6A3237BCB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {54DD6673-7E64-48E6-A008-4D455E19E017}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {54DD6673-7E64-48E6-A008-4D455E19E017}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {54DD6673-7E64-48E6-A008-4D455E19E017}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {54DD6673-7E64-48E6-A008-4D455E19E017}.Release|Any CPU.Build.0 = Release|Any CPU
- {CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CE03A1DC-A3E0-41DD-B06C-92C19E8D2A8F}.Release|Any CPU.Build.0 = Release|Any CPU
- {FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FD8C0EF4-6CEA-4421-85B7-7AC8592738C6}.Release|Any CPU.Build.0 = Release|Any CPU
- {7E341BF5-B7BD-4532-9D4A-AA89537B525E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7E341BF5-B7BD-4532-9D4A-AA89537B525E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7E341BF5-B7BD-4532-9D4A-AA89537B525E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7E341BF5-B7BD-4532-9D4A-AA89537B525E}.Release|Any CPU.Build.0 = Release|Any CPU
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Any CPU.Build.0 = Release|Any CPU
- {C558D279-897E-45E1-A10A-DECD788770F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C558D279-897E-45E1-A10A-DECD788770F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C558D279-897E-45E1-A10A-DECD788770F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C558D279-897E-45E1-A10A-DECD788770F4}.Release|Any CPU.Build.0 = Release|Any CPU
- {1F2DB8A0-7D1E-4BA3-BF27-335D033C572C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1F2DB8A0-7D1E-4BA3-BF27-335D033C572C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1F2DB8A0-7D1E-4BA3-BF27-335D033C572C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1F2DB8A0-7D1E-4BA3-BF27-335D033C572C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8838ED5F-7AEB-4449-ACE9-5DC57CA207FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8838ED5F-7AEB-4449-ACE9-5DC57CA207FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8838ED5F-7AEB-4449-ACE9-5DC57CA207FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8838ED5F-7AEB-4449-ACE9-5DC57CA207FC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {81D115A5-7BD0-4697-B6FE-43AC31AE71A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {81D115A5-7BD0-4697-B6FE-43AC31AE71A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {81D115A5-7BD0-4697-B6FE-43AC31AE71A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {81D115A5-7BD0-4697-B6FE-43AC31AE71A7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {32899AD0-BF4F-4C43-BD35-4A7B2DEC3ECE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {32899AD0-BF4F-4C43-BD35-4A7B2DEC3ECE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {32899AD0-BF4F-4C43-BD35-4A7B2DEC3ECE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {32899AD0-BF4F-4C43-BD35-4A7B2DEC3ECE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8D3E259E-CD93-4407-B8BF-EF20C1A2C146}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8D3E259E-CD93-4407-B8BF-EF20C1A2C146}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8D3E259E-CD93-4407-B8BF-EF20C1A2C146}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8D3E259E-CD93-4407-B8BF-EF20C1A2C146}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B91BC6BD-192B-46C1-880D-D6A2B913BE7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B91BC6BD-192B-46C1-880D-D6A2B913BE7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B91BC6BD-192B-46C1-880D-D6A2B913BE7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B91BC6BD-192B-46C1-880D-D6A2B913BE7A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7785D009-F49A-4519-AEE7-6CF6A3237BCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7785D009-F49A-4519-AEE7-6CF6A3237BCB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7785D009-F49A-4519-AEE7-6CF6A3237BCB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7785D009-F49A-4519-AEE7-6CF6A3237BCB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {14D6283D-9E94-4FCC-9E0F-FCE8F168C9B4}
+ EndGlobalSection
EndGlobal
+++ /dev/null
-[Unit]
-Description=This path will tell you that home is ready to launch
-
-[Path]
-PathExists=/run/.wm_ready
+++ /dev/null
-[Unit]
-Description=TV Home
-Requires=launchpad-process-pool.service
-After=launchpad-process-pool.service
-
-[Service]
-ExecStart=/bin/sh -c -l '/usr/bin/aul_test launch org.tizen.xahome'
+++ /dev/null
-Name: org.tizen.xahome
-Summary: TV home application
-Version: 1.0.0
-Release: 1
-Group: Applications
-License: Flora-1.1
-Source0: %{name}-%{version}.tar.gz
-Source1: %{name}.service
-Source2: %{name}.path
-
-BuildRequires: pkgconfig(libtzplatform-config)
-Requires(post): /usr/bin/tpk-backend
-
-%define _sysuserdir systemd/user
-%define _servicedir systemd/user/default.target.wants
-
-%define internal_name org.tizen.xahome
-%define preload_tpk_path %{TZ_SYS_RO_APP}/.preload-tpk
-
-%define build_mode %{nil}
-
-%ifarch arm armv7l
-%define target arm
-%endif
-%ifarch aarch64
-%define target aarch64
-%endif
-%ifarch x86_64
-%define target x86_64
-%endif
-%ifarch i386 i486 i586 i686
-%define target i386
-%endif
-%description
-This is a container package which have preload TPK files
-
-%prep
-%setup -q
-
-%build
-
-%install
-rm -rf %{buildroot}
-mkdir -p %{buildroot}%{preload_tpk_path}
-install TVHome/TVHome.TizenTV/bin/Debug/TVHome.TizenTV.tpk %{buildroot}%{preload_tpk_path}/
-install --directory %{buildroot}%{_prefix}/lib/%{_servicedir}
-install -m 0644 %{SOURCE1} %{buildroot}%{_prefix}/lib/%{_sysuserdir}
-install -m 0644 %{SOURCE2} %{buildroot}%{_prefix}/lib/%{_sysuserdir}
-ln -sf ../%{name}.path %{buildroot}%{_prefix}/lib/%{_servicedir}
-
-%post
-chsmack %{_prefix}/lib/%{_sysuserdir}/%{name}.service -a "_"
-chsmack %{_prefix}/lib/%{_sysuserdir}/%{name}.path -a "_"
-chsmack %{_prefix}/lib/%{_servicedir}/%{name}.path -a "_"
-
-%files
-%defattr(-,root,root,-)
-%{preload_tpk_path}/*.tpk
-%{_prefix}/lib/%{_sysuserdir}/%{name}.service
-%{_prefix}/lib/%{_sysuserdir}/%{name}.path
-%{_prefix}/lib/%{_servicedir}/%{name}.path