diff options
author | ChulSeung Kim <charles0.kim@samsung.com> | 2017-06-05 16:27:18 +0900 |
---|---|---|
committer | ChulSeung Kim <charles0.kim@samsung.com> | 2017-06-08 18:34:56 +0900 |
commit | b75d1fd65ffa45a63398fe401157504e035d5085 (patch) | |
tree | cd2e363d38621ad78735828476f262a34ee508ae | |
parent | 262f03fb828c54f6d2c70bc4c0bfb1943d1f9499 (diff) | |
download | home-b75d1fd65ffa45a63398fe401157504e035d5085.tar.gz home-b75d1fd65ffa45a63398fe401157504e035d5085.tar.bz2 home-b75d1fd65ffa45a63398fe401157504e035d5085.zip |
Add unit test case for RecentShortcutController.
Remove meaningless TODOs
Change-Id: I157ddce45ede7ac4967add7ba95e4c9986917e4f
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 Binary files differdeleted file mode 100644 index 738a625..0000000 --- a/TVHome/TVHome.TizenTV/res/org.tizen.example.Butterfly.Tizen.png +++ /dev/null diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.Calculator.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.Calculator.Tizen.png Binary files differdeleted file mode 100644 index fb15bac..0000000 --- a/TVHome/TVHome.TizenTV/res/org.tizen.example.Calculator.Tizen.png +++ /dev/null diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.HomeFitness.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.HomeFitness.Tizen.png Binary files differdeleted file mode 100644 index 738a625..0000000 --- a/TVHome/TVHome.TizenTV/res/org.tizen.example.HomeFitness.Tizen.png +++ /dev/null diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.Sports.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.Sports.Tizen.png Binary files differdeleted file mode 100644 index fb15bac..0000000 --- a/TVHome/TVHome.TizenTV/res/org.tizen.example.Sports.Tizen.png +++ /dev/null diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.Toda.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.Toda.Tizen.png Binary files differdeleted file mode 100644 index fb15bac..0000000 --- a/TVHome/TVHome.TizenTV/res/org.tizen.example.Toda.Tizen.png +++ /dev/null diff --git a/TVHome/TVHome.TizenTV/res/org.tizen.example.YouTube.Tizen.png b/TVHome/TVHome.TizenTV/res/org.tizen.example.YouTube.Tizen.png Binary files differdeleted file mode 100644 index 738a625..0000000 --- a/TVHome/TVHome.TizenTV/res/org.tizen.example.YouTube.Tizen.png +++ /dev/null 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 |