This commit is contained in:
Javier Suárez Ruiz 2016-01-21 20:50:29 +01:00
Родитель 87c98e3491
Коммит 54ff3a1ad7
366 изменённых файлов: 42329 добавлений и 0 удалений

Двоичные данные
Fingerprint/.vs/Fingerprint/v14/.suo Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,40 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fingerprint", "Fingerprint\Fingerprint.csproj", "{5F585220-664A-4C21-83C3-186366DEF50B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|ARM = Release|ARM
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5F585220-664A-4C21-83C3-186366DEF50B}.Debug|ARM.ActiveCfg = Debug|ARM
{5F585220-664A-4C21-83C3-186366DEF50B}.Debug|ARM.Build.0 = Debug|ARM
{5F585220-664A-4C21-83C3-186366DEF50B}.Debug|ARM.Deploy.0 = Debug|ARM
{5F585220-664A-4C21-83C3-186366DEF50B}.Debug|x64.ActiveCfg = Debug|x64
{5F585220-664A-4C21-83C3-186366DEF50B}.Debug|x64.Build.0 = Debug|x64
{5F585220-664A-4C21-83C3-186366DEF50B}.Debug|x64.Deploy.0 = Debug|x64
{5F585220-664A-4C21-83C3-186366DEF50B}.Debug|x86.ActiveCfg = Debug|x86
{5F585220-664A-4C21-83C3-186366DEF50B}.Debug|x86.Build.0 = Debug|x86
{5F585220-664A-4C21-83C3-186366DEF50B}.Debug|x86.Deploy.0 = Debug|x86
{5F585220-664A-4C21-83C3-186366DEF50B}.Release|ARM.ActiveCfg = Release|ARM
{5F585220-664A-4C21-83C3-186366DEF50B}.Release|ARM.Build.0 = Release|ARM
{5F585220-664A-4C21-83C3-186366DEF50B}.Release|ARM.Deploy.0 = Release|ARM
{5F585220-664A-4C21-83C3-186366DEF50B}.Release|x64.ActiveCfg = Release|x64
{5F585220-664A-4C21-83C3-186366DEF50B}.Release|x64.Build.0 = Release|x64
{5F585220-664A-4C21-83C3-186366DEF50B}.Release|x64.Deploy.0 = Release|x64
{5F585220-664A-4C21-83C3-186366DEF50B}.Release|x86.ActiveCfg = Release|x86
{5F585220-664A-4C21-83C3-186366DEF50B}.Release|x86.Build.0 = Release|x86
{5F585220-664A-4C21-83C3-186366DEF50B}.Release|x86.Deploy.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Просмотреть файл

@ -0,0 +1,16 @@
<Application
x:Class="Fingerprint.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Fingerprint"
xmlns:locator="using:Fingerprint.ViewModels.Base"
RequestedTheme="Light">
<Application.Resources>
<ResourceDictionary>
<!-- ViewModelLocator -->
<locator:ViewModelLocator x:Key="Locator" />
</ResourceDictionary>
</Application.Resources>
</Application>

Просмотреть файл

@ -0,0 +1,96 @@
namespace Fingerprint
{
using Fingerprint.Views;
using System;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
/// <summary>
/// Proporciona un comportamiento específico de la aplicación para complementar la clase Application predeterminada.
/// </summary>
sealed partial class App : Application
{
/// <summary>
/// Inicializa el objeto de aplicación Singleton. Esta es la primera línea de código creado
/// ejecutado y, como tal, es el equivalente lógico de main() o WinMain().
/// </summary>
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
}
/// <summary>
/// Se invoca cuando el usuario final inicia la aplicación normalmente. Se usarán otros puntos
/// de entrada cuando la aplicación se inicie para abrir un archivo específico, por ejemplo.
/// </summary>
/// <param name="e">Información detallada acerca de la solicitud y el proceso de inicio.</param>
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
#if DEBUG
if (System.Diagnostics.Debugger.IsAttached)
{
this.DebugSettings.EnableFrameRateCounter = true;
}
#endif
Frame rootFrame = Window.Current.Content as Frame;
// No repetir la inicialización de la aplicación si la ventana tiene contenido todavía,
// solo asegurarse de que la ventana está activa.
if (rootFrame == null)
{
// Crear un marco para que actúe como contexto de navegación y navegar a la primera página.
rootFrame = new Frame();
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Cargar el estado de la aplicación suspendida previamente
}
// Poner el marco en la ventana actual.
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
// Cuando no se restaura la pila de navegación, navegar a la primera página,
// configurando la nueva página pasándole la información requerida como
//parámetro de navegación
rootFrame.Navigate(typeof(MainView), e.Arguments);
}
// Asegurarse de que la ventana actual está activa.
Window.Current.Activate();
}
/// <summary>
/// Se invoca cuando la aplicación la inicia normalmente el usuario final. Se usarán otros puntos
/// </summary>
/// <param name="sender">Marco que produjo el error de navegación</param>
/// <param name="e">Detalles sobre el error de navegación</param>
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
{
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
}
/// <summary>
/// Se invoca al suspender la ejecución de la aplicación. El estado de la aplicación se guarda
/// sin saber si la aplicación se terminará o se reanudará con el contenido
/// de la memoria aún intacto.
/// </summary>
/// <param name="sender">Origen de la solicitud de suspensión.</param>
/// <param name="e">Detalles sobre la solicitud de suspensión.</param>
private void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
//TODO: Guardar el estado de la aplicación y detener toda actividad en segundo plano
deferral.Complete();
}
}
}

Двоичные данные
Fingerprint/Fingerprint/Assets/LockScreenLogo.scale-200.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Двоичные данные
Fingerprint/Fingerprint/Assets/SplashScreen.scale-200.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 7.5 KiB

Двоичные данные
Fingerprint/Fingerprint/Assets/Square150x150Logo.scale-200.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.9 KiB

Двоичные данные
Fingerprint/Fingerprint/Assets/Square44x44Logo.scale-200.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.6 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.2 KiB

Двоичные данные
Fingerprint/Fingerprint/Assets/StoreLogo.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Двоичные данные
Fingerprint/Fingerprint/Assets/Wide310x150Logo.scale-200.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 3.1 KiB

Просмотреть файл

@ -0,0 +1,152 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProjectGuid>{5F585220-664A-4C21-83C3-186366DEF50B}</ProjectGuid>
<OutputType>AppContainerExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Fingerprint</RootNamespace>
<AssemblyName>Fingerprint</AssemblyName>
<DefaultLanguage>es-ES</DefaultLanguage>
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion>10.0.10586.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.10240.0</TargetPlatformMinVersion>
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<PackageCertificateKeyFile>Fingerprint_TemporaryKey.pfx</PackageCertificateKeyFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>ARM</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
<OutputPath>bin\ARM\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>ARM</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<ItemGroup>
<!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
<None Include="project.json" />
</ItemGroup>
<ItemGroup>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\Dialog\DialogService.cs" />
<Compile Include="Services\Dialog\IDialogService.cs" />
<Compile Include="Services\UserConsentVerifier\IUserConsentVerifierService.cs" />
<Compile Include="Services\UserConsentVerifier\UserConsentVerifierService.cs" />
<Compile Include="ViewModels\Base\DelegateCommand.cs" />
<Compile Include="ViewModels\Base\DelegateCommandAsync.cs" />
<Compile Include="ViewModels\Base\ViewModelBase.cs" />
<Compile Include="ViewModels\Base\ViewModelLocator.cs" />
<Compile Include="ViewModels\MainViewModel.cs" />
<Compile Include="Views\MainView.xaml.cs">
<DependentUpon>MainView.xaml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest">
<SubType>Designer</SubType>
</AppxManifest>
<None Include="Fingerprint_TemporaryKey.pfx" />
</ItemGroup>
<ItemGroup>
<Content Include="Properties\Default.rd.xml" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\StoreLogo.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
</ItemGroup>
<ItemGroup>
<Page Include="Views\MainView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup />
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' ">
<VisualStudioVersion>14.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Двоичные данные
Fingerprint/Fingerprint/Fingerprint_TemporaryKey.pfx Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
IgnorableNamespaces="uap mp">
<Identity
Name="80b8c6c1-0203-4441-a760-098cfdb882b0"
Publisher="CN=javie"
Version="1.0.0.0" />
<mp:PhoneIdentity PhoneProductId="80b8c6c1-0203-4441-a760-098cfdb882b0" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
<Properties>
<DisplayName>Fingerprint</DisplayName>
<PublisherDisplayName>javie</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="Fingerprint.App">
<uap:VisualElements
DisplayName="Fingerprint"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png"
Description="Fingerprint"
BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"/>
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
</Capabilities>
</Package>

Просмотреть файл

@ -0,0 +1,29 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Fingerprint")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Fingerprint")]
[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: ComVisible(false)]

Просмотреть файл

@ -0,0 +1,30 @@
<!--
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
developers. However, you can modify these parameters to modify the behavior of the .NET Native
optimizer.
Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919
To fully enable reflection for App1.MyClass and all of its public/private members
<Type Name="App1.MyClass" Dynamic="Required All"/>
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
<Namespace Name="DataClasses.ViewModels" Seralize="All" />
-->
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<!--
An Assembly element with Name="*Application*" applies to all assemblies in
the application package. The asterisks are not wildcards.
-->
<Assembly Name="*Application*" Dynamic="Required All"/>
<!-- Add your application specific runtime directives here. -->
</Application>
</Directives>

Просмотреть файл

@ -0,0 +1,13 @@
namespace Fingerprint.Services.Dialog
{
using Windows.UI.Popups;
public class DialogService : IDialogService
{
public void Show(string message)
{
var messageDialog = new MessageDialog(message);
var result = messageDialog.ShowAsync();
}
}
}

Просмотреть файл

@ -0,0 +1,7 @@
namespace Fingerprint.Services.Dialog
{
public interface IDialogService
{
void Show(string message);
}
}

Просмотреть файл

@ -0,0 +1,13 @@
namespace Fingerprint.Services.UserConsentVerifier
{
using System.Threading.Tasks;
using Windows.Security.Credentials.UI;
public interface IUserConsentVerifierService
{
Task<bool> CheckUserConsentAvailabilityAsync();
Task<UserConsentVerifierAvailability> GetUserConsentAvailabilityAsync();
Task<bool> RequestUserConsentVerificationAsync(string message);
Task<UserConsentVerificationResult> GetRequestUserConsentVerificationAsync(string message);
}
}

Просмотреть файл

@ -0,0 +1,61 @@
namespace Fingerprint.Services.UserConsentVerifier
{
using System;
using System.Threading.Tasks;
using Windows.Security.Credentials.UI;
public class UserConsentVerifierService : IUserConsentVerifierService
{
public async Task<bool> CheckUserConsentAvailabilityAsync()
{
try
{
UserConsentVerifierAvailability consentAvailability =
await UserConsentVerifier.CheckAvailabilityAsync();
if (consentAvailability == UserConsentVerifierAvailability.Available)
return true;
else
return false;
}
catch
{
return false;
}
}
public async Task<UserConsentVerifierAvailability> GetUserConsentAvailabilityAsync()
{
UserConsentVerifierAvailability consentAvailability =
await UserConsentVerifier.CheckAvailabilityAsync();
return consentAvailability;
}
public async Task<bool> RequestUserConsentVerificationAsync(string message)
{
try
{
UserConsentVerificationResult consentResult =
await UserConsentVerifier.RequestVerificationAsync(message);
if (consentResult == UserConsentVerificationResult.Verified)
return true;
else
return false;
}
catch
{
return false;
}
}
public async Task<UserConsentVerificationResult> GetRequestUserConsentVerificationAsync(string message)
{
UserConsentVerificationResult consentResult =
await UserConsentVerifier.RequestVerificationAsync(message);
return consentResult;
}
}
}

Просмотреть файл

@ -0,0 +1,131 @@
namespace Fingerprint.ViewModels.Base
{
using System;
using System.Windows.Input;
/// <summary>
/// This class allows us to delegate command execution to viewmodels.
/// </summary>
public class DelegateCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;
/// <summary>
/// Constructor not using canExecute.
/// </summary>
/// <param name="execute"></param>
public DelegateCommand(Action execute) : this(execute, null) { }
/// <summary>
/// Constructor using both execute and canExecute.
/// </summary>
/// <param name="execute"></param>
/// <param name="canExecute"></param>
public DelegateCommand(Action execute, Func<bool> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
/// <summary>
/// This method is called from XAML to evaluate if the command can be executed.
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
public bool CanExecute(object parameter)
{
if (_canExecute != null)
return _canExecute();
return true;
}
/// <summary>
/// This method is called from XAML to execute the command.
/// </summary>
/// <param name="parameter"></param>
public void Execute(object parameter)
{
_execute();
}
/// <summary>
/// This method allow us to force the execution of CanExecute method to reevaluate execution.
/// </summary>
public void RaiseCanExecuteChanged()
{
var tmpHandle = CanExecuteChanged;
if (tmpHandle != null)
tmpHandle(this, new EventArgs());
}
/// <summary>
/// This event notify XAML controls using the command to reevaluate the CanExecute of it.
/// </summary>
public event EventHandler CanExecuteChanged;
}
/// <summary>
/// This class allows us to delegate command execution to viewmodels using a T type as parameter.
/// </summary>
public class DelegateCommand<T> : ICommand
{
private readonly Action<T> _execute;
private readonly Func<T, bool> _canExecute;
/// <summary>
/// Constructor not using canExecute.
/// </summary>
/// <param name="execute"></param>
public DelegateCommand(Action<T> execute) : this(execute, null) { }
/// <summary>
/// Constructor using both execute and canExecute.
/// </summary>
/// <param name="execute"></param>
/// <param name="canExecute"></param>
public DelegateCommand(Action<T> execute, Func<T, bool> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
/// <summary>
/// This method is called from XAML to evaluate if the command can be executed.
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
public bool CanExecute(object parameter)
{
if (_canExecute != null)
return _canExecute((T)parameter);
return true;
}
/// <summary>
/// This method is called from XAML to execute the command.
/// </summary>
/// <param name="parameter"></param>
public void Execute(object parameter)
{
_execute((T)parameter);
}
/// <summary>
/// This method allow us to force the execution of CanExecute method to reevaluate execution.
/// </summary>
public void RaiseCanExecuteChanged()
{
var tmpHandle = CanExecuteChanged;
if (tmpHandle != null)
tmpHandle(this, new EventArgs());
}
/// <summary>
/// This event notify XAML controls using the command to reevaluate the CanExecute of it.
/// </summary>
public event EventHandler CanExecuteChanged;
}
}

Просмотреть файл

@ -0,0 +1,137 @@
using System;
using System.Threading.Tasks;
using System.Windows.Input;
namespace Fingerprint.ViewModels.Base
{
/// <summary>
/// This class allows us to delegate command execution to viewmodels.
/// This version of the command allow to use async/await.
/// </summary>
public class DelegateCommandAsync : ICommand
{
private readonly Func<Task<bool>> _canExecute;
private readonly Func<Task> _execute;
/// <summary>
/// Constructor not using canExecute.
/// </summary>
/// <param name="execute"></param>
public DelegateCommandAsync(Func<Task> execute) : this(execute, null)
{
}
/// <summary>
/// Constructor using both execute and canExecute.
/// </summary>
/// <param name="execute"></param>
/// <param name="canExecute"></param>
public DelegateCommandAsync(Func<Task> execute, Func<Task<bool>> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
/// <summary>
/// This method is called from XAML to evaluate if the command can be executed.
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
public bool CanExecute(object parameter)
{
if (_canExecute != null)
return _canExecute().Result;
return true;
}
/// <summary>
/// This method is called from XAML to execute the command.
/// </summary>
/// <param name="parameter"></param>
public void Execute(object parameter)
{
_execute();
}
/// <summary>
/// This event notify XAML controls using the command to reevaluate the CanExecute of it.
/// </summary>
public event EventHandler CanExecuteChanged;
/// <summary>
/// This method allow us to force the execution of CanExecute method to reevaluate execution.
/// </summary>
public void RaiseCanExecuteChanged()
{
EventHandler tmpHandle = CanExecuteChanged;
if (tmpHandle != null)
tmpHandle(this, new EventArgs());
}
}
/// <summary>
/// This class allows us to delegate command execution to viewmodels using a T type as parameter.
/// </summary>
public class DelegateCommandAsync<T> : ICommand
{
private readonly Func<T, Task<bool>> _canExecute;
private readonly Func<T, Task> _execute;
/// <summary>
/// Constructor not using canExecute.
/// </summary>
/// <param name="execute"></param>
public DelegateCommandAsync(Func<T, Task> execute) : this(execute, null)
{
}
/// <summary>
/// Constructor using both execute and canExecute.
/// </summary>
/// <param name="execute"></param>
/// <param name="canExecute"></param>
public DelegateCommandAsync(Func<T, Task> execute, Func<T, Task<bool>> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
/// <summary>
/// This method is called from XAML to evaluate if the command can be executed.
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
public bool CanExecute(object parameter)
{
if (_canExecute != null)
return _canExecute((T) parameter).Result;
return true;
}
/// <summary>
/// This method is called from XAML to execute the command.
/// </summary>
/// <param name="parameter"></param>
public void Execute(object parameter)
{
_execute((T) parameter);
}
/// <summary>
/// This event notify XAML controls using the command to reevaluate the CanExecute of it.
/// </summary>
public event EventHandler CanExecuteChanged;
/// <summary>
/// This method allow us to force the execution of CanExecute method to reevaluate execution.
/// </summary>
public void RaiseCanExecuteChanged()
{
EventHandler tmpHandle = CanExecuteChanged;
if (tmpHandle != null)
tmpHandle(this, new EventArgs());
}
}
}

Просмотреть файл

@ -0,0 +1,17 @@
namespace Fingerprint.ViewModels.Base
{
using System.ComponentModel;
using System.Runtime.CompilerServices;
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged([CallerMemberName]string propertyName = "")
{
var Handler = PropertyChanged;
if (Handler != null)
Handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}

Просмотреть файл

@ -0,0 +1,28 @@
namespace Fingerprint.ViewModels.Base
{
using Microsoft.Practices.Unity;
using Services.Dialog;
using Services.UserConsentVerifier;
public class ViewModelLocator
{
readonly IUnityContainer _container;
public ViewModelLocator()
{
_container = new UnityContainer();
// ViewModels
_container.RegisterType<MainViewModel>();
// Services
_container.RegisterType<IUserConsentVerifierService, UserConsentVerifierService>(new ContainerControlledLifetimeManager());
_container.RegisterType<IDialogService, DialogService>(new ContainerControlledLifetimeManager());
}
public MainViewModel MainViewModel
{
get { return _container.Resolve<MainViewModel>(); }
}
}
}

Просмотреть файл

@ -0,0 +1,104 @@
namespace Fingerprint.ViewModels
{
using Fingerprint.ViewModels.Base;
using Services.Dialog;
using Services.UserConsentVerifier;
using System.Threading.Tasks;
using System.Windows.Input;
public class MainViewModel : ViewModelBase
{
// Variables
private bool _isUserConsentAvalaible;
private string _message;
// Commands
private ICommand _availabilityCommand;
private ICommand _verificationCommand;
// Services
private IUserConsentVerifierService _userConsentVerifierService;
private IDialogService _dialogService;
public MainViewModel(IUserConsentVerifierService userConsentVerifierService,
IDialogService dialogService)
{
_userConsentVerifierService = userConsentVerifierService;
_dialogService = dialogService;
}
public bool IsUserConsentAvalaible
{
get { return _isUserConsentAvalaible; }
set
{
_isUserConsentAvalaible = value;
RaisePropertyChanged();
}
}
public string Message
{
get { return _message; }
set
{
_message = value;
RaisePropertyChanged();
}
}
public ICommand AvailabilityCommand
{
get { return _availabilityCommand = _availabilityCommand ?? new DelegateCommandAsync(AvailabilityCommandExecute); }
}
public ICommand VerificationCommand
{
get { return _verificationCommand = _verificationCommand ?? new DelegateCommandAsync(VerificationCommandExecute); }
}
public async Task AvailabilityCommandExecute()
{
IsUserConsentAvalaible = await _userConsentVerifierService.CheckUserConsentAvailabilityAsync();
}
public async Task VerificationCommandExecute()
{
if(string.IsNullOrEmpty(Message))
{
_dialogService.Show("Message in required!");
return;
}
var result = await _userConsentVerifierService.GetRequestUserConsentVerificationAsync(Message);
var message = string.Empty;
switch(result)
{
case Windows.Security.Credentials.UI.UserConsentVerificationResult.Canceled:
message = "Consent request prompt was canceled.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceBusy:
message = "Biometric device is busy.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceNotPresent:
message = "Biometric device not found.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.DisabledByPolicy:
message = "Disabled by policy.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.NotConfiguredForUser:
message = "No fingeprints registered.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.RetriesExhausted:
message = "Too many retries.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.Verified:
message = "User verified.";
break;
}
_dialogService.Show(message);
}
}
}

Просмотреть файл

@ -0,0 +1,26 @@
<Page
x:Class="Fingerprint.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Fingerprint.Views"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
DataContext="{Binding MainViewModel, Source={StaticResource Locator}}">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Button Content="Check UserConsent Availability"
Command="{Binding AvailabilityCommand}" />
<TextBlock Text="Request UserConsent Verification"
Margin="0,24,0,0"/>
<TextBox
PlaceholderText="Insert Message..."
Text="{Binding Message, Mode=TwoWay}"/>
<Button Content="Request UserConsent Verification"
Command="{Binding VerificationCommand}"
IsEnabled="{Binding IsUserConsentAvalaible}"/>
</StackPanel>
</Grid>
</Page>

Просмотреть файл

@ -0,0 +1,12 @@
using Windows.UI.Xaml.Controls;
namespace Fingerprint.Views
{
public sealed partial class MainView : Page
{
public MainView()
{
this.InitializeComponent();
}
}
}

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/App.xbf Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp build" xmlns:build="http://schemas.microsoft.com/developer/appx/2015/build">
<!--
ESTE ARCHIVO DE MANIFIESTO DEL PAQUETE SE GENERA MEDIANTE EL PROCESO DE COMPILACIÓN.
Los cambios realizados en el archivo se perderán al regenerarlo. Para corregir los errores de este archivo, edite el archivo de origen .appxmanifest.
Para obtener más información acerca de los archivos de manifiesto del paquete, vea http://go.microsoft.com/fwlink/?LinkID=241727
-->
<Identity Name="80b8c6c1-0203-4441-a760-098cfdb882b0" Publisher="CN=javie" Version="1.0.0.0" ProcessorArchitecture="x86" />
<mp:PhoneIdentity PhoneProductId="80b8c6c1-0203-4441-a760-098cfdb882b0" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
<Properties>
<DisplayName>Fingerprint</DisplayName>
<PublisherDisplayName>javie</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10240.0" MaxVersionTested="10.0.10586.0" />
<PackageDependency Name="Microsoft.NET.CoreRuntime.1.0" MinVersion="1.0.23430.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
<PackageDependency Name="Microsoft.VCLibs.140.00.Debug" MinVersion="14.0.22929.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
</Dependencies>
<Resources>
<Resource Language="ES-ES" />
<Resource Language="EN" />
<Resource Language="EN-US" />
</Resources>
<Applications>
<Application Id="App" Executable="Fingerprint.exe" EntryPoint="Fingerprint.App">
<uap:VisualElements DisplayName="Fingerprint" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="Fingerprint" BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" />
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
</Capabilities>
<build:Metadata>
<build:Item Name="TargetFrameworkMoniker" Value=".NETCore,Version=v5.0" />
<build:Item Name="VisualStudio" Version="14.0" />
<build:Item Name="VisualStudioEdition" Value="Microsoft Visual Studio Enterprise 2015" />
<build:Item Name="OperatingSystem" Version="10.0.10586.0 (th2_release.151029-1700)" />
<build:Item Name="Microsoft.Build.AppxPackage.dll" Version="14.0.24720.0" />
<build:Item Name="ProjectGUID" Value="{5F585220-664A-4C21-83C3-186366DEF50B}" />
<build:Item Name="OptimizingToolset" Value="None" />
<build:Item Name="TargetRuntime" Value="Managed" />
<build:Item Name="Microsoft.Windows.UI.Xaml.Build.Tasks.dll" Version="14.0.24720.0" />
<build:Item Name="MakePri.exe" Version="10.0.10586.15 (th2_release.151119-1817)" />
</build:Metadata>
</Package>

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 7.5 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.9 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.6 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.2 KiB

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/Assets/StoreLogo.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 3.1 KiB

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/ClrCompression.dll Normal file

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/Fingerprint.exe Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<Roots >
<Roots.PropertyPathNames>
<RootPropertyPathName Name="MainViewModel" />
<RootPropertyPathName Name="VerificationCommand" />
<RootPropertyPathName Name="IsUserConsentAvalaible" />
<RootPropertyPathName Name="Message" />
<RootPropertyPathName Name="AvailabilityCommand" />
</Roots.PropertyPathNames>
<Roots.RootTypes>
<RootType FullName="Windows.UI.Xaml.Application">
<RootProperty Name="RequestedTheme" />
<RootProperty Name="Resources" />
</RootType>
<RootType FullName="Windows.UI.Xaml.ResourceDictionary" />
<RootType FullName="Fingerprint.ViewModels.Base.ViewModelLocator" />
<RootType FullName="Windows.UI.Xaml.Controls.Page">
<RootProperty Name="DataContext" />
<RootProperty Name="Content" />
</RootType>
<RootType FullName="Windows.UI.Xaml.Data.Binding">
<RootProperty Name="Source" />
<RootProperty Name="Mode" />
</RootType>
<RootType FullName="Microsoft.Xaml.DirectUI.ProxyTypes.StaticResourceExtension" />
<RootType FullName="Windows.UI.Xaml.Controls.Grid">
<RootProperty Name="Background" />
<RootProperty Name="Children" />
</RootType>
<RootType FullName="Microsoft.Xaml.DirectUI.ProxyTypes.ThemeResourceExtension" />
<RootType FullName="Windows.UI.Xaml.Controls.StackPanel">
<RootProperty Name="HorizontalAlignment" />
<RootProperty Name="VerticalAlignment" />
<RootProperty Name="Children" />
</RootType>
<RootType FullName="Windows.UI.Xaml.Controls.Button">
<RootProperty Name="Content" />
<RootProperty Name="Command" />
<RootProperty Name="IsEnabled" />
</RootType>
<RootType FullName="Windows.UI.Xaml.Controls.TextBlock">
<RootProperty Name="Text" />
<RootProperty Name="Margin" />
</RootType>
<RootType FullName="Windows.UI.Xaml.Controls.TextBox">
<RootProperty Name="PlaceholderText" />
<RootProperty Name="Text" />
</RootType>
<RootType FullName="Fingerprint.Views.MainView" />
</Roots.RootTypes>
</Roots>

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/Microsoft.CSharp.dll Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,30 @@
<!--
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
developers. However, you can modify these parameters to modify the behavior of the .NET Native
optimizer.
Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919
To fully enable reflection for App1.MyClass and all of its public/private members
<Type Name="App1.MyClass" Dynamic="Required All"/>
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
<Namespace Name="DataClasses.ViewModels" Seralize="All" />
-->
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<!--
An Assembly element with Name="*Application*" applies to all assemblies in
the application package. The asterisks are not wildcards.
-->
<Assembly Name="*Application*" Dynamic="Required All"/>
<!-- Add your application specific runtime directives here. -->
</Application>
</Directives>

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.AppContext.dll Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Collections.dll Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Core.dll Normal file

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Data.Common.dll Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.IO.dll Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Linq.dll Normal file

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Net.Http.Rtc.dll Normal file

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Net.Http.dll Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Net.Requests.dll Normal file

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Net.Sockets.dll Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Net.dll Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Numerics.dll Normal file

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.ObjectModel.dll Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичные данные
Fingerprint/Fingerprint/bin/x86/Debug/AppX/System.Private.Uri.dll Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Двоичный файл не отображается.

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше