summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChulSeung Kim <charles0.kim@samsung.com>2017-06-05 16:27:18 +0900
committerChulSeung Kim <charles0.kim@samsung.com>2017-06-08 18:34:56 +0900
commitb75d1fd65ffa45a63398fe401157504e035d5085 (patch)
treecd2e363d38621ad78735828476f262a34ee508ae
parent262f03fb828c54f6d2c70bc4c0bfb1943d1f9499 (diff)
downloadhome-b75d1fd65ffa45a63398fe401157504e035d5085.tar.gz
home-b75d1fd65ffa45a63398fe401157504e035d5085.tar.bz2
home-b75d1fd65ffa45a63398fe401157504e035d5085.zip
Add unit test case for RecentShortcutController.
Remove meaningless TODOs Change-Id: I157ddce45ede7ac4967add7ba95e4c9986917e4f
-rw-r--r--HomeUnitTest/HomeUnitTest.csproj84
-rw-r--r--HomeUnitTest/Properties/AssemblyInfo.cs21
-rw-r--r--HomeUnitTest/RecentTesting.cs82
-rw-r--r--HomeUnitTest/Settings.StyleCop722
-rw-r--r--HomeUnitTest/packages.config6
-rw-r--r--LibTVRefCommonPortable/DataModels/CommandAction.cs8
-rw-r--r--LibTVRefCommonPortable/DataModels/ShortcutInfo.cs10
-rwxr-xr-xLibTVRefCommonPortable/LibTVRefCommonPortable.csproj18
-rwxr-xr-xLibTVRefCommonPortable/Models/AppShortcutController.cs40
-rw-r--r--LibTVRefCommonPortable/Models/ManagedApps.cs9
-rwxr-xr-xLibTVRefCommonPortable/Models/RecentShortcutController.cs159
-rw-r--r--LibTVRefCommonPortable/Utils/AppShortcutStorage.cs2
-rw-r--r--LibTVRefCommonPortable/Utils/ApplicationManagerUtils.cs219
-rw-r--r--LibTVRefCommonPortable/Utils/DebuggingUtils.cs13
-rw-r--r--LibTVRefCommonPortable/Utils/FileSystemUtils.cs243
-rw-r--r--LibTVRefCommonPortable/Utils/IPackageManager.cs4
-rwxr-xr-xLibTVRefCommonPortable/Utils/IPlatformNotification.cs4
-rw-r--r--LibTVRefCommonPortable/Utils/MediaContentUtils.cs141
-rw-r--r--LibTVRefCommonPortable/Utils/PackageManagerUtils.cs2
-rwxr-xr-xLibTVRefCommonPortable/Utils/RecentShortcutStorage.cs163
-rw-r--r--LibTVRefCommonPortable/Utils/SizeUtils.cs12
-rwxr-xr-xLibTVRefCommonPortable/packages.config4
-rw-r--r--LibTVRefCommonTizen/LibTVRefCommonTizen.nuget.targets4
-rw-r--r--LibTVRefCommonTizen/LibTVRefCommonTizen.project.json14
-rw-r--r--LibTVRefCommonTizen/Ports/AppControlPort.cs11
-rwxr-xr-xLibTVRefCommonTizen/Ports/ApplicationManagerPort.cs6
-rw-r--r--LibTVRefCommonTizen/Ports/PackageManagerPort.cs14
-rw-r--r--TVApps/TVApps.TizenTV/TVApps.TizenTV.nuget.targets4
-rw-r--r--TVApps/TVApps.TizenTV/TVApps.TizenTV.project.json10
-rwxr-xr-xTVApps/TVApps/Controls/AppItemCell.xaml.cs1
-rwxr-xr-xTVApps/TVApps/Controls/AppListView.xaml.cs2
-rwxr-xr-xTVApps/TVApps/TVApps.csproj16
-rwxr-xr-xTVApps/TVApps/ViewModels/AppsHolder.cs69
-rwxr-xr-xTVApps/TVApps/ViewModels/MainPageViewModel.cs3
-rwxr-xr-xTVApps/TVApps/Views/FooterNormalStatus.xaml.cs1
-rwxr-xr-xTVApps/TVApps/Views/MainPage.xaml.cs1
-rwxr-xr-xTVApps/TVApps/packages.config4
-rw-r--r--TVHome/TVHome.TizenTV/Sniper.cs600
-rw-r--r--TVHome/TVHome.TizenTV/SniperInterOp.cs2
-rwxr-xr-xTVHome/TVHome.TizenTV/TVHome.TizenTV.csproj21
-rw-r--r--TVHome/TVHome.TizenTV/TVHome.TizenTV.nuget.targets4
-rwxr-xr-xTVHome/TVHome.TizenTV/TVHome.TizenTV.project.json10
-rw-r--r--TVHome/TVHome.TizenTV/res/org.tizen.example.Butterfly.Tizen.pngbin71615 -> 0 bytes
-rw-r--r--TVHome/TVHome.TizenTV/res/org.tizen.example.Calculator.Tizen.pngbin46254 -> 0 bytes
-rw-r--r--TVHome/TVHome.TizenTV/res/org.tizen.example.HomeFitness.Tizen.pngbin71615 -> 0 bytes
-rw-r--r--TVHome/TVHome.TizenTV/res/org.tizen.example.Sports.Tizen.pngbin46254 -> 0 bytes
-rw-r--r--TVHome/TVHome.TizenTV/res/org.tizen.example.Toda.Tizen.pngbin46254 -> 0 bytes
-rw-r--r--TVHome/TVHome.TizenTV/res/org.tizen.example.YouTube.Tizen.pngbin71615 -> 0 bytes
-rwxr-xr-xTVHome/TVHome/TVHome.csproj16
-rwxr-xr-xTVHome/TVHome/ViewModels/MainPageViewModel.cs5
-rwxr-xr-xTVHome/TVHome/packages.config4
-rw-r--r--TVHomeApps.sln10
52 files changed, 2072 insertions, 726 deletions
diff --git a/HomeUnitTest/HomeUnitTest.csproj b/HomeUnitTest/HomeUnitTest.csproj
new file mode 100644
index 0000000..7bf1694
--- /dev/null
+++ b/HomeUnitTest/HomeUnitTest.csproj
@@ -0,0 +1,84 @@
+<?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;_TEST_</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="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
+ </Reference>
+ <Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="RecentTesting.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">
+ <PropertyGroup>
+ <ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props'))" />
+ <Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets'))" />
+ <Error Condition="!Exists('..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
+ </Target>
+ <Import Project="..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets')" />
+ <Import Project="..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
+</Project> \ No newline at end of file
diff --git a/HomeUnitTest/Properties/AssemblyInfo.cs b/HomeUnitTest/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..695ffc8
--- /dev/null
+++ b/HomeUnitTest/Properties/AssemblyInfo.cs
@@ -0,0 +1,21 @@
+// <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")]
diff --git a/HomeUnitTest/RecentTesting.cs b/HomeUnitTest/RecentTesting.cs
new file mode 100644
index 0000000..50f90b0
--- /dev/null
+++ b/HomeUnitTest/RecentTesting.cs
@@ -0,0 +1,82 @@
+/*
+ * 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
+{
+ [TestClass]
+ public class RecentTesting
+ {
+ public RecentTesting()
+ {
+
+ }
+
+ [TestMethod]
+ public void GetListTest()
+ {
+ RecentShortcutController recentShortcutController = new RecentShortcutController();
+
+ var recents = recentShortcutController.GetList();
+
+ // 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;
+ }
+
+ // 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);
+ }
+ }
+
+ // Test Sample Recent is consist of App and Media types.
+ if (isAllMedias || isAllApps)
+ {
+ Assert.Fail("Invalid Recent list, All Media({0}), All Apps({1})", isAllMedias, isAllApps);
+ }
+ }
+ }
+}
diff --git a/HomeUnitTest/Settings.StyleCop b/HomeUnitTest/Settings.StyleCop
new file mode 100644
index 0000000..837530c
--- /dev/null
+++ b/HomeUnitTest/Settings.StyleCop
@@ -0,0 +1,722 @@
+<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
diff --git a/HomeUnitTest/packages.config b/HomeUnitTest/packages.config
new file mode 100644
index 0000000..dab081a
--- /dev/null
+++ b/HomeUnitTest/packages.config
@@ -0,0 +1,6 @@
+<?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-008" targetFramework="net461" />
+</packages> \ No newline at end of file
diff --git a/LibTVRefCommonPortable/DataModels/CommandAction.cs b/LibTVRefCommonPortable/DataModels/CommandAction.cs
index 8ad9efa..40585c9 100644
--- a/LibTVRefCommonPortable/DataModels/CommandAction.cs
+++ b/LibTVRefCommonPortable/DataModels/CommandAction.cs
@@ -14,7 +14,9 @@
* limitations under the License.
*/
+using System;
using System.Windows.Input;
+using Xamarin.Forms;
namespace LibTVRefCommonPortable.DataModels
{
@@ -29,9 +31,9 @@ namespace LibTVRefCommonPortable.DataModels
public string NextStateDescription { get; set; }
/// <summary>
- /// A Command.
+ /// A Command to be executed
/// </summary>
- public ICommand Command { get; set; }
+ public event EventHandler<String> Command;
/// <summary>
/// A Command parameter.
@@ -44,7 +46,7 @@ namespace LibTVRefCommonPortable.DataModels
/// <returns>A next statue of a Shortcut.</returns>
public string Execute()
{
- Command.Execute(CommandParameter);
+ Command?.Invoke(this, CommandParameter);
return NextStateDescription;
}
}
diff --git a/LibTVRefCommonPortable/DataModels/ShortcutInfo.cs b/LibTVRefCommonPortable/DataModels/ShortcutInfo.cs
index b110f36..00854f6 100644
--- a/LibTVRefCommonPortable/DataModels/ShortcutInfo.cs
+++ b/LibTVRefCommonPortable/DataModels/ShortcutInfo.cs
@@ -87,16 +87,6 @@ namespace LibTVRefCommonPortable.DataModels
return true;
}
- // TODO : remove, for debugging purpose
- foreach (var item in stateDescriptions)
- {
- if (item.Value.Equals(CurrentStateDescription))
- {
- //DebuggingUtils.Dbg("[" + item.Key + "] => [" + state + "]");
- break;
- }
- }
-
CurrentStateDescription = stateDescriptions[state];
OnPropertyChanged("CurrentStateDescription");
return true;
diff --git a/LibTVRefCommonPortable/LibTVRefCommonPortable.csproj b/LibTVRefCommonPortable/LibTVRefCommonPortable.csproj
index 52a8703..f59578f 100755
--- a/LibTVRefCommonPortable/LibTVRefCommonPortable.csproj
+++ b/LibTVRefCommonPortable/LibTVRefCommonPortable.csproj
@@ -54,8 +54,10 @@
<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\ISystemSettings.cs" />
+ <Compile Include="Utils\MediaContentUtils.cs" />
<Compile Include="Utils\SizeUtils.cs" />
<Compile Include="Utils\DateUtils.cs" />
<Compile Include="Utils\DebuggingUtils.cs" />
@@ -75,32 +77,28 @@
</ItemGroup>
<ItemGroup>
<Reference Include="Tizen.Xamarin.Forms.Extension, Version=0.0.1.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\packages\Tizen.Xamarin.Forms.Extension.2.3.5-r233-002\lib\portable-win+net45+wp80+win81+wpa81\Tizen.Xamarin.Forms.Extension.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\packages\Tizen.Xamarin.Forms.Extension.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81\Tizen.Xamarin.Forms.Extension.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\packages\Xamarin.Forms.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\packages\Xamarin.Forms.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\packages\Xamarin.Forms.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
- <Import Project="..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
+ <Import Project="..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
- <Error Condition="!Exists('..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
+ <Error Condition="!Exists('..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/LibTVRefCommonPortable/Models/AppShortcutController.cs b/LibTVRefCommonPortable/Models/AppShortcutController.cs
index db256bb..21d63de 100755
--- a/LibTVRefCommonPortable/Models/AppShortcutController.cs
+++ b/LibTVRefCommonPortable/Models/AppShortcutController.cs
@@ -16,7 +16,6 @@
using System;
using System.Collections.Generic;
-using Xamarin.Forms;
using LibTVRefCommonPortable.DataModels;
using LibTVRefCommonPortable.Utils;
@@ -47,7 +46,7 @@ namespace LibTVRefCommonPortable.Models
{
List<AppShortcutInfo> appShortcutInfoList = new List<AppShortcutInfo>();
- var installedAppList = await ApplicationManagerUtils.GetAllInstalledApplication();
+ var installedAppList = await ApplicationManagerUtils.Instance.GetAllInstalledApplication();
foreach (KeyValuePair<string, string[]> item in installedAppList)
{
@@ -74,7 +73,7 @@ namespace LibTVRefCommonPortable.Models
var appShortcutInfo = new AppShortcutInfo()
{
- IsRemovable = ApplicationManagerUtils.GetAppInfoRemovable(item.Key),
+ IsRemovable = ApplicationManagerUtils.Instance.GetAppInfoRemovable(item.Key),
Installed = new DateTime(longDate),
};
@@ -173,6 +172,17 @@ namespace LibTVRefCommonPortable.Models
/// <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 =
@@ -183,15 +193,7 @@ namespace LibTVRefCommonPortable.Models
{
Label = "Add pin",
IconPath = "ic_home_menu_addpin_138.png",
- Action = new CommandAction()
- {
- NextStateDescription = "default",
- Command = new Command<string>((key) =>
- {
- AppControlUtils.SendAddAppRequestToApps();
- }),
- CommandParameter = "",
- }
+ Action = addPinCommandAction,
}
},
{
@@ -200,15 +202,7 @@ namespace LibTVRefCommonPortable.Models
{
Label = "Add pin",
IconPath = "ic_home_menu_addpin_182.png",
- Action = new CommandAction()
- {
- NextStateDescription = "default",
- Command = new Command<string>((key) =>
- {
- AppControlUtils.SendAddAppRequestToApps();
- }),
- CommandParameter = "",
- }
+ Action = addPinCommandAction,
}
},
}
@@ -237,7 +231,7 @@ namespace LibTVRefCommonPortable.Models
continue;
}
- Dictionary<string, string> appInfo = ApplicationManagerUtils.GetInstalledApplication(appShortcutInfo.AppID);
+ Dictionary<string, string> appInfo = ApplicationManagerUtils.Instance.GetInstalledApplication(appShortcutInfo.AppID);
if (appInfo == null)
{
@@ -309,9 +303,7 @@ namespace LibTVRefCommonPortable.Models
/// <returns>A hash table includes pinned app's app ID.</returns>
public async Task<Dictionary<string, string>> GetPinnedAppsAppIDs()
{
- IApplicationManagerAPIs applicationManagerPort = DependencyService.Get<IApplicationManagerAPIs>();
IEnumerable<AppShortcutInfo> pinned_apps_info = await AppShortcutStorage.Read();
-
Dictionary<string, string> pinnedAppsDictionary = new Dictionary<string, string>();
foreach (AppShortcutInfo appShortcutInfo in pinned_apps_info)
diff --git a/LibTVRefCommonPortable/Models/ManagedApps.cs b/LibTVRefCommonPortable/Models/ManagedApps.cs
index 126187c..4f39126 100644
--- a/LibTVRefCommonPortable/Models/ManagedApps.cs
+++ b/LibTVRefCommonPortable/Models/ManagedApps.cs
@@ -30,7 +30,6 @@ namespace LibTVRefCommonPortable.Models
/// <summary>
/// The app ID of TV reference home application
/// </summary>
- // TODO : change application later
public static string TVHomeAppID
{
get
@@ -105,14 +104,6 @@ namespace LibTVRefCommonPortable.Models
return true;
}
- // TODO : remove this, only for TDC
- if (appID.Contains("etflix") ||
- appID.StartsWith("org.volt") ||
- appID.StartsWith("org.tizen.emanual"))
- {
- return true;
- }
-
return false;
}
}
diff --git a/LibTVRefCommonPortable/Models/RecentShortcutController.cs b/LibTVRefCommonPortable/Models/RecentShortcutController.cs
index ec69ecd..4fa5a06 100755
--- a/LibTVRefCommonPortable/Models/RecentShortcutController.cs
+++ b/LibTVRefCommonPortable/Models/RecentShortcutController.cs
@@ -14,12 +14,10 @@
* limitations under the License.
*/
-using System;
using System.Collections.Generic;
using LibTVRefCommonPortable.DataModels;
using LibTVRefCommonPortable.Utils;
-using Xamarin.Forms;
namespace LibTVRefCommonPortable.Models
{
@@ -31,19 +29,11 @@ namespace LibTVRefCommonPortable.Models
public class RecentShortcutController
{
/// <summary>
- /// A constructor
- /// </summary>
- public 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(history);
RecentShortcutStorage.Delete(appId);
}
@@ -56,159 +46,12 @@ namespace LibTVRefCommonPortable.Models
}
/// <summary>
- /// A method updates Recent Shortcut.
- /// </summary>
- /// <param name="shortcut">A Recent Shortcut to be updated.</param>
- /// <returns>A Status of Update</returns>
- public bool Update(RecentShortcutInfo shortcut)
- {
- return RecentShortcutStorage.Update(shortcut);
- }
-
- /// <summary>
/// A method provides a Recent Shortcut list.
/// </summary>
/// <returns>A Recent Shortcut list.</returns>
public IEnumerable<RecentShortcutInfo> GetList()
{
- List<RecentShortcutInfo> recentShortcutInfoList = new List<RecentShortcutInfo>();
- IEnumerable<RecentApp> recentApps = null;
-
- try
- {
- recentApps = ApplicationManagerUtils.GetRecentApplications();
- }
- catch (Exception e)
- {
- DebuggingUtils.Err("GetRecentApplications failed. " + e.Message);
- }
-
- if (recentApps != null)
- {
- foreach (var item in recentApps)
- {
- if (ManagedApps.IsHiddenRecentApp(item.AppID))
- {
- 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";
-
- IFileSystemAPIs fsApi = DependencyService.Get<IFileSystemAPIs>();
- if (fsApi != null)
- {
- string capturedAppScreen = fsApi.PlatformShareStorage + item.AppID + ".jpg";
- if (fsApi.IsFileExist(capturedAppScreen))
- {
- recentShortcutInfo.ScreenshotPath = capturedAppScreen;
- }
- else
- {
- string testScreenShot = fsApi.AppResourceStorage + item.AppID + ".png";
- if (fsApi.IsFileExist(testScreenShot))
- {
- recentShortcutInfo.ScreenshotPath = testScreenShot;
- }
- }
- }
- }
- else
- {
- recentShortcutInfo.ScreenshotPath = item.ScreenShot;
- }
-
- recentShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
- recentShortcutInfo.CurrentStateDescription = defaultStateDescription;
- recentShortcutInfo.Id = item.AppID;
- recentShortcutInfo.Date = item.LaunchedTime;
- recentShortcutInfoList.Add(recentShortcutInfo);
- }
- }
- else
- {
- DebuggingUtils.Dbg("No recent apps");
- var defaultStateDescription = new StateDescription()
- {
- Label = "Youtube",
- IconPath = "ic_home_settings_all_138.png",
- Action = new AppControlAction()
- {
- AppID = "org.tizen.example.Youtube.TizenTV",
- }
- };
- var recentShortcutInfo = new RecentShortcutInfo();
- string testScreenShot = "org.tizen.example.Youtube.Tizen.png";
-
- recentShortcutInfo.ScreenshotPath = testScreenShot;
-
- recentShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
- recentShortcutInfo.CurrentStateDescription = defaultStateDescription;
- recentShortcutInfo.Id = "org.tizen.example.Youtube.TizenTV";
- recentShortcutInfoList.Add(recentShortcutInfo);
- }
-
- IMediaContentAPIs apiSet = DependencyService.Get<IMediaContentAPIs>();
- var recentPlayedMedia = DependencyService.Get<IMediaContentAPIs>().GetRecentlyPlayedMedia(10);
-
-
- foreach (var item in recentPlayedMedia)
- {
- // 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)
- {
- IFileSystemAPIs fsApi = DependencyService.Get<IFileSystemAPIs>();
- if (fsApi != null)
- {
- if (fsApi.IsFileExist(item.ThumbnailPath))
- {
- recentShortcutInfo.ScreenshotPath = item.ThumbnailPath;
- }
- }
- }
-
- recentShortcutInfo.StateDescriptions.Add("default", defaultStateDescription);
- recentShortcutInfo.CurrentStateDescription = defaultStateDescription;
- recentShortcutInfo.Id = "org.tizen.xamediahub";
- recentShortcutInfo.Date = item.PlayedAt.ToUniversalTime();
- recentShortcutInfoList.Add(recentShortcutInfo);
- }
-
- recentShortcutInfoList.Sort();
-
- return recentShortcutInfoList;
+ return RecentShortcutStorage.Read();
}
}
}
diff --git a/LibTVRefCommonPortable/Utils/AppShortcutStorage.cs b/LibTVRefCommonPortable/Utils/AppShortcutStorage.cs
index f415a44..47b9650 100644
--- a/LibTVRefCommonPortable/Utils/AppShortcutStorage.cs
+++ b/LibTVRefCommonPortable/Utils/AppShortcutStorage.cs
@@ -59,8 +59,6 @@ namespace LibTVRefCommonPortable.Utils
/// </summary>
private AppShortcutStorage()
{
- // TODO : Make this working properly, an accessing below directory is not permitted.
- //return DependencyService.Get<IFileSystemAPIs>()?.AppDataStorage + "pinned_apps_info.xml";
StoragePath = DependencyService.Get<IFileSystemAPIs>()?.PlatformShareStorage + "pinned_apps_info.xml";
fileSystemWatcher.Run();
diff --git a/LibTVRefCommonPortable/Utils/ApplicationManagerUtils.cs b/LibTVRefCommonPortable/Utils/ApplicationManagerUtils.cs
index 4904fa4..62d8b80 100644
--- a/LibTVRefCommonPortable/Utils/ApplicationManagerUtils.cs
+++ b/LibTVRefCommonPortable/Utils/ApplicationManagerUtils.cs
@@ -1,60 +1,217 @@

+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 constructor
+ /// A instance of platform specific application manager port.
/// </summary>
- public ApplicationManagerUtils()
+ 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>
- /// Gets the information of the recent applications
+ /// A unit testing stub of IApplicationManagerAPIs.
/// </summary>
- /// <returns>The list of the recent applications</returns>
- public static IEnumerable<RecentApp> GetRecentApplications()
+ private class TestingStub : IApplicationManagerAPIs
{
- if (DependencyService.Get<IApplicationManagerAPIs>() == null)
+ public void DeleteAllRecentApplication()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void DeleteRecentApplication(string appId)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<Dictionary<string, string[]>> GetAllInstalledApplication()
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<string> GetAppIDbyAppLabel(string appLabel)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool GetAppInfoRemovable(string appID)
{
- return null;
+ throw new NotImplementedException();
}
- return DependencyService.Get<IApplicationManagerAPIs>().GetRecentApplications();
+ public Dictionary<string, string> GetInstalledApplication(string applicationId)
+ {
+ throw new NotImplementedException();
+ }
+
+ 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;
+ }
}
/// <summary>
- /// Gets the information of the specified application with the app ID
+ /// A constructor
/// </summary>
- /// <param name="appID">The app Id to get</param>
- /// <returns>The information of the installed application</returns>
- public static Dictionary<string, string> GetInstalledApplication(string appID)
+ private ApplicationManagerUtils()
{
- if (DependencyService.Get<IApplicationManagerAPIs>() == null)
+ applicationManagerAPIs = new TestingStub();
+
+ try
{
- return null;
+ 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);
+ }
- return DependencyService.Get<IApplicationManagerAPIs>().GetInstalledApplication(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 Dictionary<string, string> 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 static Task<Dictionary<string, string[]>> GetAllInstalledApplication()
+ public Task<Dictionary<string, string[]>> GetAllInstalledApplication()
{
- if (DependencyService.Get<IApplicationManagerAPIs>() == null)
- {
- return null;
- }
-
- return DependencyService.Get<IApplicationManagerAPIs>().GetAllInstalledApplication();
+ return applicationManagerAPIs.GetAllInstalledApplication();
}
/// <summary>
@@ -62,14 +219,9 @@ namespace LibTVRefCommonPortable.Utils
/// </summary>
/// <param name="appID">The app ID to get</param>
/// <returns>If the application is removable, true; otherwise, false</returns>
- public static bool GetAppInfoRemovable(string appID)
+ public bool GetAppInfoRemovable(string appID)
{
- if (DependencyService.Get<IApplicationManagerAPIs>() == null)
- {
- return false;
- }
-
- return DependencyService.Get<IApplicationManagerAPIs>().GetAppInfoRemovable(appID);
+ return applicationManagerAPIs.GetAppInfoRemovable(appID);
}
/// <summary>
@@ -77,14 +229,9 @@ namespace LibTVRefCommonPortable.Utils
/// </summary>
/// <param name="appLabel">the app label to get</param>
/// <returns>the app ID of the app label</returns>
- public static Task<string> GetAppIDbyAppLabel(string appLabel)
+ public Task<string> GetAppIDbyAppLabel(string appLabel)
{
- if (DependencyService.Get<IApplicationManagerAPIs>() == null)
- {
- return null;
- }
-
- return DependencyService.Get<IApplicationManagerAPIs>().GetAppIDbyAppLabel(appLabel);
+ return applicationManagerAPIs.GetAppIDbyAppLabel(appLabel);
}
}
}
diff --git a/LibTVRefCommonPortable/Utils/DebuggingUtils.cs b/LibTVRefCommonPortable/Utils/DebuggingUtils.cs
index 987251a..61418c6 100644
--- a/LibTVRefCommonPortable/Utils/DebuggingUtils.cs
+++ b/LibTVRefCommonPortable/Utils/DebuggingUtils.cs
@@ -84,13 +84,18 @@ namespace LibTVRefCommonPortable.Utils
/// </summary>
private DebuggingUtils()
{
- if (DependencyService.Get<IDebuggingAPIs>() != null)
+ ism = new DefaultSM();
+
+ try
{
- ism = DependencyService.Get<IDebuggingAPIs>();
+ if (DependencyService.Get<IDebuggingAPIs>() != null)
+ {
+ ism = DependencyService.Get<IDebuggingAPIs>();
+ }
}
- else
+ catch (InvalidOperationException e)
{
- ism = new DefaultSM();
+ Err(e.Message);
}
}
diff --git a/LibTVRefCommonPortable/Utils/FileSystemUtils.cs b/LibTVRefCommonPortable/Utils/FileSystemUtils.cs
new file mode 100644
index 0000000..3497da7
--- /dev/null
+++ b/LibTVRefCommonPortable/Utils/FileSystemUtils.cs
@@ -0,0 +1,243 @@
+/*
+ * 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.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+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 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 unit test stub for FileSystemUtils
+ /// </summary>
+ private class TestStub : 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)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ /// <summary>
+ /// A constructor
+ /// </summary>
+ private FileSystemUtils()
+ {
+ fileSystemAPIs = new TestStub();
+
+ try
+ {
+ if (DependencyService.Get<IFileSystemAPIs>() != null)
+ {
+ fileSystemAPIs = DependencyService.Get<IFileSystemAPIs>();
+ }
+ }
+ 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);
+ }
+
+
+ }
+}
diff --git a/LibTVRefCommonPortable/Utils/IPackageManager.cs b/LibTVRefCommonPortable/Utils/IPackageManager.cs
index cfb14bd..a449672 100644
--- a/LibTVRefCommonPortable/Utils/IPackageManager.cs
+++ b/LibTVRefCommonPortable/Utils/IPackageManager.cs
@@ -37,10 +37,10 @@ namespace LibTVRefCommonPortable.Utils
string GetPackageLabel(string pkgID);
/// <summary>
- /// Gets the pacakge ID by the app ID
+ /// Gets the package 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>
+ /// <returns>The package ID that contains given app ID</returns>
string GetPackageIDByAppID(string appID);
/// <summary>
diff --git a/LibTVRefCommonPortable/Utils/IPlatformNotification.cs b/LibTVRefCommonPortable/Utils/IPlatformNotification.cs
index 9c1c07d..b5664e2 100755
--- a/LibTVRefCommonPortable/Utils/IPlatformNotification.cs
+++ b/LibTVRefCommonPortable/Utils/IPlatformNotification.cs
@@ -45,7 +45,7 @@ namespace LibTVRefCommonPortable.Utils
void OnAppUninstalled(string pkgID);
/// <summary>
- /// A method will be called if the app gets a pin app App Control request.
+ /// A method will be called if the app gets a App Control request for pinning a app.
/// </summary>
void OnPinAppRequestReceived();
@@ -56,7 +56,7 @@ namespace LibTVRefCommonPortable.Utils
void OnAppPinnedNotificationReceived(string appID);
/// <summary>
- /// A method will be called when the Nativation remote control key is pressed.
+ /// 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);
diff --git a/LibTVRefCommonPortable/Utils/MediaContentUtils.cs b/LibTVRefCommonPortable/Utils/MediaContentUtils.cs
new file mode 100644
index 0000000..c14b051
--- /dev/null
+++ b/LibTVRefCommonPortable/Utils/MediaContentUtils.cs
@@ -0,0 +1,141 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+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 unit testing stub for MediaContentUtils
+ /// </summary>
+ private class TestStub : IMediaContentAPIs
+ {
+ 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;
+ }
+ }
+
+ /// <summary>
+ /// A Constructor
+ /// </summary>
+ private MediaContentUtils()
+ {
+ mediaContentAPIs = new TestStub();
+
+ 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);
+ }
+
+ }
+}
diff --git a/LibTVRefCommonPortable/Utils/PackageManagerUtils.cs b/LibTVRefCommonPortable/Utils/PackageManagerUtils.cs
index 36de825..50cd961 100644
--- a/LibTVRefCommonPortable/Utils/PackageManagerUtils.cs
+++ b/LibTVRefCommonPortable/Utils/PackageManagerUtils.cs
@@ -87,7 +87,7 @@ namespace LibTVRefCommonPortable.Utils
/// A method remove the package by using an app ID.
/// </summary>
/// <param name="appID">An app ID</param>
- /// <returns>A status of uninstall</returns>
+ /// <returns>A status of uninstallation</returns>
public static bool UninstallPackageByAppID(string appID)
{
if (DependencyService.Get<IPackageManager>() == null)
diff --git a/LibTVRefCommonPortable/Utils/RecentShortcutStorage.cs b/LibTVRefCommonPortable/Utils/RecentShortcutStorage.cs
index 6fa8df4..b993aff 100755
--- a/LibTVRefCommonPortable/Utils/RecentShortcutStorage.cs
+++ b/LibTVRefCommonPortable/Utils/RecentShortcutStorage.cs
@@ -16,35 +16,20 @@
using System.Collections.Generic;
using LibTVRefCommonPortable.DataModels;
-using Xamarin.Forms;
+using System;
+using LibTVRefCommonPortable.Models;
namespace LibTVRefCommonPortable.Utils
{
/// <summary>
/// A class to manage the Recent Shortcuts.
/// </summary>
- public class RecentShortcutStorage
+ public sealed class RecentShortcutStorage
{
/// <summary>
- /// A method creates the Recent Shortcut.
+ /// A maximum number of recent apps and contents
/// </summary>
- /// <returns>A status of Recent Shortcut creation.</returns>
- public static bool Create()
- {
- // TODO : make a recent content
- return false;
- }
-
- /// <summary>
- /// A method provides a Recent Shortcut information which is matched with the given key.
- /// </summary>
- /// <param name="key">A recent shortcut's ID</param>
- /// <returns>A Recent Shortcut Infomation</returns>
- public static RecentShortcutInfo Read(string key)
- {
- RecentShortcutInfo recentShortcutInfo = new RecentShortcutInfo();
- return recentShortcutInfo;
- }
+ private static readonly int MaxRecents = 10;
/// <summary>
/// A method provides all Recent Shortcuts' information list.
@@ -52,19 +37,129 @@ namespace LibTVRefCommonPortable.Utils
/// <returns>a Recent Shortcut information list.</returns>
public static IEnumerable<RecentShortcutInfo> Read()
{
- List<RecentShortcutInfo> list = new List<RecentShortcutInfo>();
+ List<RecentShortcutInfo> recentShortcutInfoList = new List<RecentShortcutInfo>();
+ IEnumerable<RecentApp> recentApps = null;
- return list;
- }
+ try
+ {
+ recentApps = ApplicationManagerUtils.Instance.GetRecentApplications();
+ }
+ catch (Exception e)
+ {
+ DebuggingUtils.Err("GetRecentApplications failed. " + e.Message);
+ }
- /// <summary>
- /// A method updates a Recent Shortcut.
- /// </summary>
- /// <param name="shortcut">A recent Shortcut</param>
- /// <returns>A status of update.</returns>
- public static bool Update(ShortcutInfo shortcut)
- {
- return false;
+ 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 ||
+ item.Uri == null || item.Uri.Length == 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>
@@ -73,8 +168,7 @@ namespace LibTVRefCommonPortable.Utils
/// <param name="appId">An application ID</param>
public static void Delete(string appId)
{
- IApplicationManagerAPIs applicationManagerPort = DependencyService.Get<IApplicationManagerAPIs>();
- applicationManagerPort.DeleteRecentApplication(appId);
+ ApplicationManagerUtils.Instance.DeleteRecentApplication(appId);
}
/// <summary>
@@ -82,8 +176,7 @@ namespace LibTVRefCommonPortable.Utils
/// </summary>
public static void DeleteAll()
{
- IApplicationManagerAPIs applicationManagerPort = DependencyService.Get<IApplicationManagerAPIs>();
- applicationManagerPort.DeleteAllRecentApplication();
+ ApplicationManagerUtils.Instance.DeleteAllRecentApplication();
}
}
}
diff --git a/LibTVRefCommonPortable/Utils/SizeUtils.cs b/LibTVRefCommonPortable/Utils/SizeUtils.cs
index 6eebc03..4ac601d 100644
--- a/LibTVRefCommonPortable/Utils/SizeUtils.cs
+++ b/LibTVRefCommonPortable/Utils/SizeUtils.cs
@@ -120,7 +120,7 @@ namespace LibTVRefCommonPortable.Utils
/// A method provides a converted height size.
/// </summary>
/// <param name="heightBaseSize">A height value in BaseScreen ratio</param>
- /// <returns>A date</returns>
+ /// <returns>A converted height size</returns>
public static int GetHeightSize(int heightBaseSize)
{
return Convert.ToInt32((double)((double)heightBaseSize / (double)BaseScreenHeight) * (double)(ScreenHeight));
@@ -130,12 +130,17 @@ namespace LibTVRefCommonPortable.Utils
/// A method provides a converted width size.
/// </summary>
/// <param name="widthBaseSize">A width value in BaseScreen ratio</param>
- /// <returns>A date</returns>
+ /// <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);
@@ -145,7 +150,7 @@ namespace LibTVRefCommonPortable.Utils
/// A method provides a converted font size.
/// </summary>
/// <param name="fontBaseSize">A base font size value in BaseScreen ratio</param>
- /// <returns>A date</returns>
+ /// <returns>A converted font size</returns>
public static int GetFontSize(int fontBaseSize)
{
switch (ModelName)
@@ -157,7 +162,6 @@ namespace LibTVRefCommonPortable.Utils
default:
case PlatformModel.Other:
case PlatformModel.TV:
- // TODO : Remove this if the TV/Other device's dpi is correctly changed.
//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);
diff --git a/LibTVRefCommonPortable/packages.config b/LibTVRefCommonPortable/packages.config
index 0dc7a5a..e9dfad3 100755
--- a/LibTVRefCommonPortable/packages.config
+++ b/LibTVRefCommonPortable/packages.config
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Tizen.Xamarin.Forms.Extension" version="2.3.5-r233-002" targetFramework="portable45-net45+win8+wp8+wpa81" />
- <package id="Xamarin.Forms" version="2.3.5-r233-003" targetFramework="portable45-net45+win8+wp8+wpa81" />
+ <package id="Tizen.Xamarin.Forms.Extension" version="2.3.5-r233-003" targetFramework="portable45-net45+win8+wp8+wpa81" />
+ <package id="Xamarin.Forms" version="2.3.5-r233-008" targetFramework="portable45-net45+win8+wp8+wpa81" />
</packages> \ No newline at end of file
diff --git a/LibTVRefCommonTizen/LibTVRefCommonTizen.nuget.targets b/LibTVRefCommonTizen/LibTVRefCommonTizen.nuget.targets
index 32bb521..13f049f 100644
--- a/LibTVRefCommonTizen/LibTVRefCommonTizen.nuget.targets
+++ b/LibTVRefCommonTizen/LibTVRefCommonTizen.nuget.targets
@@ -3,7 +3,7 @@
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
- <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">D:\git\home\LibTVRefCommonTizen\LibTVRefCommonTizen.project.lock.json</ProjectAssetsFile>
+ <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">D:\_Data\csharp\spin_home\home\LibTVRefCommonTizen\LibTVRefCommonTizen.project.lock.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\samsung\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">ProjectJson</NuGetProjectStyle>
@@ -13,6 +13,6 @@
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
- <Import Project="$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
+ <Import Project="$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
</ImportGroup>
</Project> \ No newline at end of file
diff --git a/LibTVRefCommonTizen/LibTVRefCommonTizen.project.json b/LibTVRefCommonTizen/LibTVRefCommonTizen.project.json
index 4ec4d98..3531591 100644
--- a/LibTVRefCommonTizen/LibTVRefCommonTizen.project.json
+++ b/LibTVRefCommonTizen/LibTVRefCommonTizen.project.json
@@ -1,12 +1,12 @@
{
"dependencies": {
- "ElmSharp": "1.1.0-beta-021",
- "Microsoft.NETCore.App": "1.1.0",
- "Tizen": "1.0.3",
- "Tizen.Applications": "1.5.1",
- "Tizen.Content.MediaContent": "1.0.19",
- "Xamarin.Forms": "2.3.5-r233-003",
- "Xamarin.Forms.Platform.Tizen": "2.3.5-r233-003"
+ "ElmSharp": "1.2.0-beta-001",
+ "Microsoft.NETCore.App": "1.1.2",
+ "Tizen": "1.0.5",
+ "Tizen.Applications": "1.5.8",
+ "Tizen.Content.MediaContent": "1.0.20",
+ "Xamarin.Forms": "2.3.5-r233-008",
+ "Xamarin.Forms.Platform.Tizen": "2.3.5-r233-008"
},
"frameworks": {
"netcoreapp1.0": {
diff --git a/LibTVRefCommonTizen/Ports/AppControlPort.cs b/LibTVRefCommonTizen/Ports/AppControlPort.cs
index 96c9eb0..45dad8f 100644
--- a/LibTVRefCommonTizen/Ports/AppControlPort.cs
+++ b/LibTVRefCommonTizen/Ports/AppControlPort.cs
@@ -23,14 +23,13 @@ using System.Collections.Generic;
namespace LibTVRefCommonTizen.Ports
{
/// <summary>
- /// Handles the Appcontrol APIs
+ /// Handles the AppControl APIs
/// </summary>
public class AppControlPort : IAppControl
{
/// <summary>
/// The app ID of TV reference home application
/// </summary>
- // TODO : change application later
public static string TVHomeAppID = "org.tizen.xahome";
/// <summary>
@@ -40,13 +39,13 @@ namespace LibTVRefCommonTizen.Ports
/// <summary>
/// Represents the operation to be performed between TVHome and TVApps
- /// This operation is sended from TVHomes to 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 sended from TVApps to TVHome
+ /// This operation is sent from TVApps to TVHome
/// </summary>
public static string AppAddedNotifyOperation = "http://xahome.tizen.org/appcontrol/operation/app_added";
@@ -66,7 +65,7 @@ namespace LibTVRefCommonTizen.Ports
if (appId == null || appId.Length <= 0)
{
- DebuggingUtils.Err("The AppID is null or blank");
+ DbgPort.E("The AppID is null or blank");
return;
}
@@ -97,7 +96,7 @@ namespace LibTVRefCommonTizen.Ports
}
catch (InvalidOperationException)
{
- DebuggingUtils.Err("Failed to create AppControl");
+ DbgPort.E("Failed to create AppControl");
}
}
diff --git a/LibTVRefCommonTizen/Ports/ApplicationManagerPort.cs b/LibTVRefCommonTizen/Ports/ApplicationManagerPort.cs
index 72e833a..9e5cb9b 100755
--- a/LibTVRefCommonTizen/Ports/ApplicationManagerPort.cs
+++ b/LibTVRefCommonTizen/Ports/ApplicationManagerPort.cs
@@ -53,7 +53,7 @@ namespace LibTVRefCommonTizen.Ports
void OnApplicationLaunched(object sender, EventArgs args)
{
ApplicationLaunchedEventArgs launchedEventArgs = args as ApplicationLaunchedEventArgs;
- DebuggingUtils.Dbg(launchedEventArgs.ApplicationRunningContext.ApplicationId + " launched");
+ DbgPort.D(launchedEventArgs.ApplicationRunningContext.ApplicationId + " launched");
}
/// <summary>
@@ -67,7 +67,7 @@ namespace LibTVRefCommonTizen.Ports
/// <summary>
/// Removes the specified application with the app ID
/// </summary>
- /// <param name="appId">An alication ID that is removed</param>
+ /// <param name="appId">An application ID that is removed</param>
public void DeleteRecentApplication(string appId)
{
IEnumerable<RecentApplicationInfo> recentApps = ApplicationManager.GetRecentApplications();
@@ -117,7 +117,7 @@ namespace LibTVRefCommonTizen.Ports
}
catch (InvalidOperationException)
{
- DebuggingUtils.Err("Failed to get the information of the recent applications");
+ DbgPort.E("Failed to get the information of the recent applications");
return null;
}
diff --git a/LibTVRefCommonTizen/Ports/PackageManagerPort.cs b/LibTVRefCommonTizen/Ports/PackageManagerPort.cs
index b8dc1b1..a8719b7 100644
--- a/LibTVRefCommonTizen/Ports/PackageManagerPort.cs
+++ b/LibTVRefCommonTizen/Ports/PackageManagerPort.cs
@@ -150,7 +150,7 @@ namespace LibTVRefCommonTizen.Ports
}
catch (Exception e)
{
- DebuggingUtils.Err("Failed to get package information(" + pkgID + ") : " + e.Message);
+ DbgPort.E("Failed to get package information(" + pkgID + ") : " + e.Message);
return null;
}
@@ -169,7 +169,7 @@ namespace LibTVRefCommonTizen.Ports
}
catch (Exception e)
{
- DebuggingUtils.Err("Failed to get the package ID by app ID(" + appID + ") : " + e.Message);
+ DbgPort.E("Failed to get the package ID by app ID(" + appID + ") : " + e.Message);
return null;
}
@@ -190,7 +190,7 @@ namespace LibTVRefCommonTizen.Ports
}
catch (Exception e)
{
- DebuggingUtils.Err("Failed to get package information(" + pkgID + ") : " + e.Message);
+ DbgPort.E("Failed to get package information(" + pkgID + ") : " + e.Message);
return false;
}
@@ -212,7 +212,7 @@ namespace LibTVRefCommonTizen.Ports
}
catch (Exception e)
{
- DebuggingUtils.Err("Failed to uninstall by AppID(" + appID + ") : " + e.Message);
+ DbgPort.E("Failed to uninstall by AppID(" + appID + ") : " + e.Message);
return false;
}
@@ -233,7 +233,7 @@ namespace LibTVRefCommonTizen.Ports
IEnumerable<ApplicationInfo> appsList = pkg.GetApplications();
if (appsList == null)
{
- DebuggingUtils.Err("Failed to get apps list(" + pkgID + ")");
+ DbgPort.E("Failed to get apps list(" + pkgID + ")");
return null;
}
@@ -241,7 +241,7 @@ namespace LibTVRefCommonTizen.Ports
foreach (var app in appsList)
{
apps.Add(app.ApplicationId);
- DebuggingUtils.Dbg("[" + index + "] " + app.ApplicationId);
+ DbgPort.D("[" + index + "] " + app.ApplicationId);
index++;
}
@@ -249,7 +249,7 @@ namespace LibTVRefCommonTizen.Ports
}
catch (Exception e)
{
- DebuggingUtils.Err("Failed to get the package information(" + pkgID + ") : " + e.Message);
+ DbgPort.E("Failed to get the package information(" + pkgID + ") : " + e.Message);
return new List<string>();
}
diff --git a/TVApps/TVApps.TizenTV/TVApps.TizenTV.nuget.targets b/TVApps/TVApps.TizenTV/TVApps.TizenTV.nuget.targets
index 2d54ce4..596d878 100644
--- a/TVApps/TVApps.TizenTV/TVApps.TizenTV.nuget.targets
+++ b/TVApps/TVApps.TizenTV/TVApps.TizenTV.nuget.targets
@@ -3,7 +3,7 @@
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
- <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">D:\git\home\TVApps\TVApps.TizenTV\TVApps.TizenTV.project.lock.json</ProjectAssetsFile>
+ <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">D:\_Data\csharp\spin_home\home\TVApps\TVApps.TizenTV\TVApps.TizenTV.project.lock.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\samsung\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">ProjectJson</NuGetProjectStyle>
@@ -13,6 +13,6 @@
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
- <Import Project="$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
+ <Import Project="$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
</ImportGroup>
</Project> \ No newline at end of file
diff --git a/TVApps/TVApps.TizenTV/TVApps.TizenTV.project.json b/TVApps/TVApps.TizenTV/TVApps.TizenTV.project.json
index e049334..28ae18a 100644
--- a/TVApps/TVApps.TizenTV/TVApps.TizenTV.project.json
+++ b/TVApps/TVApps.TizenTV/TVApps.TizenTV.project.json
@@ -6,11 +6,11 @@
"preserveCompilationContext": true
},
"dependencies": {
- "ElmSharp": "1.1.0-beta-021",
- "Microsoft.NETCore.App": "1.1.0",
- "Tizen.Xamarin.Forms.Extension": "2.3.5-r233-002",
- "Xamarin.Forms": "2.3.5-r233-003",
- "Xamarin.Forms.Platform.Tizen": "2.3.5-r233-003"
+ "ElmSharp": "1.2.0-beta-001",
+ "Microsoft.NETCore.App": "1.1.2",
+ "Tizen.Xamarin.Forms.Extension": "2.3.5-r233-003",
+ "Xamarin.Forms": "2.3.5-r233-008",
+ "Xamarin.Forms.Platform.Tizen": "2.3.5-r233-008"
},
"runtimes": {
"win": {},
diff --git a/TVApps/TVApps/Controls/AppItemCell.xaml.cs b/TVApps/TVApps/Controls/AppItemCell.xaml.cs
index 048ad03..b53e59e 100755
--- a/TVApps/TVApps/Controls/AppItemCell.xaml.cs
+++ b/TVApps/TVApps/Controls/AppItemCell.xaml.cs
@@ -371,7 +371,6 @@ namespace TVApps.Controls
popup.Items.Add(new ContextPopupItem("DELETE"));
- //TODO: need to change the event callback
popup.SelectedIndexChanged += (s, args) =>
{
var ctxPopup = s as ContextPopup;
diff --git a/TVApps/TVApps/Controls/AppListView.xaml.cs b/TVApps/TVApps/Controls/AppListView.xaml.cs
index df96e6d..7dade6d 100755
--- a/TVApps/TVApps/Controls/AppListView.xaml.cs
+++ b/TVApps/TVApps/Controls/AppListView.xaml.cs
@@ -114,9 +114,7 @@ namespace TVApps.Controls
{
InitializeComponent();
- // TODO : set proper size
Thickness padding = new Thickness(SizeUtils.GetHeightSize(58), 0, SizeUtils.GetHeightSize(58), 0);
- // TODO : set proper size
int spacing = SizeUtils.GetWidthSize(16);
AppUpperList.Padding = padding;
diff --git a/TVApps/TVApps/TVApps.csproj b/TVApps/TVApps/TVApps.csproj
index c2fd63b..e5bfb48 100755
--- a/TVApps/TVApps/TVApps.csproj
+++ b/TVApps/TVApps/TVApps.csproj
@@ -108,32 +108,28 @@
</ItemGroup>
<ItemGroup>
<Reference Include="Tizen.Xamarin.Forms.Extension, Version=0.0.1.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\..\packages\Tizen.Xamarin.Forms.Extension.2.3.5-r233-002\lib\portable-win+net45+wp80+win81+wpa81\Tizen.Xamarin.Forms.Extension.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\..\packages\Tizen.Xamarin.Forms.Extension.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81\Tizen.Xamarin.Forms.Extension.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
- <Import Project="..\..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
+ <Import Project="..\..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
- <Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
+ <Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/TVApps/TVApps/ViewModels/AppsHolder.cs b/TVApps/TVApps/ViewModels/AppsHolder.cs
index 0117ca9..68acc45 100755
--- a/TVApps/TVApps/ViewModels/AppsHolder.cs
+++ b/TVApps/TVApps/ViewModels/AppsHolder.cs
@@ -118,53 +118,59 @@ namespace TVApps.ViewModels
item.IsPinned = PinnedApps.ContainsKey(item.AppID);
+ CommandAction pinAction = new CommandAction()
+ {
+ NextStateDescription = AppsStatus.Pin.ToString().ToLower(),
+ CommandParameter = item.AppID
+ };
+ pinAction.Command += new System.EventHandler<string>((s, arg) =>
+ {
+ PinToggle(arg);
+ });
+
var pinStateDescription = new StateDescription()
{
Label = item.CurrentStateDescription.Label,
IconPath = item.CurrentStateDescription.IconPath,
- Action = new CommandAction()
- {
- NextStateDescription = AppsStatus.Pin.ToString().ToLower(),
- Command = new Command<string>((key) =>
- {
- PinToggle(key);
- }),
- CommandParameter = item.AppID
- }
+ Action = pinAction,
};
item.StateDescriptions.Add(AppsStatus.Pin.ToString().ToLower(), pinStateDescription);
+ CommandAction checkDeleteAction = new CommandAction()
+ {
+ NextStateDescription = AppsStatus.Delete.ToString().ToLower(),
+ CommandParameter = item.AppID
+ };
+ checkDeleteAction.Command += new System.EventHandler<string>((s, arg) =>
+ {
+ CheckDeleteApp(arg);
+ });
+
var deleteStateDescription = new StateDescription()
{
Label = item.CurrentStateDescription.Label,
IconPath = item.CurrentStateDescription.IconPath,
- Action = new CommandAction()
- {
- NextStateDescription = AppsStatus.Delete.ToString().ToLower(),
- Command = new Command<string>((key) =>
- {
- CheckDeleteApp(key);
- }),
- CommandParameter = item.AppID
- }
+ Action = checkDeleteAction,
};
item.StateDescriptions.Add(AppsStatus.Delete.ToString().ToLower(), deleteStateDescription);
+ CommandAction longPressAction = new CommandAction()
+ {
+ NextStateDescription = AppsStatus.LongPress.ToString().ToLower(),
+ CommandParameter = item.AppID
+ };
+ pinAction.Command += new System.EventHandler<string>((s, arg) =>
+ {
+ LongPressApp(arg);
+ });
+
var longPressStateDescription = new StateDescription()
{
Label = item.CurrentStateDescription.Label,
IconPath = item.CurrentStateDescription.IconPath,
- Action = new CommandAction()
- {
- NextStateDescription = AppsStatus.LongPress.ToString().ToLower(),
- Command = new Command<string>((key) =>
- {
- LongPressApp(key);
- }),
- CommandParameter = item.AppID
- }
+ Action = longPressAction,
};
item.StateDescriptions.Add(AppsStatus.LongPress.ToString().ToLower(), longPressStateDescription);
}
@@ -199,12 +205,13 @@ namespace TVApps.ViewModels
}
else
{
- if(PinnedApps.Count >= 10)
+ if (PinnedApps.Count >= 10)
{
IsSelectedExceeds = true;
ViewModel.OnPropertyChanged("IsSelectedExceeds");
return;
}
+
DebuggingUtils.Dbg("Pin! : " + selectedApp);
selectedApp.IsChecked = true;
selectedApp.IsPinned = true;
@@ -286,14 +293,14 @@ namespace TVApps.ViewModels
{
DebuggingUtils.Dbg("check that the app( " + appID + ") can be deleted");
- if (!ApplicationManagerUtils.GetAppInfoRemovable(appID))
+ if (!ApplicationManagerUtils.Instance.GetAppInfoRemovable(appID))
{
DebuggingUtils.Dbg("This app is not removable : " + appID);
return;
}
string appLabel = null;
- if (ApplicationManagerUtils.GetInstalledApplication(appID).TryGetValue("Label", out appLabel))
+ if (ApplicationManagerUtils.Instance.GetInstalledApplication(appID).TryGetValue("Label", out appLabel))
{
ViewModel.ShowDeletePopup(appLabel);
}
@@ -351,7 +358,6 @@ namespace TVApps.ViewModels
/// <param name="AppID">The ID of application for showing option menu</param>
private void LongPressApp(string AppID)
{
- // TODO:
DebuggingUtils.Dbg(" +++++ long press app : " + AppID);
}
@@ -363,7 +369,6 @@ namespace TVApps.ViewModels
{
string tag = status.ToString().ToLower();
- // TODO : remove this code. this code is temporary.
if (status == AppsStatus.LongPress)
{
AppShortcutInfo focuesedApp = InstalledApps.Find(a => a.IsFocused);
diff --git a/TVApps/TVApps/ViewModels/MainPageViewModel.cs b/TVApps/TVApps/ViewModels/MainPageViewModel.cs
index 626a8b2..a61490a 100755
--- a/TVApps/TVApps/ViewModels/MainPageViewModel.cs
+++ b/TVApps/TVApps/ViewModels/MainPageViewModel.cs
@@ -296,6 +296,7 @@ namespace TVApps.ViewModels
AppControlUtils.SendAppAddedNotificationToHome("org.tizen.settings");
AppControlUtils.SelfTerminate();
}
+
SetFocusOptionButton = true;
OnPropertyChanged("SetFocusOptionButton");
@@ -339,7 +340,7 @@ namespace TVApps.ViewModels
return;
}
- string appId = await ApplicationManagerUtils.GetAppIDbyAppLabel(appLabel);
+ string appId = await ApplicationManagerUtils.Instance.GetAppIDbyAppLabel(appLabel);
if (appId == null)
{
DebuggingUtils.Err("Failed to get the app ID by app label : " + appLabel);
diff --git a/TVApps/TVApps/Views/FooterNormalStatus.xaml.cs b/TVApps/TVApps/Views/FooterNormalStatus.xaml.cs
index 733e38a..4dedfc9 100755
--- a/TVApps/TVApps/Views/FooterNormalStatus.xaml.cs
+++ b/TVApps/TVApps/Views/FooterNormalStatus.xaml.cs
@@ -165,7 +165,6 @@ namespace TVApps.Views
popup.Items.Add(new ContextPopupItem("PIN"));
popup.Items.Add(new ContextPopupItem(" DELETE "));
- //TODO: need to change the event callback
popup.SelectedIndexChanged += (s, args) =>
{
var ctxPopup = s as ContextPopup;
diff --git a/TVApps/TVApps/Views/MainPage.xaml.cs b/TVApps/TVApps/Views/MainPage.xaml.cs
index 3ec14c3..fa76298 100755
--- a/TVApps/TVApps/Views/MainPage.xaml.cs
+++ b/TVApps/TVApps/Views/MainPage.xaml.cs
@@ -160,7 +160,6 @@ namespace TVApps.Views
PropertyChanged += MainPagePropertyChanged;
SetCurrentStatus(AppsStatus.Default);
- // TODO: This code is temporary for menu option test
App.SetMenuKeyListener((e, arg) =>
{
DebuggingUtils.Dbg("[Apps] Menu key is pressed");
diff --git a/TVApps/TVApps/packages.config b/TVApps/TVApps/packages.config
index 0dc7a5a..e9dfad3 100755
--- a/TVApps/TVApps/packages.config
+++ b/TVApps/TVApps/packages.config
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Tizen.Xamarin.Forms.Extension" version="2.3.5-r233-002" targetFramework="portable45-net45+win8+wp8+wpa81" />
- <package id="Xamarin.Forms" version="2.3.5-r233-003" targetFramework="portable45-net45+win8+wp8+wpa81" />
+ <package id="Tizen.Xamarin.Forms.Extension" version="2.3.5-r233-003" targetFramework="portable45-net45+win8+wp8+wpa81" />
+ <package id="Xamarin.Forms" version="2.3.5-r233-008" targetFramework="portable45-net45+win8+wp8+wpa81" />
</packages> \ No newline at end of file
diff --git a/TVHome/TVHome.TizenTV/Sniper.cs b/TVHome/TVHome.TizenTV/Sniper.cs
index 461b623..76017f0 100644
--- a/TVHome/TVHome.TizenTV/Sniper.cs
+++ b/TVHome/TVHome.TizenTV/Sniper.cs
@@ -6,308 +6,308 @@ 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>
+ /// <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>
- /// TODO : Comment this
- /// </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);
- }
- }
+ /// <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 */
diff --git a/TVHome/TVHome.TizenTV/SniperInterOp.cs b/TVHome/TVHome.TizenTV/SniperInterOp.cs
index 12712b9..d0bf60a 100644
--- a/TVHome/TVHome.TizenTV/SniperInterOp.cs
+++ b/TVHome/TVHome.TizenTV/SniperInterOp.cs
@@ -4,7 +4,7 @@ using System.Runtime.InteropServices;
namespace CoreApp
{
/// <summary>
- /// TODO : Comment this
+ /// Sniper InterOp class for getting application's screen-shot.
/// </summary>
internal static partial class InterOp
{
diff --git a/TVHome/TVHome.TizenTV/TVHome.TizenTV.csproj b/TVHome/TVHome.TizenTV/TVHome.TizenTV.csproj
index 260847a..c13b831 100755
--- a/TVHome/TVHome.TizenTV/TVHome.TizenTV.csproj
+++ b/TVHome/TVHome.TizenTV/TVHome.TizenTV.csproj
@@ -51,7 +51,9 @@
<ItemGroup>
<Compile Include="Sniper.cs" />
<Compile Include="SniperException.cs" />
- <Compile Include="SniperInterOp.cs" />
+ <Compile Include="SniperInterOp.cs">
+ <ExcludeFromStyleCop>true</ExcludeFromStyleCop>
+ </Compile>
<Compile Include="TVHome.TizenTV.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
@@ -163,23 +165,6 @@
<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\org.tizen.example.Amazon.Tizen.png" />
- <Content Include="res\org.tizen.example.Bawee.Tizen.png" />
- <Content Include="res\org.tizen.example.Be183.Tizen.png" />
- <Content Include="res\org.tizen.example.Butterfly.Tizen.png" />
- <Content Include="res\org.tizen.example.Calculator.Tizen.png" />
- <Content Include="res\org.tizen.example.HomeFitness.Tizen.png" />
- <Content Include="res\org.tizen.example.Hulu.Tizen.png" />
- <Content Include="res\org.tizen.example.Mustache.Tizen.png" />
- <Content Include="res\org.tizen.example.Netflix.Tizen.png" />
- <Content Include="res\org.tizen.example.Radio.Tizen.png" />
- <Content Include="res\org.tizen.example.Sports.Tizen.png" />
- <Content Include="res\org.tizen.example.Switcho.Tizen.png" />
- <Content Include="res\org.tizen.example.TocToc.Tizen.png" />
- <Content Include="res\org.tizen.example.Toda.Tizen.png" />
- <Content Include="res\org.tizen.example.Vimeo.Tizen.png" />
- <Content Include="res\org.tizen.example.XBox.Tizen.png" />
- <Content Include="res\org.tizen.example.YouTube.Tizen.png" />
<Content Include="res\screenshot.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
diff --git a/TVHome/TVHome.TizenTV/TVHome.TizenTV.nuget.targets b/TVHome/TVHome.TizenTV/TVHome.TizenTV.nuget.targets
index c577474..a8d042b 100644
--- a/TVHome/TVHome.TizenTV/TVHome.TizenTV.nuget.targets
+++ b/TVHome/TVHome.TizenTV/TVHome.TizenTV.nuget.targets
@@ -3,7 +3,7 @@
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
- <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">D:\git\home\TVHome\TVHome.TizenTV\TVHome.TizenTV.project.lock.json</ProjectAssetsFile>
+ <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">D:\_Data\csharp\spin_home\home\TVHome\TVHome.TizenTV\TVHome.TizenTV.project.lock.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\samsung\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">ProjectJson</NuGetProjectStyle>
@@ -13,6 +13,6 @@
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
- <Import Project="$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
+ <Import Project="$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('$(NuGetPackageRoot)xamarin.forms\2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
</ImportGroup>
</Project> \ No newline at end of file
diff --git a/TVHome/TVHome.TizenTV/TVHome.TizenTV.project.json b/TVHome/TVHome.TizenTV/TVHome.TizenTV.project.json
index e049334..28ae18a 100755
--- a/TVHome/TVHome.TizenTV/TVHome.TizenTV.project.json
+++ b/TVHome/TVHome.TizenTV/TVHome.TizenTV.project.json
@@ -6,11 +6,11 @@
"preserveCompilationContext": true
},
"dependencies": {
- "ElmSharp": "1.1.0-beta-021",
- "Microsoft.NETCore.App": "1.1.0",
- "Tizen.Xamarin.Forms.Extension": "2.3.5-r233-002",
- "Xamarin.Forms": "2.3.5-r233-003",
- "Xamarin.Forms.Platform.Tizen": "2.3.5-r233-003"
+ "ElmSharp": "1.2.0-beta-001",
+ "Microsoft.NETCore.App": "1.1.2",
+ "Tizen.Xamarin.Forms.Extension": "2.3.5-r233-003",
+ "Xamarin.Forms": "2.3.5-r233-008",
+ "Xamarin.Forms.Platform.Tizen": "2.3.5-r233-008"
},
"runtimes": {
"win": {},
diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.Butterfly.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.Butterfly.Tizen.png
deleted file mode 100644
index 738a625..0000000
--- a/TVHome/TVHome.TizenTV/res/org.tizen.example.Butterfly.Tizen.png
+++ /dev/null
Binary files differ
diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.Calculator.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.Calculator.Tizen.png
deleted file mode 100644
index fb15bac..0000000
--- a/TVHome/TVHome.TizenTV/res/org.tizen.example.Calculator.Tizen.png
+++ /dev/null
Binary files differ
diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.HomeFitness.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.HomeFitness.Tizen.png
deleted file mode 100644
index 738a625..0000000
--- a/TVHome/TVHome.TizenTV/res/org.tizen.example.HomeFitness.Tizen.png
+++ /dev/null
Binary files differ
diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.Sports.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.Sports.Tizen.png
deleted file mode 100644
index fb15bac..0000000
--- a/TVHome/TVHome.TizenTV/res/org.tizen.example.Sports.Tizen.png
+++ /dev/null
Binary files differ
diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.Toda.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.Toda.Tizen.png
deleted file mode 100644
index fb15bac..0000000
--- a/TVHome/TVHome.TizenTV/res/org.tizen.example.Toda.Tizen.png
+++ /dev/null
Binary files differ
diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.YouTube.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.YouTube.Tizen.png
deleted file mode 100644
index 738a625..0000000
--- a/TVHome/TVHome.TizenTV/res/org.tizen.example.YouTube.Tizen.png
+++ /dev/null
Binary files differ
diff --git a/TVHome/TVHome/TVHome.csproj b/TVHome/TVHome/TVHome.csproj
index 337d87c..fa9c891 100755
--- a/TVHome/TVHome/TVHome.csproj
+++ b/TVHome/TVHome/TVHome.csproj
@@ -139,32 +139,28 @@
</ItemGroup>
<ItemGroup>
<Reference Include="Tizen.Xamarin.Forms.Extension, Version=0.0.1.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\..\packages\Tizen.Xamarin.Forms.Extension.2.3.5-r233-002\lib\portable-win+net45+wp80+win81+wpa81\Tizen.Xamarin.Forms.Extension.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\..\packages\Tizen.Xamarin.Forms.Extension.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81\Tizen.Xamarin.Forms.Extension.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-003\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
- <Private>True</Private>
+ <HintPath>..\..\packages\Xamarin.Forms.2.3.5-r233-008\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
- <Import Project="..\..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
+ <Import Project="..\..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
- <Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.5-r233-003\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
+ <Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.5-r233-008\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/TVHome/TVHome/ViewModels/MainPageViewModel.cs b/TVHome/TVHome/ViewModels/MainPageViewModel.cs
index 3990937..31be243 100755
--- a/TVHome/TVHome/ViewModels/MainPageViewModel.cs
+++ b/TVHome/TVHome/ViewModels/MainPageViewModel.cs
@@ -68,9 +68,10 @@ namespace TVHome.ViewModels
{
return selectedMenuName;
}
+
set
{
- if(selectedMenuName != value)
+ if (selectedMenuName != value)
{
selectedMenuName = value;
ChangeSelectedPanelName(value, true);
@@ -241,7 +242,7 @@ namespace TVHome.ViewModels
}
/// <summary>
- /// A method for makeing MainMenu items and display in MainPanel
+ /// A method for making MainMenu items and display in MainPanel
/// </summary>
private void MakeMainMenuItems()
{
diff --git a/TVHome/TVHome/packages.config b/TVHome/TVHome/packages.config
index 0dc7a5a..e9dfad3 100755
--- a/TVHome/TVHome/packages.config
+++ b/TVHome/TVHome/packages.config
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Tizen.Xamarin.Forms.Extension" version="2.3.5-r233-002" targetFramework="portable45-net45+win8+wp8+wpa81" />
- <package id="Xamarin.Forms" version="2.3.5-r233-003" targetFramework="portable45-net45+win8+wp8+wpa81" />
+ <package id="Tizen.Xamarin.Forms.Extension" version="2.3.5-r233-003" targetFramework="portable45-net45+win8+wp8+wpa81" />
+ <package id="Xamarin.Forms" version="2.3.5-r233-008" targetFramework="portable45-net45+win8+wp8+wpa81" />
</packages> \ No newline at end of file
diff --git a/TVHomeApps.sln b/TVHomeApps.sln
index 3b36328..074519a 100644
--- a/TVHomeApps.sln
+++ b/TVHomeApps.sln
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.26430.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVHome", "TVHome\TVHome\TVHome.csproj", "{54DD6673-7E64-48E6-A008-4D455E19E017}"
EndProject
@@ -21,6 +21,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibTVRefCommonTizen", "LibT
{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}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -51,6 +53,10 @@ Global
{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
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE